【发布时间】:2021-06-28 06:45:57
【问题描述】:
public class Module<T> {
@SuppressWarnings("unchecked")
public <T> T module(Class<T> clazz) {
return clazz.cast(this);
}
}
这是我的模块的基类,我想通过调用上面的模块方法将它初始化为TestModule。
TestingModule testingModule = new Module().module(TestingModule.class);
但是,返回类型
新模块().module(TestingModule.class)
是 Object 而不是 TestingModule。有没有什么想法可以直接初始化它不使用任何强制转换或将方法更改为静态?
【问题讨论】:
-
您没有使用该类的泛型类型,因此要么删除它(尽管我假设您想在其他地方使用它),将方法的泛型类型更改为其他类型(例如
<U> U module(Class<U> clazz))或实际上使用类的类型:从方法中删除<T>并将您的模块创建为new Module<TestModule>。 -
TestingModule与TestModule。也许你把这些弄混了。编译器肯定不会将方法级别的T推断为TestingModule,这就是你得到Object的原因。但是,您将类级别类型变量T与方法级别变量一起隐藏这一事实非常狡猾。 -
@ernest_k 哦,对不起,我的问题是错字。已编辑。
标签: java class generics non-static