gpt4 book ai didi

java - 如何将 'cast' 转换为通用对象并使用通用参数执行方法

转载 作者:行者123 更新时间:2023-12-01 14:38:07 26 4
gpt4 key购买 nike

我有一个类,它在请求时初始化一些 GUI 组件:

public class ComponentInitializer<T extends View>

public abstract void initialize(T object);

现在这是初始化所有组件的代码 fragment :

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);
}
}
}

这有效;我测试过。

但是......有许多对象扩展android.view.View,我懒得为每个扩展View的对象创建一个代码块。

else if (object instanceof ObjectExtendingView) {
((ComponentInitializer<ObjectExtendingView>) initializer).initialize((ObjectExtendingView) object);
}

是否可以以某种方式将代码 fragment 减少为一元语句,就像这样:

for (ComponentInitializer<? extends View> initializer : this.componentInitializers) {
initializer.initialize(object); // Maybe with some casts
}

如果是,怎么办?如果没有,解决方法是什么?

最佳答案

像这样怎么样:

private void initComponents(View view) {
for (ComponentInitializer<? extends View> initializer : this.componentInitializers) {
helper(initializer, view);
}
}

private static <T extends View> void helper(ComponentInitializer<T> initializer, View view) {
T object = (T)view.findViewById(initializer.getResourceId());
initializer.initialize(object);
}

关于java - 如何将 'cast' 转换为通用对象并使用通用参数执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16285807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com