我正在學習 Java 泛型,我試圖編寫一個非常簡單的代碼,它必須打印參數的類型,在我的例子中只是為了展示目的,我只嘗試 String 類型,直到我打印了類類型,但是對于字符串類型,當我使用 .length() 來獲取我的字符串的長度時,它顯示了一個錯誤:找不到符號System.out.println(obj1.length()); //不工作既然類是類 java.lang.String,為什么我們不能在泛型中使用 .length() ?import java.util.*;import java.lang.*;public class GenericMethodTest { public static < E > void sumOfGenericValues(E obj1, E obj2) { System.out.println(obj1.getClass()); System.out.println(obj1.length()); //dosen't work } public static void main(String args[]) { String fn = "JK", ln = "Rowling"; sumOfGenericValues(fn, ln); }}
2 回答

白豬掌柜的
TA貢獻1893條經驗 獲得超10個贊
那是因為你知道它是一個String,但編譯器和方法不知道將接收什么作為 Type 參數。
您可以編輯您的方法,這樣如果它接收到一個字符串,它將打印它的長度。為此,您必須首先將對象轉換為字符串,以便您可以使用字符串方法。
public static < E > void sumOfGenericValues(E obj1, E obj2) {
System.out.println(obj1.getClass());
if(obj1 instanceof String) {
System.out.println(((String)obj1).length());
}
}

慕仙森
TA貢獻1827條經驗 獲得超8個贊
該方法不能確保它收到一個String. 您可以String通過將類型參數更改E為E extends String
例子:
public static <E extends String> void sumOfGenericValues(E obj1, E obj2) {
System.out.println(obj1.length());
System.out.println(obj2.length());
}
添加回答
舉報
0/150
提交
取消