我有一个 Generic Class Factory 类,它有两种方法,一种使用 Class 泛型 T 值,另一种只使用它自己的方法泛型定义。
public class GenericClassFactory<T extends ClassMatchable> {
public <E, K> E newObject(ClassMatcher<E, K> matcher, K key, String packageName){...}
public <K> T newObject(K key, String packageName){...}
}
使用 T 泛型的方法可以正常工作,但是当我想使用另一种不关心 T 泛型是什么的方法时,它不会使用 Generic E 它只会返回一个 Object 然后我必须键入它.
Data data = new GenericClassFactory().newObject(new ClassMatcher<Data, String>(){...}, "key1", "my.package.name.impl");
这有编译错误,因为它希望我将其类型转换为(数据)。如果我通过 GenericClassFactory 一个有效的类 Generic 它将起作用。如果您定义了 Class Generic 但未使用它,它就像它不识别方法泛型一样。
Data data = new GenericClassFactory<ClassMatchable>().newObject(new ClassMatcher<Data, String>(){...}, "key1", "my.package.name.impl");
这很好用。但是当我的目的不需要它时,我必须定义一个这样的类泛型,这是愚蠢的。我可以这样做:
public class GenericClassFactory {
public <E, K> E newObject(ClassMatcher<E, K> matcher, K key, String packageName){...}
public <T extends ClassMatchable, K> T newObject(K key, String packageName){...}
}
但是现在我的第二种方法似乎太宽泛了……也许不是。我的意思是,如果您分配给返回类型的对象没有实现 ClassMatchable,它仍然会给出编译错误。那是我应该走的路吗?这样我就不必打字了?