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);
最佳答案
你知道你实际上返回了一个 Class
来自您的方法的实例,并将其存储在 MyPlugin
类型的引用中?所以,你实际上是在分配 Class<MyPlugin>
实例到 MyPlugin
.那是行不通的。
要解决这个问题,您必须使用 Class#newInstance()
方法返回您传递的那个类的实例。并使参数类型为Class<T>
:
public <T extends MyPlugin> T getPlugin(Class<T> plugin) {
return plugin.newInstance();
}
好吧,我只是让您知道您做错了什么。您必须处理适当的异常,并检查您传递的类是否具有 0-arg 构造函数,否则它将无法工作。
关于Java:通用类型转换,我该如何解决这个问题,这样我就不会抑制未经检查的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21041148/