java如何“强制转换”到泛型对象并使用泛型参数执行方法
我有一个类,在请求时初始化一些GUI组件:
public class ComponentInitializer<T extends View>
public abstract void initialize(T object);
下面是初始化所有组件的代码段:
private <T extends View> void initComponents(View view) {
// ArrayList<Component<? extends View>> this.componentInitializers
for (ComponentInitializer<? extends View> initializer : this.componentInitializers) {
View object = view.findViewById(initializer.getResourceId());
if (object instanceof CheckBox) {
((ComponentInitializer<CheckBox>) initializer).initialize((CheckBox) object);
}
else if (object instanceof RadioButton) {
((ComponentInitializer<RadioButton>) initializer).initialize((RadioButton) object);
}
else if (object instanceof EditText) {
((ComponentInitializer<EditText>) initializer).initialize((EditText) object);
}
}
}
这是可行的;我测试过了
但是。。。有许多对象扩展安卓.view.View
,我懒得为每个扩展View
的对象创建代码块
else if (object instanceof ObjectExtendingView) {
((ComponentInitializer<ObjectExtendingView>) initializer).initialize((ObjectExtendingView) object);
}
是否有可能将代码段简化为一元语句,如下所示:
for (ComponentInitializer<? extends View> initializer : this.componentInitializers) {
initializer.initialize(object); // Maybe with some casts
}
如果是,如何进行?如果不是,解决办法是什么
# 1 楼答案
像这样的怎么样:
# 2 楼答案
知道
T
扩展了View
,您可以安全地将对象强制转换为T
。然后将调用相应的方法。这应该起作用: