我有以下方法。它正在提供 StackoverflowError 。有什么原因吗?
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方法?
谢谢!
答案 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);
}
Uppercast
你Object
类型的第二个参数。这将适当调用适合方法签名的私有方法