是否可以将对象类型信息传递给泛型方法

时间:2018-04-23 19:46:27

标签: java

我对泛型类型等概念有点新。但问题很简单,我想编写一个方法,它接受两个与参数相同类型的数组,并返回一个相同类型的单个数组。但是,类型可以是我定义的任何类。

我尝试使用泛型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;   
}

2 个答案:

答案 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

的更多信息