我有以下类结构:
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>
。
知道如何正确创建此SuperGeneric
的实例吗?
我的想法是我有两个不同的类满足extends SuperClass & SomeInterface
条件,但这些类不能用一种类型推广。
答案 0 :(得分:2)
实例化时,需要提供一个类型供编译器填写。
答案 1 :(得分:2)
如果要实例化泛型类,则需要提供具体类型。你说有两个类可以满足约束条件。说这些是Type1
和Type2
。
然后你应该能够做到:
Generic<Type1> myGeneric1 = new SuperGeneric<Type1>();
和
Generic<Type2> myGeneric2 = new SuperGeneric<Type2>();
通配符仅用于声明。它们的意思是:你可以在这里放置任何类型(满足给定的约束条件)