java - 如何使用方法参数的类类型?
问题描述
我有以下类: Foo1 扩展 Bar 和 Foo2 扩展 Bar
我想在我的方法中传递 Foo1 或 Foo2 的类型来创建 Foo1 或 Foo2,如下所示:
public Bar createMethod( "either type of Foo1, or Foo2" fooType) {
//returns the foo1 or foo2
}
有什么方法可以实现这一目标吗?
解决方案
通过声明,您可以使用泛型获得一些灵活性:
public <T extends Bar> T createMethod(Class<T> foo) {
// do the factoring
retrun (T) foo1 // (or foo2 depending on the foo passed);
}
有了这个,以下所有分配都是有效的:
Bar b1 = createMethod(Foo1.class);
Bar b2 = createMethod(Foo2.class);
Foo1 f1 = createMethod(Foo1.class);
Foo2 f2 = createMethod(Foo2.class);
注意ClassCastException
:在运行时,如果您没有返回预期的类型,您将得到一个。因此,如果您例如这样做:
public <T extends Bar> T createMethod(Class<T> foo) {
return (T)new Foo2();
}
和
Foo1 foo1 = createMethod(Foo1.class);
推荐阅读
- reactjs - 如何在没有 refs 和 DOM 操作的情况下应用此功能
- python - 在 VS Code 中更改 Python 文档字符串参数的颜色
- reactjs - Uncaught (in promise) TypeError: mostrarError 不是一个函数。带挂钩
- node.js - Godaddy 转发到 Heroku 会导致 SSL 问题
- android - Android字符串链接不适用于数据绑定
- python - Tiingo 客户端 API 按日期拉取超出范围的数据
- node.js - NestJs EventBus 在 EventHandler 重复事件
- python - 数据框轮廓图Python
- java - 电视提供商 Delete 不适用于 where 子句
- google-chrome-extension - 内容安全政策正在阻止 React Google Charts 如何通过它