作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我这样定义一个抽象类:
public class Response<T> {
private List<Response<T>> subResponses;
}
和两个这样定义的子类:
public class SectionResponse extends Response<SectionResponse> {
}
public class FormResponse extends Response<FormResponse> {
}
基本上Response的所有子类都需要有同一个类的列表。现在在代码的其他地方我想要一个可以包含任一子类的 Response 对象列表。
在不使用原始类型的情况下定义此列表的最佳方法是什么?我试过了 List<? extends Response<?>>
但我不能在这样定义的 List 上调用 add 方法,因为参数是参数化类型。
最佳答案
使用 Put-Get-Rule .即返回List<? extends Response<?>>
但接受List<? super Response<?>>
作为参数。在内部,您会将列表存储为 List<Response>
请注意,我会谨慎返回 List<? extends Response<?>>
在界面上,因为它可能会侵入消费者。在大多数情况下,接口(interface)最好确定通用类型,这样您就可以返回类似 List<Response<MyType>>
的内容。如果可能的话。
关于java - 继承泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15485811/
我是一名优秀的程序员,十分优秀!