Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java泛型中字符串的长度_Java_Generics - Fatal编程技术网

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

获取java泛型中字符串的长度,java,generics,Java,Generics,我正在学习java泛型,我正在尝试编写一个非常简单的代码,它必须打印参数的类型,在我的例子中,只是为了显示目的,我只尝试字符串类型,在我打印类型的类之前,这是很好的,但是对于字符串类型,当我使用时。length获取字符串的长度时,它显示了一个错误: 找不到符号 System.out.printlnobj1.length//不起作用 既然类是java.lang.String类,为什么不能在泛型中使用.length import java.util.*; import java.lang.*; pu

我正在学习java泛型,我正在尝试编写一个非常简单的代码,它必须打印参数的类型,在我的例子中,只是为了显示目的,我只尝试字符串类型,在我打印类型的类之前,这是很好的,但是对于字符串类型,当我使用时。length获取字符串的长度时,它显示了一个错误:

找不到符号 System.out.printlnobj1.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);
   }
}

这是因为您知道它是一个字符串,但编译器和方法无法知道将接收什么作为类型参数

您可以编辑您的方法,这样,如果它正在接收字符串,它将打印其长度。 为此,必须首先将对象强制转换为字符串,以便可以使用字符串方法

 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表示此函数接受任何输入,只要两个对象的类型相同。这意味着函数只能调用所有对象通用的方法,即中定义的方法。这不包括长度。注意:不是最好的例子:字符串是最终的,它无论如何不能扩展,可以直接使用字符串。。。但对于给定的问题是的,我也要编辑那个句子。但我认为这才是他真正想要的,而不是一张支票