所以我有一类这样的重载方法:
class Foo {
public void test(Object value) {
...
}
public void test(String value) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我需要根据其类型将bean的属性值传递给其中一个方法,但在运行时之前我不知道实际的属性类型.例如
public void run(Object bean, String propertyName) {
Foo foo = new Foo();
foo.test(PropertyUtils.getProperty(bean, propertyName));
}
Run Code Online (Sandbox Code Playgroud)
BTW,PropertyUtils.getProperty()
是一个辅助方法,它返回bean上指定属性的值.PropertyUtils.getProperty()
返回一个Object,因此 test(Object value)
将始终调用它,并忽略实际的属性类型.
我可以在运行时中找出propery类型,即使它的值为null.在Java中有动态转换这样的东西吗?如果没有,是否有一种方法可以使用正确的参数类型调用重载方法?
覆盖是Java中的动态绑定.重载具有静态绑定,并且调用哪个函数是在编译时确定的,而不是在运行时确定的.看到这个问题.
因此,您不能使用重载进行运行时选择方法.建议您在java中使用其他OOP设计模式之一,或者至少instanceof
:
public void dispatch(Object o)
{
if (o instanceof String)
handleString((String)o);
else if (o instanceof File)
handleFile((File)o);
else
handleObject(o);
}
Run Code Online (Sandbox Code Playgroud)