我正在尝试为通用包装器创建一个工厂方法,但我遇到的问题是我需要传入所需的返回类型(wrapTyped()-方法),或者我必须将输入参数显式转换为所需的返回类型( wrapAuto()-方法,第一次使用)。但我很懒,不想写额外的演员表:)
有什么方法可以表达 wrapAuto() 的声明,以便案例“wantThis”(在最底部)有效?
public class GenericFactory {
static class Wrapper<T> {
T wrappdObject;
boolean flag;
String name;
public Wrapper(T wrappedObject, boolean flag, String name) {
this.wrappdObject = wrappedObject;
this.flag = flag;
this.name = name;
}
public T getObject() {
return wrappdObject;
}
// some more irrelevant methods
}
static interface InterfaceType {
}
static class ImplementationA implements InterfaceType {
}
static <U> Wrapper<U> wrapTyped(Class<U> type, U wrappedObject, boolean flag, String name) {
return new Wrapper<U>(wrappedObject, flag, name);
}
static <U> Wrapper<U> wrapAuto(U wrappedObject, boolean flag, String name) {
return new Wrapper<U>(wrappedObject, flag, "NoName");
}
// compiles, but is cumbersome
public Wrapper<InterfaceType> cumbersome = wrapTyped(InterfaceType.class, new ImplementationA(), true, "A");
// compiles, but is also cumbersome
public Wrapper<InterfaceType> alsoUgly = wrapAuto((InterfaceType) new ImplementationA(), true, "B");
// Want this, but "Type mismatch error"
public Wrapper<InterfaceType> wantThis = wrapAuto(new ImplementationA(), false, "C");
}
我把它剥离了一点,为简单起见,我只声明了一组接口和具体实现。我的实践类 Wrapper 可以用于许多完全不同的、不相关的类型。