【发布时间】:2019-01-03 21:34:27
【问题描述】:
我试图避免从方法中显式转换返回值。
如果我在编译时静态指定类,我的效果很好,但我更喜欢在运行时从枚举类型中获取类。
public enum Type {
SOME_TYPE(Clazz.class),
;
private Type(Class<?> clazz) {
this.clazz = clazz;
}
private final Class<?> clazz;
public Class<?> getClazz() {
return this.clazz;
}
}
public class Foo {
private Foo() {}
public static <T> T doSomething(Class<T> clazz, String input) {
// ...
final Object obj = someProcess(input);
return clazz.cast(obj);
}
}
public class Bar {
public void stuff() {
// does not work without explicit casting to SomeClass
// compiler error
Clazz sc = Foo.doSomething(Type.SOME_TYPE.getClazz(), someInputData);
// this does work, without an explicit cast
Clazz sc2 = Foo.doSomething(Clazz.class, someInputData);
}
}
我觉得这是不可能动态实现的,因为编译器无法确定 getClazz() 方法会返回什么类。
我怎样才能做到这一点?
【问题讨论】:
-
泛型仅在编译时存在以延长编译时类型安全。
-
对于您想要实现的目标,您似乎需要明确的演员表
-
@ControlAltDel 如果必须,我将只明确指定类(如
sc2选项),这种方式更难使用。我害怕可能是它...... -
我已更新示例以返回
Clazz类型的sc和sc2,它应该一直如此。输入我的例子太快了...
标签: java class generics casting