Java: Return-Klasse (Kein Beispiel)
Ist es möglich, zurück in eine statische Methode einer Klasse? Ich werde erklären...
Habe ich:
public class A { public static void blah(){} }
public class B { }
Ich möchte erstellen Sie eine statische Methode in der B Hexe zurück A
. So können Sie das tun:
A.blah();
Und
B.getA().blah();
Diese, ohne die Erzeugung einer Instanz der A
. Einfach nur statische Methoden.
Ist das möglich?
entweder Lesen Sie gbracha.blogspot.com/2008/02/cutting-out-static.html oder C lernen und Verwendung von Funktionszeigern.
Nicht die Antwort als solche, aber... Scala singleton-Objekte verwendet anstelle von statischen Methoden (die wirklich nicht sehr Objekt-orientiert). Wenn man sich Scala dann haben Sie sehr viel könnte tun, diese Art der Sache
Nicht die Antwort als solche, aber... Scala singleton-Objekte verwendet anstelle von statischen Methoden (die wirklich nicht sehr Objekt-orientiert). Wenn man sich Scala dann haben Sie sehr viel könnte tun, diese Art der Sache
InformationsquelleAutor Martijn Courteaux | 2009-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine Widerlegung der @irreputable Antwort:
"Funktioniert" es, aber wahrscheinlich nicht in dem Sinn, dass Sie erwarten, und schon gar nicht in sinnvoller Weise. Lassen Sie uns brechen diese nach unten in zwei Teile:
Die erste Anweisung zurückgegeben (null im vorliegenden Fall) Instanz von
A
, und die zweite Anweisung wird ignoriert, dass die Instanz und der BerufungA.blah()
. So, diese Aussagen sind eigentlich äquivalent zuoder (angesichts der Tatsache, dass
getA()
ist nebenwirkungs-frei), einfach nurUnd hier ist ein Beispiel, das veranschaulicht dies noch deutlicher:
... und diese (ich hoffe) zeigt, warum dieser Ansatz nicht lösen, die OP ' s problem.
InformationsquelleAutor Stephen C
Ich werde zu erraten, dass der Grund, warum Sie Fragen dafür ist, dass Sie wollen B zurück viele verschiedene Klassen mit unterschiedlichen Verhaltensweisen - nicht nur A.
Werden Sie wahrscheinlich wollen, um eine Schnittstelle für das, was du tust, statt.
InformationsquelleAutor cyborg
Nein das ist nicht möglich. Sie haben zwei Optionen:
B.getA()
gibt eine InstanzEin, und
blah()
eine nicht-statischeMethode.
Direkt anrufen
A.blah()
.wow. das ist überraschend..
InformationsquelleAutor zedoo
Leute sagen, es ist unmöglich, und das ist Art wahr, wenn Sie mit der reflection-API können Sie tun, etwas in der Nähe.
Hier ist, wie Sie es tun könnte.
Haben Sie eine Klasse, die dies tut.
dann zu rufen bla Sie:
So, warum würden Sie wollen, dies zu tun? Gut, wenn Sie es tun auf diese Weise können Sie ändern die Klasse A an, So getA() zurückgeben könnte, A, B, C oder D, alle mit unterschiedlichen bla () - Funktionen. Ich bin mir nicht wirklich sicher, welchem Zweck das dienen würde, aber wenn Sie es tun möchten können Sie.
finden Sie unter:
Klasse.getDeclaredMethod() und Methode.invoke() für mehr info.
Ich habe nicht versucht, diese, so müssen Sie möglicherweise einige Optimierungen.
InformationsquelleAutor Chad Okere
Nein, das ist nicht möglich. Sie kann nur eine Referenz auf eine Instanz einer Klasse. Die nächstgelegene Sie bekommen können das ist für die Rückgabe einer Referenz auf eine variable vom Typ der Klasse. Die Frage ist: warum wollen Sie das? Welches problem versuchst du zu lösen? Gibt es vielleicht eine bessere Lösung.
InformationsquelleAutor Confusion
Selbst wenn es möglich wäre, es wird nicht viel nützen. Der Aufruf
A.blah()
nicht erstellen Sie eine Instanz vonA
. Es ist eine statische Methode mit keine Notwendigkeit für eine Instanz.Und Sie nicht verwenden können, Schnittstellen zu implementieren, statische Methoden. So was soll es gut sein?
InformationsquelleAutor tangens
Wenn Sie nicht wollen, um eine Instanz von
A
haben, dann lassen SieB
nennenblah()
direkt. I. e.InformationsquelleAutor Bozho
BEARBEITEN
Es ist wahr, es entspricht
Außer Sie Aussehen ganz anders. Stellen Sie sich vor Sie haben eine Kette von diese.
Ich habe
org.apache.commons.cli.OptionBuilder
und personly würde ich es nicht tun, aber der Autor hat seinen Fall. Die API ist nur im Anfang ein Programm, in einem einzigen thread.API-Designer haben manchmal machen Sie einige Magische Bewegungen, nicht zu richten.
The static method blah() from the type A should be accessed in a static way
.org.apache.commons.cli.OptionBuilder
verwendet diese anti-pattern aufrufen von statischen Methoden, die auf Instanzen zurückgegeben.Dies ist nicht eine Lücke in Java. Es ist nur ein Beispiel, das nicht zu tun, was Sie denken, es tut. Siehe meine Antwort.
InformationsquelleAutor irreputable
Können Sie die Rückgabe einer Methode mithilfe von reflektion, die Sie aufrufen können() später.
Aber es klingt wie Sie versuchen, etwas zu tun, was getan werden sollte einen anderen Weg.
Warum sind Sie versuchen, dies zu tun?
InformationsquelleAutor Peter Lawrey