[英]java extending Generic types ambiguous method call
我遇到了一個問題,我很難理解為什么會這樣。
我有一個泛型類B,它擴展了泛型類A,並且我有兩個接受A和B的方法。從接受A的方法中,我想用參數B調用方法,但這會導致編譯錯誤:
方法調用不明確。 Main中的方法(A)和Main中的方法(B)
這是一個代碼片段:
public class Main {
private static class A<T> {
}
private static class B<T> extends A {
}
public String method(A<String> arg) {
return method((B<String>) arg));
}
public String method(B<String> arg) {
return "some result";
}
}
但是,如果我從類型A中刪除泛型類型,則會進行編譯:
public class Main {
private static class A<T> {
}
private static class B<T> extends A {
}
public String method(A arg) {
return method((B<String>) arg));
}
public String method(B<String> arg) {
return "some result";
}
}
是什么原因呢?
編輯:此問題某種程度上與Java 8有關,因為此代碼可與JDK7一起編譯
您的B
類擴展了A
但沒有指定范圍,也沒有任何一般信息
我的意思是你的台詞
private static class B<T> extends A { ... }
相當於
private static class B<T> extends A<Object> { ... }
通過將其更改為
private static class B<T> extends A<T> { ... }
您的代碼將編譯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.