Java 是否可以将对象类型信息传递给泛型方法
我对泛型类型等概念有点陌生,但问题很简单,我想写一个方法,将两个相同类型的数组作为参数,并返回一个相同类型的数组。但是,类型可以是我定义的任何类 我尝试过使用通用javaJava 是否可以将对象类型信息传递给泛型方法,java,Java,我对泛型类型等概念有点陌生,但问题很简单,我想写一个方法,将两个相同类型的数组作为参数,并返回一个相同类型的数组。但是,类型可以是我定义的任何类 我尝试过使用通用java对象类,但是我无法将其转换回我的类型。是否有一种方法可以将类型信息传递给函数,以便它知道必须返回哪种类型 String[] a = {"sfsdf", "dwedwe"}; String[] b = {"anda", "vuela"}; String[] result = (String[]) addArrays(a, b);
对象
类,但是我无法将其转换回我的类型。是否有一种方法可以将类型信息传递给函数,以便它知道必须返回哪种类型
String[] a = {"sfsdf", "dwedwe"};
String[] b = {"anda", "vuela"};
String[] result = (String[]) addArrays(a, b); >> error type mismatch
Object[] addArrays(Object[] o1, Object[] o2){
Object[] result = new Object[o1.length + o2.length];
for(int i=0;i<o1.length;i++){
result[i] = o1[i];
}
for(int i=o1.length;i<result.length;i++){
result[i] = o2[i-o1.length];
}
return result;
}
String[]a={“sfsdf”,“dwedwe”};
字符串[]b={“anda”,“vuela”};
字符串[]结果=(字符串[])添加数组(a,b);>>错误类型不匹配
对象[]添加数组(对象[]o1,对象[]o2){
Object[]结果=新对象[o1.length+o2.length];
对于(int i=0;i,您可以在这里找到一些快速实现示例:
public <T> List<T> doList(T param1, T param2) {
List<T> result = new ArrayList<>();
result.add(param1);
result.add(param2);
return result;
}
公共列表数据列表(T参数1,T参数2){
列表结果=新建ArrayList();
结果。添加(参数1);
结果。添加(参数2);
返回结果;
}
这里有一个用法
List<Cat> myCatList = doList(new Cat(), new Cat());
List<Dog> dogList = doList(new Dog(), new Dog());
List myCatList=doList(new Cat(),new Cat());
List dogList=doList(new Dog(),new Dog());
您可以阅读有关泛型的更多信息在这里您可以找到一些实现的快速示例:
public <T> List<T> doList(T param1, T param2) {
List<T> result = new ArrayList<>();
result.add(param1);
result.add(param2);
return result;
}
公共列表数据列表(T参数1,T参数2){
列表结果=新建ArrayList();
结果。添加(参数1);
结果。添加(参数2);
返回结果;
}
这里有一个用法
List<Cat> myCatList = doList(new Cat(), new Cat());
List<Dog> dogList = doList(new Dog(), new Dog());
List myCatList=doList(new Cat(),new Cat());
List dogList=doList(new Dog(),new Dog());
您可以阅读有关泛型的更多信息,以避免混合数组和泛型。如果您必须使用数组,这应该可以:
<T> T[] addArrays(T[] o1, T[] o2) {
T[] result = Arrays.copyOf(o1, o1.length + o2.length);
System.arraycopy(o2, 0, result, o1.length, o2.length);
return result;
}
T[]addarray(T[]o1,T[]o2){
T[]结果=数组.copyOf(o1,o1.length+o2.length);
系统阵列拷贝(o2,0,结果,o1.length,o2.length);
返回结果;
}
请注意,返回的数组类型将与o1
相同,这样可以更好地避免数组和泛型的混合。如果必须使用数组,这应该可以:
<T> T[] addArrays(T[] o1, T[] o2) {
T[] result = Arrays.copyOf(o1, o1.length + o2.length);
System.arraycopy(o2, 0, result, o1.length, o2.length);
return result;
}
T[]addarray(T[]o1,T[]o2){
T[]结果=数组.copyOf(o1,o1.length+o2.length);
系统阵列拷贝(o2,0,结果,o1.length,o2.length);
返回结果;
}
请注意,返回的数组类型将与o1
相同。这是个坏主意。数组和泛型不能很好地混合。请改用列表。此外,Object
不是泛型。它是泛型的,可以在任何地方使用,但使用Object
不会使代码使用泛型。这是个坏主意。数组和泛型不会混合使用ll.改用列表。另外,Object
不是泛型。它是泛型的,因为它可以在任何地方使用,但是使用Object
不会使代码使用泛型。我无法让代码正常工作,new cat()
应该是猫的rrayList
?即使我尝试使用araylist
或List
的String
它不起作用…我无法让代码起作用,new cat()
应该是猫的rrayList
?即使我尝试使用araylist
或List
的String
它也不起作用。。。