我有一個全域變數頁面
private T page
此外,我有一個setter方法;
public <T> void setGenericVar(T page) {
this.page = page
}
我在主程式中的呼叫是這樣的;
我的呼叫是這樣的
setGenericVar("one")。
setGenericVar(1)。
我得到的錯誤是在setter方法中,它是:
我得到的錯誤是在setter方法中。
Required type: T
已提供。T
"將引數'page'型別改為'T'"
我在函式中要求一個T引數,但我也證明了這一點,所以我沒有得到這個錯誤!
EDIT:問題出現在這個代碼中。
編輯:問題出現在這段代碼中:
public class GenericVariables< T> {
private T page;
public void main (String args[] ) {
setGenericVar(2)。
}
public <T> void setGenericVar(T page){
this.page = page
}
}
uj5u.com熱心網友回復:
問題的發生是因為lealceldeiro在評論中提到的:你在類和方法上都指定了一個型別引數。它們都被命名為T,但它們是獨立的型別引數,所以它們實際上是不同的。
public class GenericVariables< T> { // Type parameter <T> on class here
private T page;
public void main (String args[] ) {
setGenericVar(2)。
}
// Type parameter <T> on method here
public <T> void setGenericVar(T page) {
this.page = page。
}
}
如果你給它們起不同的名字,就會更容易看到發生了什么:
public class GenericVariables< T> {
private T page;
public void main (String args[] ) {
setGenericVar(2)。
}
public <U> void setGenericVar(U page){
// ERROR: this.page是T型別,但引數page是U型別。
this.page = page;
}
解決方案。洗掉方法中的型別引數;讓它使用類的型別引數即可。
public class GenericVariables< T> {
private T page;
public void main (String args[] ) {
setGenericVar(2)。
}
public void setGenericVar(T page) {
this.page = page。
}
}
注意:你的main方法不是static,因此Java不會將其視為你程式的入口;你不能從這個main方法開始運行你的程式。你需要把它變成static。如果你這樣做,你就不能直接呼叫setGenericVar方法。你需要創建一個類的實體,并在其上呼叫該方法:
public class GenericVariables< T> {
private T page;
public static void main (String args[]){
GenericVariables<Integer> object = new GenericVariables<>()。
object.setGenericVar(2)。
}
public void setGenericVar(T page) {
this.page = page。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/330178.html
標籤:
上一篇:具有方差的引數化資料類
下一篇:什么是突變測驗中的耦合效應?
