est-il possible de revenir dans une méthode statique une classe? Je vais expliquer ...
J'ai: p> Je veux créer une méthode statique dans les retours de la sorcière B et p> ceci, sans créer d'une instance de est-ce possible? P> p> A code>. Donc, vous pouvez faire: p>
A code >. Il suffit d'utiliser des méthodes statiques. P>
9 Réponses :
Non, ce n'est pas possible. Vous ne pouvez retourner une référence à une instance d'une classe. Le plus proche que vous puissiez y arriver est de renvoyer une référence à une variable de catégorie de type. La question est: pourquoi voulez-vous cela? Quel problème essayez-vous de résoudre? Il peut y avoir une meilleure solution. P>
Même si cela serait possible, cela ne sera pas très utile. L'appel Et vous ne pouvez pas utiliser les interfaces pour mettre en œuvre des méthodes statiques. Alors, que devrait-il être bon? P> a.blah () code> ne crée pas une instance de
A code>. C'est une méthode statique sans besoin d'une instance. P>
Non, cela n'est pas possible. Vous avez deux options: p>
appelez directement b.geta () code> retourne une instance de
A, et
bla () code> sera un non-statique
Méthode. P> LI>
a.blah () code>. p> li>
ol>
Possible, mais pas recommandé. Voir cette réponse Stackoverflow.com / Questions / 1932625 / ...
Si vous ne voulez pas avoir une instance de A code>, alors laissez
b code> appel
bla () code> directement. I.e.
class B {
void blah() {
A.blah();
}
}
Je vais deviner que la raison pour laquelle vous demandez est que vous voulez que B de renvoie de nombreuses classes différentes avec des comportements différents - pas seulement A.
Vous voulez probablement utiliser une interface pour ce que vous faites à la place. . P>
interface IA { void blah(); } public class B { IA getA1() { return new IA { void blah() { ...code... } } } IA getA2() { ... } IA getA3() { ... } } myCallingMethod { B.getA1().blah(); B.getA2().blah(); B.getA3().blah(); }
Vous pouvez retourner une méthode à l'aide de la réflexion que vous pouvez invoquer () plus tard. Cependant, on dirait que vous essayez de faire quelque chose qui devrait être fait d'une autre manière. Pourquoi essayez-vous de faire cela? P>
Les gens disent que c'est impossible, et c'est genre de B> vrai, mais si vous utilisez l'API de réflexion, vous pouvez faire quelque chose près de cela.
Voici comment vous pourriez le faire. P>
Vous avez une classe qui fait cela. p> puis pour appeler bla vous faites: p> Alors, pourquoi voudriez-vous faire cela? Eh bien, si vous le faites de cette façon, vous pouvez modifier la classe A à Geta () pourrait retourner A, B, C ou D, tous avec des fonctions de Blah () différentes. Je ne suis pas vraiment sûr de ce que cela servirait, mais si vous voulez le faire, vous le pouvez. P> Voir:
B.getA(); A.blah();
+1 pour trouver cette échappatoire en Java. -1 pour ne pas jeter un mot de prudence que cela ne devrait pas être fait. BTW, Eclipse génère cet avertissement lors de la compilation de ce code la méthode statique BLAH () à partir du type A doit être consulté de manière statique code>.
org.apache.commons.cli.OptionBuilder code> Utilise ce modèle anti-motif de méthodes statiques appelantes sur les instances retournées.
Ce n'est pas une échappatoire en Java. C'est juste un exemple qui ne fait pas ce que vous pensez que cela fait. Voir ma réponse.
Il s'agit d'une réfutation de la réponse de @ irreputable: il "fonctionne", mais probablement pas dans le sens que vous attendez, et certainement pas de manière utile. Casser cela en deux parties: p> La première instruction renvoie une instance (null dans cette affaire) de ou (étant donné que et voici un exemple qui l'illustre plus clairement: p> ... et cela (j'espère) illustre pourquoi cette approche n'a pas 't résoudre le problème de l'OP. P> p> A code> et la deuxième instruction ignore cette instance et appelant
a.blah () code>. Donc, ces affirmations sont réellement équivalentes à p>
getta () code> est libre de côté), tout simplement p>
Lire gbracha.blogspot.com/2008/02/cutting-out- static.html ou apprendre c et utilisez des pointeurs de fonction.
Pas une réponse en tant que telle mais ... Scala utilise des objets Singleton à la place de méthodes statiques (ce qui n'est vraiment pas orienté très objet). Si vous utilisiez Scala, vous avez beaucoup pourrait i> faire ce genre de chose