这个问题部分与我上次的
question有关.
我有一个表示泛型对象集合的泛型类:
public interface MyObject{}
public interface MyCollecion {
public foo(MyObject obj)
}
在我的设计中,这些对象集合由客户端类(我们称之为CollectionBuilder)通过抽象类方法构造:
public interface AbstractCollectionFactory {
public abstract MyCollection> createCollection(String collectionType);
}
通用集合应该以这种方式构造:
public class CollectionBuilder{
AbstractCollectionFactory f;
public void buildDoubleCollection(){
MyCollection> c = f.createCell("MyType");
}
public void buildIntegerCollection(){...}
}
好的.从这里一切都好. CollectionBuilder知道要指定的通用具体类型(在这种情况下为Double)并且可以正确构建.我可以编译它没有任何警告,所有应该工作正常.
现在我有一个与泛型和我的程序设计有关的问题.
我的应用程序中有另一个类需要使用CollectionBuilder构建的集合(让我们调用这个类UserClass).
UserClass:
>不需要知道其集合的特定具体类型(MyCollection< MyObject< Double>>或MyCollection< MyObject< Integer>>).
>对这些集合执行一些操作,调用MyCollection接口中定义的一些方法.
>我不想为它添加泛型类型.
在描述的情况下,是不是一个坏主意不参数化通用类MyCollection insed UserClass?
public UserClass{
MyCollection a; //warning
MyCollection> b; //no warning
public method(MyObject o){ //warning
a.foo(b); //compile
}
public method2(MyObject> o){
b.foo(o); //error do not compile
}
}
如果我没有指定泛型参数,Java编译器总是会发出警告.无论如何从UserClass里面我不知道具体参数(我想不知道它)甚至用“?”声明它不允许我在MyCollection上调用方法foo.
所以问题是:
>不参数化对泛型类型的引用总是一件坏事吗?
>如果1处的答案为否,这是不是这样做的正确情况?
>如果1处的答案为YES,如何在不知道其泛型类型的情况下从UserClass中使用MyCollection方法?
>我的设计不好吗?
我希望已经清楚了.我几天都在努力解决这个问题,我不知道.请帮我.