【发布时间】:2014-04-03 06:28:44
【问题描述】:
我正在创建类似的东西,并对 java 中泛型的使用感到震惊。
想法:Producer产生T类型的东西,consumers包含命令对象,命令对象拥有不同的中介 .中介者持有 Subject 类型的对象并更新 T
类型的值注意:我这样做是为了了解泛型在泛型类型的继承以及泛型类型接口和具体类中类型参数定义的组合方面是如何工作的,所以请不要担心设计。
接口定义:
组成:
IObserver
ISubject 包含类型 T 和 IObserver 的对象。
IMediator 拥有 ISubject 类型和 T 类型的对象
ICommand 拥有 IMediator 类型和 T 类型的对象
IProducerConsumer 持有 T 和 ICommand 类型的对象。
对应的接口有一些具体的对象。 我定义了这样的接口:
public interface IObserver<T>
public interface ISubject<T,O extends IObserver<T>>
酷到现在。但现在问题开始了。
public interface IMediator<T,S extends ISubject<T,O>, O extends IObserver<T>>
编译器强迫我这样做。我的意思是O extends IObserver<T> 如上所述。所以,我推断我不能像下面这样定义
public interface IMediator<T,S extends ISubject<T,O extends IObserver<T>> >
我的结论是:不能像上面那样扩展内部类型参数定义。
所以,终于满意了
公共接口IMediator<T,S extends ISubject<T,O>, O extends IObserver<T>>
现在混乱开始在 ICommand
public interface ICommand <T,M extends IMediator<T, ?, ?>>,
我现在很震惊编译器不接受我的许多可能性,即使我做出上述推断也是如此。我是说
public interface ICommand <T,M extends IMediator<T, S, o>, S extends ISubject<T, IObserver<T>>,O extends IObserver<T>>
不工作。 我不想使用通配符,我想告诉编译器一些更具体的东西。
我的问题是:
我的推断是否与 ICommand 定义中的一样正确。
如何解读上述案例研究。
假设我想插入 T 并且必须能够获取和放置,那么最好的定义是什么。
接口和实现类中类型参数定义的规则和关系是什么。
请解释一下?
【问题讨论】:
-
public interface ICommand<T, M extends IMediator<T, S, O>, S extends ISubject<T, O>, O extends IObserver<T>>有效。但实际上:通常不需要如此大量的类型参数。由于这是非常虚构的,我现在不能告诉你如何减少类型参数。也许你可以再解释一下要求(更容易理解)? -
好的。请定义如下接口:生产者生产 T 类型的东西,消费者包含命令对象,命令对象将值更新到相应的命令对象,命令对象持有不同的中介。中介者持有 Subject 类型的对象并更新 T 类型的值
-
好的,我看到您编辑了帖子的结构(现在更具可读性)。但我仍然没有得到全貌。您能否描述一下您的每个界面的角色和意图?此外,您在小创意描述中提到了产品和消费者。但后来你讲了一个接口 IProducerConsumer。这怎么搭配?我真的很愿意帮助您理解这个(虚构的)场景,但我仍在努力满足要求。
-
好吧,忘记上面的。有 4 个 A、B、C、D 类和相应的接口。让我们考虑像 IA,IB,IC 和 ID 组合这样的接口如下 IA 持有类型 T 的对象,IB 持有类型 T 的对象并组合 A 对象及其子类型,然后 C 持有类型 T 和 B 的对象及其子类型和相同对于 D。如何将所有这些作为接口和具体类的泛型类型。避免无限制地使用通配符。感谢您的谈话时间。
-
对我来说,不知道这些课程是关于什么的,这太令人困惑了。发展关乎行为,而不仅仅是结构。抱歉,我想我帮不了你。
标签: java generics inheritance type-parameter