Nombre maximal de paramètres en Java déclaration de méthode

Quel est le nombre maximum de paramètres à une méthode en Java peut avoir et pourquoi?

Je suis à l'aide de Java 1.8 sur un système Windows 64 bits.

Toutes les réponses sur StackOverflow à propos de ce dire que la limite technique est de 255 paramètres sans préciser pourquoi.

Pour être précis, 255 statique et 254 pour les non-statique (this sera le 255e dans ce cas) méthodes.

J'ai pensé que cela pourrait être décrit dans une sorte de spécification et qu'il est tout simplement un définis de manière statique nombre maximal de paramètres autorisés.

Mais ce n'était valable que pour int et tous les 4 octets de types.
J'ai fait quelques tests avec long paramètres, et je n'ai pu déclarer 127 paramètres dans ce cas.

Avec String paramètres, le nombre autorisé j'en ai déduit du test est de 255 (il est peut-être parce que la taille de référence est de 4 octets en Java?).

Mais depuis que je suis à l'aide d'un système 64 bits, les références de la taille doit être de 8 octets et donc, avec String paramètres le nombre maximal autorisé doit être 127, semblable à long types.

Comment cette limite est exactement appliqué?

La limite ont rien à voir avec la taille de la pile de la méthode?

Note: je ne suis pas vraiment à l'utilisation de ces nombreux paramètres à une méthode, mais cette question est seulement de clarifier le comportement exact.

  • 7, si vous ne voulez pas devenir fou avec la lisibilité. (Je sais ce que vous êtes en train de demander).
  • Je dirais <= 4. Rien de plus devrait probablement être enveloppé dans un objet.
  • j'ai été en mesure de déclarer que uniquement Ce qui erreur de compilation avez-vous lorsque vous avez essayé avec plus?
  • Pourquoi est-ce une question intéressante? Si vous écrivez un programme et que vous avez atteint cette limite, votre conception est erronée. Je ne comprends pas pourquoi une telle pratiquement inutile question devient donc beaucoup de upvotes.
  • parce que ce questions de questions de connaissances de la spécification de la JVM. Cette question n'est pas de se demander "Comment faire ceci ou cela ?" au lieu de cela il des questions "Pourquoi j'ai besoin de ça ?"... +1 question Intéressante Userv
  • erreur : trop de paramètres
  • exactement ce que je pensais. L'OP n'était tout simplement des curieux.
  • Je suppose que pourrait être utile à savoir pour la génération automatique de code compilable.
  • "J'ai essayé cela avec les paramètres longs, et j'ai été en mesure de déclarer que uniquement de 128 paramètres dans ce cas." - selon la spécification, chaque long est de 2 unités, et 2 * 128 = 256 qui dépasse la limite de 255. Êtes-vous sûr que vous avez réussi à déclarer 128 paramètres longs?
  • il est de 127. J'ai édité. Merci
  • Je suis tombé sur ce post quand j'ai reçu un SAVON fichier WSDL qui a un objet défini avec plus de 256 membres et d'un avertissement de la Java constructeur généré à partir il échoue parce qu'il aurait plus que le nombre autorisé un des paramètres.
  • Notez que vous pouvez utiliser efficacement que de nombreux paramètres comme vous le souhaitez. Des Collections sont des objets et appelée par la référence. Vous pouvez utiliser une Map<String, Object> ou une Liste<Object> pour émuler des paramètres mais en passant des milliers d'entre eux dans un seul argument.
  • Pour un exemple concret: je veux faire un "print" méthode (un raccourci) qui prend un nombre variable d'arguments ET de gravures des tableaux et des listes de bien. Mais pour se différencier print(1,2,3) et print(new int[]{1,2,3}), je ne peux pas utiliser print(Object... args), mais besoin de déclarer des méthodes comme print(Object arg0,Object arg1,Object arg2) pour tous les nombres possibles. Je vais donc mettre de 256 print les méthodes dans un (horrible à la recherche), puis une de plus pour 257+ arguments (qui fonctionne réellement avec la Object... notation).

InformationsquelleAutor userv | 2015-06-01