Java 如何阅读:公共<;T>;T[]阵列(T[]阵列);
我读过关于泛型类型的文档,我知道如何使用它,但我在“阅读”两种方法时遇到了问题 我使用“toArray()”和“asList()”,但我不知道如何编写方法来解决类型 例1Java 如何阅读:公共<;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测试类(字符串[]数组){
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