簡體   English   中英

java擴展泛型類型歧義方法調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM