private static transient JavaPlugin myPlugin = null;
public SomeClass(JavaPlugin plugin) {
if (myPlugin == null) myPlugin = plugin;
}
public <T> T getPlugin(Class<? extends JavaPlugin> plugin) {
return (T)myPlugin; // return casted version of "myPlugin" form above
}
在下面的行中调用它可以正常工作,并且尝试使用不扩展JavaPlugin的类将引发编译时错误。但是我怎样才能使上述功能工作而不需要@SuppressWarnings("unchecked")
??
MyPlugin nc = this.getPlugin(my.main.package.MyPlugin.class);
答案 0 :(得分:6)
您知道实际上是从方法返回Class
实例,并将其存储在MyPlugin
类型的引用中?因此,您实际上是将Class<MyPlugin>
实例分配给MyPlugin
。那是行不通的。
要解决此问题,您必须使用Class#newInstance()
方法返回您传递的该类的实例。并创建参数类型Class<T>
:
public <T extends MyPlugin> T getPlugin(Class<T> plugin) {
return plugin.newInstance();
}
好吧,我刚刚给你一个关于你做错了什么的想法。您必须处理适当的异常,并检查您传递的类是否具有0-arg构造函数,否则它将无效。