获取java泛型中字符串的长度
我正在学习java泛型,我正在尝试编写一个非常简单的代码,它必须打印参数的类型,在我的例子中,只是为了显示目的,我只尝试字符串类型,在我打印类型的类之前,这是很好的,但是对于字符串类型,当我使用时。length获取字符串的长度时,它显示了一个错误: 找不到符号 System.out.printlnobj1.length//不起作用 既然类是java.lang.String类,为什么不能在泛型中使用.length获取java泛型中字符串的长度,java,generics,Java,Generics,我正在学习java泛型,我正在尝试编写一个非常简单的代码,它必须打印参数的类型,在我的例子中,只是为了显示目的,我只尝试字符串类型,在我打印类型的类之前,这是很好的,但是对于字符串类型,当我使用时。length获取字符串的长度时,它显示了一个错误: 找不到符号 System.out.printlnobj1.length//不起作用 既然类是java.lang.String类,为什么不能在泛型中使用.length import java.util.*; import java.lang.*; pu
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);
}
}
这是因为您知道它是一个字符串,但编译器和方法无法知道将接收什么作为类型参数 您可以编辑您的方法,这样,如果它正在接收字符串,它将打印其长度。 为此,必须首先将对象强制转换为字符串,以便可以使用字符串方法
public static < E > void sumOfGenericValues(E obj1, E obj2) {
System.out.println(obj1.getClass());
if(obj1 instanceof String) {
System.out.println(((String)obj1).length());
}
}
该方法不能确保它正在接收字符串。 通过将类型参数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());
}
编译器怎么会知道呢?它只看到泛型类型。也可以使用整数调用该方法,这样就没有length方法。因此编译器必须采用最小公分母,即对象。void sumOfGenericValuesE obj1、E obj2表示此函数接受任何输入,只要两个对象的类型相同。这意味着函数只能调用所有对象通用的方法,即中定义的方法。这不包括长度。注意:不是最好的例子:字符串是最终的,它无论如何不能扩展,可以直接使用字符串。。。但对于给定的问题是的,我也要编辑那个句子。但我认为这才是他真正想要的,而不是一张支票