假设我有2个接口,它们定义了某种容器格式,包含特定类型的数据。
public interface Content {
}
public interface Holder1<T extends Content> {
}
public interface Holder2<T extends Content> {
}
现在我想要一些转换器来定义可以将Holder1
类型的对象转换为Holder2
的对象。
此转换器应保留有关原始对象中存储的对象类型的信息:
public interface ConverterPrototype1 {
public <U extends Content> Holder2<U> convert(Holder1<U> source);
}
但我也希望能够限制某些转换器可以使用的Holder1
类型:
interface ConverterPrototype2<U extends Content, V extends Holder1<U>> {
public Holder2<U> convert(V source);
}
有没有办法将这两个接口的语义合并为一个?像
这样的东西//INVALID CODE!
interface CombinedConvertor<V extends Holder1> {
public <U extends Content> Holder2<U> convert(V<U> source);
}
我不确定我的标题是否适合这个问题,但我找不到更好的描述......这里发布的类似问题似乎总是谈论不同的事情。
修改 在this link绊倒后,我提出了以下代码。它仍然无效,但更接近实际的java代码。
//INVALID CODE!
interface CombinedConvertor<X extends Source<?>> {
public <U extends Content, V extends X & Source<U>> Target<U> convert(V source);
}
答案 0 :(得分:0)
可以创建CombinedConvertor
接口,只要您定义另一个泛型类型参数来表示Holder1
的单个泛型类型参数,就像您已经对ConverterProptotype2
所做的那样。这将从convert
方法中删除泛型类型参数,并将其添加到接口本身。
interface CombinedConvertor<U extends Content, V extends Holder1<U>> {
public Holder2<U> convert(V source);
}
答案 1 :(得分:0)
如果我理解你的要求,从你的评论到另一个答案......你可以推断出两者。
public interface Converter
{
public <U extends Content, V extends Holder1<U>> Holder2<U> convert(V source);
}
答案 2 :(得分:0)
找到编辑中发布的代码格式后,我发现很多相关项目都在讨论这个问题。看来java语言根本不支持这种情况。我可以推荐this post来详细了解此限制的详细信息。