Java中是否可以实现动态重载解析?

Tom*_*ker 8 java reflection

所以我有一类这样的重载方法:

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中有动态转换这样的东西吗?如果没有,是否有一种方法可以使用正确的参数类型调用重载方法?

Jas*_*n S 5

覆盖是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)