Java 实例化特定类时正确处理强制转换<;T>;
我有一个函数看起来(原则上)像这样Java 实例化特定类时正确处理强制转换<;T>;,java,generics,Java,Generics,我有一个函数看起来(原则上)像这样 public <T extends Listener> T createListener(Class<T> clazz) { if (clazz == SpecificListener.class) { return (T) new SpecificListener(); } // more instantiations here } public T createListener(类clazz){ if(claz
public <T extends Listener> T createListener(Class<T> clazz) {
if (clazz == SpecificListener.class) {
return (T) new SpecificListener();
}
// more instantiations here
}
public T createListener(类clazz){
if(clazz==SpecificListener.class){
返回(T)新的SpecificListener();
}
//这里有更多的实例
}
SpecificListener是接口侦听器的一个实现。这段代码可以工作,但是return语句执行到T的未经检查的转换
有没有更好的方法在不进行未检查的转换的情况下编写此文件?检查的转换将是
clazz.cast(new SpecificListener())
检查的转换将是clazz.cast(new SpecificListener())
是的,您可以使用此方法
public T createListener(类clazz){
if(clazz==SpecificListener.class){
返回clazz.cast(新SpecificListener());
}
}
是的,您可以使用该方法
public T createListener(类clazz){
if(clazz==SpecificListener.class){
返回clazz.cast(新SpecificListener());
}
}
如果您可以实例化的所有侦听器都提供了空构造函数,您只需尝试:
public T createListener(类clazz)
抛出实例化异常,IllegalAccessException{
返回clazz.newInstance();
}
如果您可以实例化的所有侦听器都提供了空构造函数,您只需尝试:
public T createListener(类clazz)
抛出实例化异常,IllegalAccessException{
返回clazz.newInstance();
}
public <T extends Listener> T createListener(Class<T> clazz) {
if (clazz == SpecificListener.class) {
return clazz.cast(new SpecificListener());
}
}
public <T extends Listener> T createListener(Class<T> clazz)
throws InstantiationException, IllegalAccessException {
return clazz.newInstance();
}