Java泛型工厂禁止警告

时间:2018-09-02 17:05:09

标签: java generics wildcard suppress-warnings

我有一个制造工厂的工厂。我有三种创建方法。第一个创建方法创建一个带有对象的列表。它从其他两个Create方法获取信息,第二个从T类型获取Class并将类类型传递给第三个create方法,后者创建一个新实例并返回它。

那是我的工厂

 public class Factory {

        public <T extends IPrototype<T>> List<T> create(T prototype, int n) throws Exception {
            ArrayList<T> list = new ArrayList<>();
            for(int j=0; j<n; j++) 
                list.add(create(prototype));
        return list ;
        }

        public <T extends IPrototype<T>> T create(T prototype) throws Exception {
            return (T) create(prototype.getClass());
        }

        public <T extends IPrototype<T>> T create(Class<T> type) throws Exception {
            T obj =  (T) type.newInstance();
            return obj;
        }
    }

那是我的IPrototype接口

public interface IPrototype<T extends IPrototype<T>> {

}

列表只能具有实现IPrototype的对象

public class Bar implements IPrototype<Bar>{

    public Bar() {}
}

我的问题是我在第二种创建方法中收到警告。

    public <T extends IPrototype<T>> T create(T prototype) throws Exception {
                return (T) create(prototype.getClass());
            }
/*Or method in long way */

    public <T extends IPrototype<T>> T create(T prototype) throws Exception {
        Class<T> cl = (Class<T>) prototype.getClass();
        return  (T) create(cl);
    }
  

类型安全:类型为Factory的通用方法create(Class)的未经检查的调用create(Class)

我如何处理此警告?

那是主要的

public class Main {

    public static void main(String[] args) throws Exception {
        Factory factory = new Factory();

        Foo prototype1 = new Foo();
        Bar prototype2 = new Bar();

        Foo inst = (Foo) factory.create(prototype1); // one Foo instance
        List list = factory.create(prototype2,10); // ten Bars in List
        List list2 = factory.create(prototype1, 10);


        System.out.println(list);
        System.out.println(list2);


    }
}

0 个答案:

没有答案