Lan*_*dei 6 java generics name-clash
考虑:
public interface Foo<T> {
public static class X{}
public void foobar(T t);
}
public class Bar<X> {
Foo<X> foo = new Foo<X>() {
public void foobar(X t) {}
};
}
Run Code Online (Sandbox Code Playgroud)
我发现没有办法表达,我的意思是X从Bar<X>,而不是Foo.X在foobar(X t)执行.难道就没有其他办法比重命名泛型参数X中Bar或静态内部类?
我认为没有办法消除类型参数的歧义,我认为这是一个合理的设计决策.
X了Bar<X>.换句话说,如果你有能力说foobar(TypeParameter.X t)你可以简单地使用除了X类型参数之外的东西Bar.重命名X 是避免名称冲突的方式.不要忘记,类型参数名称不会以琐碎的方式泄露给其他类.永远不会被迫使用某种类型的参数名称.因此,语言设计者不会认为值得为语言增加复杂性是有道理的.
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |