我正在学习 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条经验 获得超7个赞
该方法不能确保它收到一个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
提交
取消