2015-09-11 11 views

Antwort

3

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).

8

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) 
    } 
    ... 
} 
+0

Vielen Dank! Also, wäre das sinnlos zu definieren void f (Klasse arg), da es nur SomeObject.class akzeptieren würde? –

+0

Nein! SomeObject kann erweitert werden. Wenn Sie ein erweitertes Objekt haben, können Sie das mit der Methode umgehen. – Victor

+1

@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

0
  1. Ja

  2. 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)

0

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); 
Verwandte Themen