与单个通用对象相比的通用对象列表

时间:2018-08-07 15:44:16

标签: java generics

我无法解决以下问题:

问题陈述:有一个类(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());
    }
}

现在,在下面的行中可以正常使用:

GenericObject<Integer> genericObject=Factory.getSingleInstance();

但这不是:

//below line does not compile
        List<GenericObject<Integer>> genericObjectList=Factory.getListOfInstance();

如何实现这一目标。任何想法或建议都值得赞赏。

3 个答案:

答案 0 :(得分:1)

由于您的#include <stdio.h> void say_hello(void) { printf("Hello world\n"); } void (*p)(void) = say_hello; int main(void) { (*p)(); return 0; } 类使用泛型,因此您也必须在方法签名中定义这些泛型:

GenericObject

答案 1 :(得分:0)

首先:不要使用原始类型。 What is a raw type and why shouldn't we use it?

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

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;
  }
}

答案 2 :(得分:0)

使用通用类型

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;
}