我想在Java中使用以下内容,并且不知道要搜索的内容:
public interface Subject<T> {
}
public interface EMailAddress extends Subject<String> {
}
public interface Validator<T extends Subject<V>> {
Set<InputErrors> validate(final V thing); // this does not compile
}
我基本上希望Validator#validate的参数类型与Subject的泛型类型相同。
我可以这样写:
public interface Validator<A,B extends Subject<A>> {
Set<InputErrors> validate(final A thing);
}
但是这需要我声明像这样的实例,这似乎是冗长的
private Validator<String,EMailAddress> validator;
答案 0 :(得分:3)
是的,您展示的解决方案,无论多么详细,都是实现这一目标的唯一方法。您必须在参数列表中列出所有泛型类型参数,包括嵌套的参数。
答案 1 :(得分:0)
您只能在通用定义
中使用此功能答案 2 :(得分:0)
无法引用嵌套类型参数。如果您需要X和Subject作为类型参数,则需要两个类型参数。
这可能是非优化设计的标志:Validator界面究竟是什么?很难看到因为你的例子不完整:它根本不使用你的B类型参数。它是关于验证A还是关于验证主题?如果两者兼而有之,那么它可能会混合两个不应该混合的问题吗?