Java – class with multiple bounded types and unchecked casts asSubclass
I have a class of type < T extends enum < T >& Ampere; Operational replacement I have a member variable class < T > the column I set by class name: T = (class < T >) class forName(name). This gave me an unchecked projection warning
Generally, using assubclass can be used in similar situations, but because t has multiple boundaries, I can't use it without getting a compiler warning:
//This is type safe,but I still get an unchecked cast warning t = (Class<T>) Class.forName(className).asSubclass(Enum.class).asSubclass(Runnable.class);@H_403_5@我可以在不使用@SupressedWarning(“未选中”)的情况下以任何方式摆脱此警告吗?
完整示例:
public class Example<T extends Enum<T> & Runnable> { Class<T> t; Example(String className) throws ClassNotFoundException { t = (Class<T>) Class.forName(className).asSubclass(Enum.class).asSubclass(Runnable.class); } }@H_403_5@Solution
//This is type safe,but I still get an unchecked cast warning//This is type safe,but I still get an unchecked cast warning t = (Class<T>) Class.forName(className).asSubclass(Enum.class).asSubclass(Runnable.class);@H_403_5@哇,放慢一秒!这是真的吗?不,这不对!你所做的就是确定匹配传入名称的类是Runnable和Enum,而不是它实际上是T.你只验证了边界.想象一下,我们有T1和T2类:
package foo; public enum T1 implements Runnable { ; @Override public void run() { } } package foo; public enum T2 implements Runnable { ; @Override public void run() { } }@H_403_5@然后这工作正常,但显然不是类型安全的:
Example<T1> example = new Example<T1>("foo.T2"); Class<T1> t1Clazz = example.t; //uh oh...@H_403_5@这也不是多重边界的问题.你只有一个绑定你有同样的问题.
正如@ sp00m所提到的,真正的解决方案可能是传递给Class< T>这里.
编辑
另一方面,如果仅在内部需要T(即指定多个边界)并且实际上不需要暴露,则另一个选择是将类保持在两个单独的引用中.例如:
Class<? extends Runnable> runnableClass; Class<? extends Enum> enumClass; Example(String className) throws ClassNotFoundException,illegalaccessexception,InstantiationException { Class<?> clazz = Class.forName(className); runnableClass = clazz.asSubclass(Runnable.class); enumClass = clazz.asSubclass(Enum.class); }@H_403_5@这是因为,如果没有类型参数,在极少数情况下您可以实际利用它的同时知道枚举和Runnable的知识.如果创建类的实例,则需要将其分配给Runnable或Enum类型的变量/字段;你不能两者兼顾.