方法是递归调用虽然参数不同?

时间:2014-01-16 13:22:41

标签: java reflection

我有以下方法。它正在提供 StackoverflowError 。有什么原因吗?

SomeClass.java

public static <T extends BaseClass> T newObject(Class<T> classOfT, Emp data) {

        return newObject(classOfT, data);
    }

newObject方法实现

 private static <T extends BaseClass> T newObject(Class<T> classOfT, Object data) {

            //some logic and return subclass instance of BaseClass
        }

这里递归调用newObject方法。但是为什么不调用private newObject方法?

谢谢!

2 个答案:

答案 0 :(得分:1)

这称为Finding the most specific method。编译器开始从类层次结构的底部搜索适当的方法。 Emp是Object的子项,这就是为什么公共方法是最具体的方法,因为签名只在第二个参数中有所不同。

答案 1 :(得分:1)

将其更改为

public static <T extends BaseClass> T newObject(Class<T> classOfT, Emp data) {

        return newObject(classOfT, (Object)data);
    }

UppercastObject类型的第二个参数。这将适当调用适合方法签名的私有方法