Java Language metodo getClass ()


Esempio

Il metodo getClass() può essere utilizzato per trovare il tipo di classe runtime di un oggetto. Vedi l'esempio qui sotto:

public class User {
   
    private long userID;
    private String name;

    public User(long userID, String name) {
        this.userID = userID;
        this.name = name;
    }
}

public class SpecificUser extends User {
    private String specificUserID;

    public SpecificUser(String specificUserID, long userID, String name) {
        super(userID, name);
        this.specificUserID = specificUserID;
    }
}

public static void main(String[] args){
    User user = new User(879745, "John");
    SpecificUser specificUser = new SpecificUser("1AAAA", 877777, "Jim");
    User anotherSpecificUser = new SpecificUser("1BBBB", 812345, "Jenny");

    System.out.println(user.getClass()); //Prints "class User"
    System.out.println(specificUser.getClass()); //Prints "class SpecificUser"
    System.out.println(anotherSpecificUser.getClass()); //Prints "class SpecificUser"
}

Il metodo getClass() restituirà il tipo di classe più specifico, motivo per cui quando viene chiamato getClass() su anotherSpecificUser , il valore restituito è class SpecificUser perché è inferiore nell'albero di eredità di User .


È interessante notare che, mentre il metodo getClass è dichiarato come:

public final native Class<?> getClass();

Il tipo statico effettivo restituito da una chiamata a getClass è di Class<? extends T> dove T è il tipo statico dell'oggetto su cui viene chiamato getClass .

cioè il seguente compila:

Class<? extends String> cls = "".getClass();