在java泛型中获取字符串的长度

我正在学习 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);

   }

}


繁星coding
浏览 134回答 2
2回答

白猪掌柜的

那是因为你知道它是一个String,但编译器和方法不知道将接收什么作为 Type 参数。您可以编辑您的方法,这样如果它接收到一个字符串,它将打印它的长度。为此,您必须首先将对象转换为字符串,以便您可以使用字符串方法。&nbsp;public static < E > void sumOfGenericValues(E obj1, E obj2) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(obj1.getClass());&nbsp; &nbsp; &nbsp; &nbsp; if(obj1 instanceof String) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(((String)obj1).length());&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;}

慕仙森

该方法不能确保它收到一个String. 您可以String通过将类型参数更改E为E extends String例子:public static <E extends String> void sumOfGenericValues(E obj1, E obj2) {&nbsp; &nbsp; System.out.println(obj1.length());&nbsp; &nbsp; System.out.println(obj2.length());}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java