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

Java 是否可以将对象类型信息传递给泛型方法,java,Java,我对泛型类型等概念有点陌生,但问题很简单,我想写一个方法,将两个相同类型的数组作为参数,并返回一个相同类型的数组。但是,类型可以是我定义的任何类 我尝试过使用通用java对象类,但是我无法将其转换回我的类型。是否有一种方法可以将类型信息传递给函数,以便它知道必须返回哪种类型 String[] a = {"sfsdf", "dwedwe"}; String[] b = {"anda", "vuela"}; String[] result = (String[]) addArrays(a, b);

我对泛型类型等概念有点陌生,但问题很简单,我想写一个方法,将两个相同类型的数组作为参数,并返回一个相同类型的数组。但是,类型可以是我定义的任何类

我尝试过使用通用java
对象
类,但是我无法将其转换回我的类型。是否有一种方法可以将类型信息传递给函数,以便它知道必须返回哪种类型

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
它也不起作用。。。