我对泛型类型等概念有点新。但问题很简单,我想编写一个方法,它接受两个与参数相同类型的数组,并返回一个相同类型的单个数组。但是,类型可以是我定义的任何类。
我尝试使用泛型java Object
类,但后来我无法将其转换回我的类型。有没有办法将类型信息传递给函数,以便它知道它必须返回什么类型的类型?
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;
}
答案 0 :(得分:2)
最好避免混合数组和泛型。如果必须使用数组,这应该有效:
<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;
}
请注意,返回的数组类型与o1
相同。
答案 1 :(得分:0)
在这里您可以找到一些快速的实施示例:
public <T> List<T> doList(T param1, T param2) {
List<T> result = new ArrayList<>();
result.add(param1);
result.add(param2);
return result;
}
这是一个用法
List<Cat> myCatList = doList(new Cat(), new Cat());
List<Dog> dogList = doList(new Dog(), new Dog());
您可以阅读有关泛型here
的更多信息