Java 与单个常规对象相比的常规对象列表

Java 与单个常规对象相比的常规对象列表,java,generics,Java,Generics,我无法找到以下问题的解决方案: 问题陈述:有一个类(GenericObject),它是一个泛型类,应该能够接受任何类型的对象 现在我想通过一个工厂类创建这个类的对象。这个工厂类应该为我提供单个对象或对象列表 现在,对于我选择的对象,我可以得到一个通用对象,但对于通用对象列表,我无法找到相同的通用对象 下面是示例代码: package com.ge.hc.lcs.axis.components.factory; import java.util.ArrayList; import java.ut

我无法找到以下问题的解决方案:

问题陈述:有一个类(GenericObject),它是一个泛型类,应该能够接受任何类型的对象

现在我想通过一个工厂类创建这个类的对象。这个工厂类应该为我提供单个对象或对象列表

现在,对于我选择的对象,我可以得到一个通用对象,但对于通用对象列表,我无法找到相同的通用对象

下面是示例代码:

package com.ge.hc.lcs.axis.components.factory;

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String args[])
    {
        GenericObject<Integer> genericObject=Factory.getSingleInstance();
        //below line does not compile
        List<GenericObject<Integer>> genericObjectList=Factory.getListOfInstance();
    }

}

class Factory{
    public static GenericObject getSingleInstance()
    {
        return new GenericObject<>();
    }

    public static List<GenericObject> getListOfInstance()
    {
        List<GenericObject> genericObjectList=new ArrayList<>();
        genericObjectList.add(new GenericObject<>());
        genericObjectList.add(new GenericObject<>());
        return genericObjectList;
    }
}

class GenericObject<T>{
    void add(T object)
    {
        System.out.println(object.getClass());
    }
}
包com.ge.hc.lcs.axis.components.factory;
导入java.util.ArrayList;
导入java.util.List;
公开课考试{
公共静态void main(字符串参数[])
{
GenericObject GenericObject=Factory.getSingleInstance();
//下面的行不编译
List genericObjectList=Factory.getListOfInstance();
}
}
阶级工厂{
公共静态GenericObject getSingleInstance()
{
返回新的GenericObject();
}
公共静态列表getListOfInstance()
{
List genericObjectList=新建ArrayList();
添加(新的GenericObject());
添加(新的GenericObject());
返回GenericObject列表;
}
}
类GenericObject{
无效添加(T对象)
{
System.out.println(object.getClass());
}
}
现在,下面的一行很好:

GenericObject<Integer> genericObject=Factory.getSingleInstance();
generiobject generiobject=Factory.getSingleInstance();
但这并不是:

//below line does not compile
        List<GenericObject<Integer>> genericObjectList=Factory.getListOfInstance();
//下一行未编译
List genericObjectList=Factory.getListOfInstance();

我怎样才能做到这一点。欢迎提出任何意见或建议。

首先:不要使用原始类型

修复代码的一种方法是在工厂的方法中引入类型参数

class Factory{
  public static <T> GenericObject<T> getSingleInstance()
  {
    return new GenericObject<T>();
  }

  public static <T> List<GenericObject<T>> getListOfInstance()
  {
    List<GenericObject<T> genericObjectList=new ArrayList<>();
    genericObjectList.add(new GenericObject<T>());
    genericObjectList.add(new GenericObject<T>());
    return genericObjectList;
  }
}
类工厂{
公共静态GenericObject getSingleInstance()
{
返回新的GenericObject();
}
公共静态列表getListOfInstance()
{

List由于您的
泛型对象
类使用泛型,因此您也必须在方法签名中定义这些泛型:

static class Factory {
    public static <T> GenericObject<T> getSingleInstance() {
        ...
    }

    public static <T> List<GenericObject<T>> getListOfInstance() {
...
静态类工厂{
公共静态GenericObject getSingleInstance(){
...
}
公共静态列表getListOfInstance(){
...
使用泛型类型

public static <T> List<GenericObject<T>> getListOfInstance()
{
    List<GenericObject<T>> genericObjectList=new ArrayList<>();
    genericObjectList.add(new GenericObject<T>());
    genericObjectList.add(new GenericObject<T>());
    return genericObjectList;
}
public静态列表getListOfInstance()
{
List genericObjectList=新建ArrayList();
添加(新的GenericObject());
添加(新的GenericObject());
返回GenericObject列表;
}

对此有何想法:GenericObject GenericObject=Factory.getSingleInstance();以及泛型对象类型整数是如何传递给这些方法的?不是,它是由编译器根据所需的返回类型推断出来的-不是我的解决方案类型,而是有效的。我宁愿将
Some.class
object作为参数传递,@antoniosss提供任何示例来说明传递Some.class是如何更好的解决方案。我正在尝试传递Some.class但由于它是通过工厂完成的,我无法找到一个合适的解决方案。对此有何想法:GenericObject GenericObject=factory.getSingleInstance();有何想法:GenericObject GenericObject=factory.getSingleInstance();原始类型有奇怪的规则,这是不使用它们的原因之一。