运行时的java编译时类型
Java中是否有任何方法可以在运行时获取引用的编译时类型
例如:
private void doSomething(final Object o)
{
// do somthing
}
final Number n = 1;
doSomething(n);
final Object o = 1;
doSomething(o);
final Integer i = 1;
doSomething(i);
第一次呼叫-->;号码
第二次呼叫-->;反对
第三次呼叫-->;整数
编辑:这是问题的一个非常简化的版本。我试图做的是在框架内检测(而不是被告知)正在传递的对象的元数据。可能发生的情况是,首先使用整数调用该方法,然后使用双精度,两者都声明为数字
# 1 楼答案
可以使用“instanceof”
打印出来
另一种选择是递归检查超类
打印出来
# 2 楼答案
很简单,你不能
您已经知道函数参数(
Object
)的编译时,并且可以找到传入的对象的运行时类型(通过使用getClass()
)。然而,没有办法得到你想要的信息# 3 楼答案
使用对象。getClass()
# 4 楼答案
你不能。
Integer
是正确的答案,因为Number
是一个抽象类,你不能有一个抽象类的实例,你依赖自动装箱来转换原语int
# 5 楼答案
我看到的唯一方法就是使用重载。但您需要为继承关系的每个类指定一个覆盖方法,以排除子类