为什么使用通配符捕获帮助程序方法?
参考:通配符捕获帮助程序方法
它说要创建一个帮助器方法来捕获通配符。
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));
}
我以为这个问题可以归结为:通配符和泛型之间有什么区别?所以,我谈到了这个:通配符和泛型之间的区别。它说要使用类型参数:
1)如果你想在不同类型的方法参数上强制实施一些关系,你不能用通配符来做到这一点,你必须使用类型参数。
但是,这不正是带有辅助函数的通配符实际上正在做的事情吗?它是否在不同类型的方法参数上强制执行关系,并设置和获取未知值?
我的问题是:如果你必须定义一些需要在不同类型的方法参数上建立关系的东西,那么为什么首先使用通配符,然后使用它的帮助器函数呢?
这似乎是一种合并通配符的黑客方式。