我对泛型或擦除类型不是很好,但我有以下几个类:
AbstractEventBuffer<BufferedEvent<T>>
和
BufferedEvent<T>
我正在使用这些类的具体实现,但AbstractEventBuffer
采用BufferedEvent
的{{1}}将不允许我使用T
我如何使用它。
我正在努力保持这些非常通用,以便以后最小化代码复制。
为什么我不能创建我的AbstractEventBuffer
类...
public abstract class AbstractEventBuffer<BufferedEvent<T>>
答案 0 :(得分:3)
也许你会想到这样的宣言(我认为就是这样):
public abstract class AbstractEventBuffer<E extends BufferedEvent<?>>
或:
public abstract class AbstractEventBuffer<T, E extends BufferedEvent<T>>
或
public abstract class AbstractEventBuffer<E extends BufferedEvent<? extends Object>>
或类似的:
public abstract class AbstractEventBuffer<BufferedEvent> {
答案 1 :(得分:1)
我认为你听到了人群:
让课程具体化。
一旦具体具体,你可以使它成为一个generic
类,它只接受Event
(任何类型)或Event
的子类,因为它的类型是:
public class Buffer<T extends Event<?>> {
干杯!
答案 2 :(得分:0)
您无法实例化抽象类。
答案 3 :(得分:0)
我有一段时间没有做过java(转移到C#)但是如果我清楚地记得这样的事情是可能的:
public abstract class Buffer<T extends Event<I>>
当然,您首先需要扩展此抽象类缓冲区,因为您无法实例化抽象类。
答案 4 :(得分:0)
这听起来像你的问题,你可能也想尝试类似的事情:
public class EventBuffer<T> extends Buffer<Event<T>> {
答案 5 :(得分:-1)
您的问题有点令人困惑,因为代码合法并且可能正在执行您想要的操作。 事件应该保留其自身的类型参数,但如果你坚持使用它,zacheusz中的第一个带有两个类型参数的例子是正确的方法。不要过头了:))
class BufferedEvent<T>{}
abstract class AbstractEventBuffer<E extends BufferedEvent>{}
class EventBuffer<E extends BufferedEvent> extends AbstractEventBuffer
{
public static void main (String[] args)
{
EventBuffer<BufferedEvent> buffer = new EventBuffer<BufferedEvent>();
}
}