作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
由于“A”表达式,此代码无法编译。有趣的是:在 A expression expected
List<Foo>
通用类型,但得到
List<anonymous Foo>
(根据编译器)。是 jdk 错误还是功能?
interface Foo{ void doFoo(); }
public class GenericsTest {
public static<V> List<V> bar(V v){ return new ArrayList<V>();}
public static void main(String[] args) {
List<Foo> f = bar(new Foo(){ //A
public void doFoo() { }
}); //don't compiles
Foo fooImpl = new Foo(){
public void doFoo() { }
};
List<Foo> f2 = bar(fooImpl); //compiles
}
}
最佳答案
第三种选择是在方法调用中明确指定通用参数,因为我喜欢这种语法并且我认为它未被充分利用(并且可能不是那么为人所知),如下所示:
List<? extends Foo> f = <Foo>bar(new Foo(){
public void doFoo() { }
});
当你有一个调用方法的显式对象时,它看起来更好(恕我直言),例如this.<Foo>bar(...)
.
关于java - 泛型和匿名类(错误或功能?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1642874/
我是一名优秀的程序员,十分优秀!