我有通过类型(类)返回组件(扩展组件接口的对象)实例的方法.
返回组件的最佳或正确方法是什么?使用uncheked泛型或返回组件作为组件类型.还是有更好的方法然后这两个我发现了?实际上我想通过statement(ex.ConcreteComponent cc = this.getComponent();)中指定的返回类型获取组件;
@SuppressWarnings("unchecked")
public <T> T getComponent(final Class<? extends T> type) {
for (Component c : this.components) {
if (c.getClass().isAssignableFrom(type)) { return (T) c; }
}
return null;
}
public Component getComponent2(final Class<? extends Component> type) {
for (Component c : this.components) {
if (c.getClass().isAssignableFrom(type)) { return c; }
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
你似乎有Class.isAssignableFrom()倒退的逻辑.
如果目标是检索与给定类型分配兼容的第一个组件,那么我可能会这样写:
public <T extends Component> T getComponent(Class<T> type) {
for (Component c : this.components) {
if (type.isAssignableFrom(c.getClass())) {
return type.cast(c);
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
笔记:
type.使用通用方法已经为您提供了所需的所有灵活性,并且可以帮助您在调用函数时避免使用显式类型参数.Class.cast()是文字投射的类型安全(某种)替代品.如果使用它,您应该能够在不压制类型安全警告的情况下执行此操作.| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |