Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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 如何阅读:公共<;T>;T[]阵列(T[]阵列);_Java_Arrays_Inheritance_Arraylist_Collections - Fatal编程技术网

Java 如何阅读:公共<;T>;T[]阵列(T[]阵列);

Java 如何阅读:公共<;T>;T[]阵列(T[]阵列);,java,arrays,inheritance,arraylist,collections,Java,Arrays,Inheritance,Arraylist,Collections,我读过关于泛型类型的文档,我知道如何使用它,但我在“阅读”两种方法时遇到了问题 我使用“toArray()”和“asList()”,但我不知道如何编写方法来解决类型 例1 public Iterator<E> iterator(); public Iterator<String> iterator(); 例3(这里是我不明白的地方) 为什么如果我在第一个方法中更改整数的字串,我会有错误。。。? 整数是“WhatEverIWant” 公共void测试类(字符串[]数组){

我读过关于泛型类型的文档,我知道如何使用它,但我在“阅读”两种方法时遇到了问题

我使用“toArray()”和“asList()”,但我不知道如何编写方法来解决类型

例1

public Iterator<E> iterator();
public Iterator<String> iterator();
例3(这里是我不明白的地方)

为什么如果我在第一个方法中更改整数的字串,我会有错误。。。? 整数是“WhatEverIWant”

公共void测试类(字符串[]数组){
println(“**public void testClass(String[]数组){”);
}
为什么如果我将参数字符串[]更改为整数[],它会再次工作

public <Integer> void testClass(Integer[] array){
    System.out.println("** public <Integer> void testClass(String[] array){");
}
public void测试类(整数[]数组){
println(“**public void testClass(String[]数组){”);
}
我认为是ilogical,在注释之前尊重,Ufff…

不是返回类型,它是泛型类型参数
T
的声明,它可能出现在返回类型之前

公共T[]阵列(T[]阵列)

T[]
是返回类型,这意味着
toArray
接受泛型数组并返回相同类型的泛型数组

List-toArray(String[]array)
中,
是一个泛型类型参数(
List
是返回类型),这很容易混淆,因为它隐藏了
java.lang.String
类。 它完全等同于
列表toArray(T[]数组)

编辑:

是一种方法,它接受某个引用类型的数组(它有一个名为
String
,与
java.lang.String
无关的泛型类型参数),并返回同一类型的
列表

这两种方法有不同的论点,尽管看起来它们没有

使用
字符串[]调用
testClass
argument,将调用接受
String
数组的非泛型方法,因为它的参数比泛型方法更适合要传递的数组。如果删除非泛型方法,将调用泛型方法,因为泛型方法接受任何非基元数组

如果尝试使用不同类型的数组调用该方法,可能会帮助您更好地理解:

String[] strarray = {"a","b"};
testClass(strarray); // calls the first (non generic) method
Integer[] intarray = {1,2,3,4};
testClass(intarray); // calls the second (generic) method

如果您在IDE(如idea)或其他IDE中编辑测试代码,您将看到第一个方法和第二个方法之间的“字符串”颜色不同。这意味着编译器对待第一个“字符串”而不是“java.lang.String”。它只是一个像T、E或任何其他单词的单词。我认为java可能应该让编译器检查泛型类型单词,以避免混淆h Java的关键字。

直到现在我知道“T[]toArray…”是返回类型,我知道“…toArray(T[])”是参数类型,但我不明白是什么附加信息导致了我认为剩下的“.在公共字符串中[]toArray(String[]数组)。你说这是一个泛型类型,但这里有一个泛型类型“T[]“数组”,我想已经足够了,如果您离开,该方法将运行,我想…我需要更多的解释,对不起:-(@markake如果您没有使用
声明泛型类型,编译器会假定
t
是某个类或接口的名称,如果找不到具有该名称的类或接口,则会给您一个错误。我添加了一个新示例。谢谢!我只是尝试了一下,您的代码很清楚。方法之间存在差异。我是almost理解…你说“String”不完全是java.lang.String,是一种引用类型。我认为这是关键。如果在方法中将“Object”作为泛型类型放置,我可以理解它,因为Integer是Object的子类型,但是put String。我想你说String是一种表示“something generic”的方式.我在谷歌搜索,找不到可以阅读本主题的地方…我想,我很快就能理解它了…非常感谢!!@markake当标识符字符串出现在
中时,它会变成一个泛型类型参数。它不是
java.lang.String
。因此,
公共静态列表testClass行(String[]array)
与公共静态列表测试类(WhateverYouDecideToWriteHere[]array)
相同。对!我安装了IDEA,刚刚做了一个测试,颜色不同。在eclipse中,如果在第二种情况下将F3推到单词“String”上,请转到“公共最终类字符串实现了可序列化、可比较、CharSequence{”。如果在第一种情况下按F3,则无处可去。使用像T和E这样的字符串有点混乱…我仍在搜索有关此的信息。我不完全理解”公共静态列表testClass(字符串[]数组)“。谢谢!你的评论有帮助。我认为这是逻辑上的不,不是,因为
public void testClass(String[]array)
工作正常。当你在那里出现错误时,那是因为你放置的类有问题。看起来已经有了
testClass(String[])
方法,这显然不起作用。
public <T> T[] toArray(T[] array);

[modifier]    [return type]  [what is this?]         [param type]
public       <String>        String[]        toArray(String[] array);
 <String> List<String>
import java.util.List;

public class ClassTest {

    public static void main(String[] args) {
        ClassTest.testClass(new String[]{"1","2","3"});
    }

    public static <String> List<String> testClass(String[] array){
        System.out.println("** public static <String> List<String> testClass(String[] array){");
       return null;
   }

   public static          List<String> testClass(String[] array){
       System.out.println("** public static          List<String> testClass(String[] array){");
        return null;
   }

}
** public static          List<String> testClass(String[] array){
** public static <String> List<String> testClass(String[] array){
<String>
public class Box<T>
public <U> void test()
public class Box<T> {
    private T variable;
    ....

    public <U> void test(){
        U variable = null;
        ...
public class Box<T> {
    private T variable;

    public void test(T variable){
        ...
public class TestBox<Mike> {

    public static void main(String[] args) {
        TestBox<Charles> xb = new TestBox();
    }

    public static <Peter> void get(TestBox u){
    }

}
public <String> void testClass(String[] array){
    System.out.println("** public <String> void testClass(String[] array){");
}

public           void testClass(String[] array){
    System.out.println("** public        void testClass(String[] array){");
}
public <Integer> void testClass(String[] array){
    System.out.println("** public <Integer> void testClass(String[] array){");
}
public <Integer> void testClass(Integer[] array){
    System.out.println("** public <Integer> void testClass(String[] array){");
}
public static List<String> testClass(String[] array)
public static <String> List<String> testClass(String[] array)
String[] strarray = {"a","b"};
testClass(strarray); // calls the first (non generic) method
Integer[] intarray = {1,2,3,4};
testClass(intarray); // calls the second (generic) method