我在 StackOverflow 上看到过许多标题相似的问题,但所有这些答案似乎都暗示了 getClass().getSimpleName()
方法。问题是我不想知道变量持有的值的类型,我对变量本身的类型感兴趣。在下面的代码中,我想打印 Object
,而不是 String
:
Object ob = "Some String";
System.out.println(ob.getClass().getSimpleName()); // prints "String"
假设变量的类型是它所持有的值的父类(super class)型,我可以检查该值是否是某个类的instanceof
。但是 instanceof
将为所有父类(super class)返回 true,直到我们到达层次结构中的 Object。有没有办法专门检查变量的类型?
在生产代码中可能没有任何实际用例,但了解变量类型可能会使泛型更容易实践。考虑这种方法:
public static <T> void test (T a, T b) {
}
当使用两个不同的参数调用 test
时,我们不知道编译器会推断出什么类型。打印出 T
替换的内容可能会有所帮助。我们知道 T 将被替换为两个参数的类型在程序运行时继承的最具体的类型。但如果我要打印那种类型,我就做不到。
最佳答案
您无法从一个对象转到包含它的“变量”(至少据我所知)。因此,如果您的示例中的 ob
是局部变量,您将无法获取其声明的类型。
考虑到一个对象可以被不同声明数据类型的多个变量指向,解决对象的“已声明”类型(这只是我的意见)。
只要对象存在,重要的是它的运行时、具体类型(可通过 obj.getClass()
访问)以及提供对其类型层次结构的访问的东西。
对于存储在类成员字段中的对象(假设知道字段名),可以获取声明的字段类型:
DeclaringClass.class
.getDeclaredField("fieldName")
.getType()
.getSimpleName();
关于java - 如何检查Java中变量的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50036159/