【发布时间】:2014-06-03 04:05:51
【问题描述】:
假设我有 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);
}
【问题讨论】:
-
我可能只是遗漏了一些东西,但是......你已经保证
Holder1和Holder2只能在它们的定义中包含扩展Content的东西。 -
正确,但我想知道使用转换器时返回的特定类型(对于
Content的任何可能实现),而不是简单地使用接口。我希望这是有道理的:)