如何使用另一个泛型类创建泛型类?

时间:2011-07-14 20:53:35

标签: java generics

我对泛型或擦除类型不是很好,但我有以下几个类:

AbstractEventBuffer<BufferedEvent<T>>

BufferedEvent<T>

我正在使用这些类的具体实现,但AbstractEventBuffer采用BufferedEvent的{​​{1}}将不允许我使用T我如何使用它。

我正在努力保持这些非常通用,以便以后最小化代码复制。

为什么我不能创建我的AbstractEventBuffer类...

public abstract class AbstractEventBuffer<BufferedEvent<T>>

6 个答案:

答案 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>();
    }
}