Hat nur eine Instanz, die SomeObject.class
ist?Hat die Klasse <SomeObject> nur eine Instanz?
, die auf eine Funktion ist
void f(Class<SomeObject> arg)
ist es möglich, nur SomeObject.class
sonst kompilieren Zeitfehler passieren?
Hat nur eine Instanz, die SomeObject.class
ist?Hat die Klasse <SomeObject> nur eine Instanz?
, die auf eine Funktion ist
void f(Class<SomeObject> arg)
ist es möglich, nur SomeObject.class
sonst kompilieren Zeitfehler passieren?
Sie immer null
passieren kann, aber abgesehen, ja die einzig gültige Parameter SomeObject.class
sein würde, die mit dem gleichen ClassLoader
wie die Klasse geladen wird, dass enthält void f(Class<SomeObject> clazz)
.
Sie können mehrere unterschiedliche Instanzen von SomeObject.class
haben, sie müssen jedoch von verschiedenen Klassenladeprogrammen geladen werden (andernfalls sind sie keine separaten Instanzen, sondern alle beziehen sich auf dasselbe Klassenobjekt).
Ja.
Wie beschreiben am documentation:
Gibt die Laufzeitklasse dieses Objekts. Das zurückgegebene Klassenobjekt ist das Objekt, das durch statische synchronisierte Methoden der dargestellten Klasse gesperrt ist.
Aber für die Methode void f(Class<SomeObject> arg)
können Sie etwas als void f(Class<? extends SomeObject> arg)
übergeben. Schau this question.
Passing ein Class<? extends SomeObject arg
man so etwas tun können:
myMethod(Class<? extends BasicObject> clazz)
{
if (!clazz.isInstance(CodeObject))
{
(do something different)
}
...
}
Ja
vielleicht, was Sie auf diese Weise?
Klasse <? Someobject erstreckt>
diese Notation für die Klasse von SomeObject
oder überschreibt (etwas falsch mit Syntax-Highlighter, nicht akzeptieren?, Raum zwischen <? Ist nicht erforderlich)
Es tut scheint wahr dass jede Klasse nur eine entsprechende Class
Instanz hat, siehe this discussion
Ihre Methode könnte auch durch eine rohe Class
Argument aufgerufen werden :) leider.
Class clazz = AnotherClass.class;
f(clazz);
Vielen Dank! Also, wäre das sinnlos zu definieren void f (Klasse arg), da es nur SomeObject.class akzeptieren würde? –
Nein! SomeObject kann erweitert werden. Wenn Sie ein erweitertes Objekt haben, können Sie das mit der Methode umgehen. – Victor
@Alex Es mag bedeutungslos erscheinen, aber es kann in einigen speziellen Szenarien nützlich sein.Zum Beispiel, wenn Sie Klasse 'MyClass' mit 'init (Klasse clazz)' Methode hatten und dann würden Sie davon verlängern, oder etwas Ähnliches. –
kajacx