2012-10-03 9 views
6
class A { 
} 

class B extends A { 
} 

class TestType { 
    public static void main(String args[]) { 
     A a = new B(); 
     // I wish to use reference 'a' to check the Reference-Type which is 'A'. 
    } 
} 

Czy jest to możliwe? Jeśli nie, proszę podać przyczynę.Sprawdź nazwę klasy odniesienia zawierającą obiekt w Javie

+7

Nie możesz. Typ statyczny zmiennych lokalnych nie jest zachowywany w kodzie bajtowym ani w środowisku wykonawczym. (Jeśli jest to pole, możesz użyć refleksji na temat klasy zawierającej pole, aby uzyskać typ pola.) –

+1

@ ChrisJester-Young Zamiast tego należy udzielić odpowiedzi. – Jesper

Odpowiedz

1

Jeśli wywołasz a.getClass(), to zawsze zwróci ci instancję klasy, z której obiekt został utworzony. W twoim przypadku jest to B, więc zwróci Ci B.class.

Jeśli chcesz teraz zadzwonić pod numer a, a otrzymasz klasę jako A.class, nie będziesz mógł tego zrobić w normalny sposób.

Jednym wyjściem byłoby zdefiniować metodę w A

public static Class<A> getType() { 
     return A.class; 
    } 

a następnie można nazwać a.getType() który A.class. Używamy tutaj metody statycznej, ponieważ nie są one nadpisywane.

+0

Ale ta metoda musiałaby być dodana do każdej klasy dla spójności, więc gdy zostanie wywołana metoda getType, metoda zostanie wywołana dla klasy 'B'. – Ankur

+0

Zaktualizowano odpowiedź, aby skorzystać z metod statycznych. –

+0

Tak, rozwiązanie zadziałało. :) To było bardzo eleganckie i proste rozwiązanie. – Amber

2

Sprawdź nazwę klasy odniesienia trzyma obiektu w Javie

Nie możesz.

  1. Nie ma czegoś takiego jak 'odniesienie trzyma obiektu. Może być zero takich odniesień, lub może być ich sześćdziesiąt mililitrów.

  2. Nie można pobrać/je z wnętrza trzymanego przedmiotu.