【发布时间】:2015-06-10 18:00:07
【问题描述】:
参考:Wildcard Capture Helper Methods
它说要创建一个辅助方法来捕获通配符。
public void foo(List<?> i) {
fooHelper(i);
}
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
仅使用下面的这个函数不会产生任何编译错误,而且似乎工作方式相同。我不明白的是:你为什么不直接使用它并避免使用助手?
public <T> void foo(List<T> l) {
l.set(0, l.get(0));
}
我认为这个问题真的可以归结为:通配符和泛型有什么区别?所以,我去了这个:difference between wildcard and generics。 它说使用类型参数:
1) 如果你想在不同类型的方法参数上强制执行某种关系,你不能用通配符来做到这一点,你必须使用类型参数。
但是,这不正是带有辅助函数的通配符实际上在做什么吗?它不是在不同类型的方法参数与其设置和获取未知值之间强制建立关系吗?
我的问题是:如果你必须定义一些需要在不同类型的方法参数上建立关系的东西,那么为什么首先使用通配符,然后使用辅助函数呢?
这似乎是一种合并通配符的 hacky 方式。
【问题讨论】:
-
不,我不是已经看过了