Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何';铸造';指向泛型对象并使用泛型参数执行方法_Java_Android_Generics - Fatal编程技术网

Java 如何';铸造';指向泛型对象并使用泛型参数执行方法

Java 如何';铸造';指向泛型对象并使用泛型参数执行方法,java,android,generics,Java,Android,Generics,我有一个类,在请求时初始化一些GUI组件: public class ComponentInitializer<T extends View> public abstract void initialize(T object); 是否有可能将代码段简化为一元语句,如下所示: for (ComponentInitializer<? extends View> initializer : this.componentInitializers) { initiali

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

public class ComponentInitializer<T extends View>

public abstract void initialize(T object);
是否有可能将代码段简化为一元语句,如下所示:

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

for(componentializer知道
T
扩展了
View
,您可以安全地将对象强制转换为
T
。然后将调用相应的方法。这应该可以工作:

private <T extends View> void initComponents(T view) {
    for (ComponentInitializer<? extends View> initializer : this.componentInitializers) {
        T object = (T) view.findViewById(initializer.getResourceId());
        if (object != null) {
            ((ComponentInitializer<T>) initializer).initialize((T) object);
        }
    }
}
private void initComponents(T视图){

对于(ComponentInitializer这样的东西怎么样:

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);
}
private void initComponents(视图){

对于(ComponentInitializer这对我来说没有什么意义。
t
是一种特定类型,它是或扩展了
视图
。你能安全地假设
t.findViewById
返回一个
t
?你在这里进行了大量未经检查的强制转换,那么你如何证明它们的合理性呢?@PaulBellora:我不能安全地假设
t.findV>iewById()
返回
T
,但即使在教程中,我也经常看到类似于
T list=(T)T.findViewById(R.id.something)
,其中的强制转换也无法保证。您是否考虑过使用反射并查询对象以获取要调用的方法?请参阅:反射可能是一种方法。