获取 java.lang.Object 对象的主要 class(Class 对象的 T?)
Getting the main class of a java.lang.Object object (T of a Class object?)
我想知道如何将 class 从 java.lang.Object
对象获取到特定的 class,例如 Cat
class 我可以写;不是直接转换为 Cat
,而是自动获取对象的主要 class 并转换为主要 class,因为我可能会接受 Object
参数以接受许多class 种。通过Class<T>
获取对象,获取T
(main class的类型)是否可能?
我的意思是:
class Cat {
public String meowMessage = "meow";
public void meow() {
System.out.println(meowMessage);
}
}
public class Main {
public static void main(String[] args) {
Object obj = new Cat();
// Cat c = obj.getClass()...;
// ^ how to get the Class object and automatically cast to the main class (Cat)?
}
}
您想要的是在运行时确定通用参数。这是不可能的,因为 type erasure.
如果我没理解错的话,你需要instanceof
所以你可以这样写:
if (obj instanceof Cat) {
Cat cat = (Cat) obj;
cat.meow();
} else {
//do something else
}
无法转换为编译时未知的类型,我认为这没有任何意义,因为需要转换才能从代码中静态访问 class 实例的成员.但是如果 class 未知,如何知道什么是可访问的?
我想知道如何将 class 从 java.lang.Object
对象获取到特定的 class,例如 Cat
class 我可以写;不是直接转换为 Cat
,而是自动获取对象的主要 class 并转换为主要 class,因为我可能会接受 Object
参数以接受许多class 种。通过Class<T>
获取对象,获取T
(main class的类型)是否可能?
我的意思是:
class Cat {
public String meowMessage = "meow";
public void meow() {
System.out.println(meowMessage);
}
}
public class Main {
public static void main(String[] args) {
Object obj = new Cat();
// Cat c = obj.getClass()...;
// ^ how to get the Class object and automatically cast to the main class (Cat)?
}
}
您想要的是在运行时确定通用参数。这是不可能的,因为 type erasure.
如果我没理解错的话,你需要instanceof
所以你可以这样写:
if (obj instanceof Cat) {
Cat cat = (Cat) obj;
cat.meow();
} else {
//do something else
}
无法转换为编译时未知的类型,我认为这没有任何意义,因为需要转换才能从代码中静态访问 class 实例的成员.但是如果 class 未知,如何知道什么是可访问的?