Eclipse的Java编译器只是程序所在的同一个核心的包装器javac,还是一个单独的编译器?如果是后者,为什么他们会重新发明轮子?
给定一个通用接口
interface Foo<A, B> { }
Run Code Online (Sandbox Code Playgroud)
我想编写一个实现,要求A成为B的子类.所以我想这样做
class Bar<A, B super A> implements Foo<A, B> { }
// --> Syntax error
Run Code Online (Sandbox Code Playgroud)
要么
class Bar<A extends B, B> implements Foo<A, B> { }
// --> illegal forward reference
Run Code Online (Sandbox Code Playgroud)
但似乎有效的唯一解决方案是:
class Bar<B, A extends B> implements Foo<A, B> { }
Run Code Online (Sandbox Code Playgroud)
这有点难看,因为它颠倒了通用参数的顺序.
这个问题有什么解决方案或解决方法吗?
Java泛型是否有办法告诉编译器类型T必须是类型U?例如
public class Whatever<T, U> {
T specific;
U moreGeneral;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想确保T是其子类U.有没有办法指定这个?