3

我有以下类结构:

public abstract class Generic<T extends SuperClass>

public class SuperGeneric<T extends SuperClass & SomeInterface> 
    extends Generic<T>

现在我想创建一个SuperGeneric涵盖所有可能类的实例。我试过这样:

Generic<? extends SuperClass & SomeInterface> myGeneric 
    = new SuperGeneric<? extends SuperClass & SomeInterface>();

现在这似乎不起作用。Generic它给出了以下错误Incorrect number of arguments for type Generic<T>; it cannot be parameterized with arguments <? extends SuperClass, SomeInterface>:.

new SuperGeneric我得到一个类似的错误:Incorrect number of arguments for type SuperGeneric<T>; it cannot be parameterized with arguments <? extends SuperClass, SomeInterface>

知道如何正确创建 this 的实例SuperGeneric吗?

这个想法是我有 2 个不同的类满足extends SuperClass & SomeInterface条件,但不能用一种类型概括。

4

2 回答 2

2

当您实例化时,您需要提供一个类型供编译器填写。

于 2012-05-23T12:20:14.750 回答
2

当你想实例化一个泛型类时,你需要提供具体类型。你说有两个类可以满足约束。说这些是Type1Type2

然后你应该能够做到:

Generic<Type1> myGeneric1 = new SuperGeneric<Type1>();

Generic<Type2> myGeneric2 = new SuperGeneric<Type2>();

通配符仅用于声明。他们的意思是:你可以在这里放任何类型(满足给定的约束)

于 2012-05-23T12:22:49.583 回答