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();
}