类声明中的泛型类型

Dai*_*run 8 java generics interface

我有

1)基本界面,

2)实现此接口的几个类,

3)和一个我想接受的泛型类,作为参数,任何实现类

我尝试过以下方法:

public class Foo extends Bar<? extends SomeInterface> {

    public Foo(List<? extends SomeInterface> someInterfaceList) {
        super(someInterfaceList);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

我收到错误No Wildcard Expected.在我的代码的其他地方,我有这样的陈述List<? extends SomeInterface>,我没有收到任何错误,为什么我在这里遇到问题?我该如何解决这个问题并仍能获得理想的结果?

我试过搜索'没有通配符预期'和'通知卡在课堂声明'无济于事.提前致谢!

cdh*_*wie 9

听起来你想声明一个你将在别处引用的泛型类型参数.通配符仅在类型仅使用一次时才有意义,并且在为类声明泛型类型参数时这没有任何意义.

试试这个:

public class Foo<T extends SomeInterface> extends Bar<T> {

    public Foo(List<T> someInterfaceList) {
        super(someInterfaceList);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

在编写代码时,类的用户无法为其指定泛型类型参数Bar<>,因为Foo它本身不是泛型类型.

此外,如果这是可能的,那么泛型参数可能与泛型参数Bar<>不同List<>- 只要在SomeInterface那里实现的两种类型都不会出现这些定义的编译时问题,但可能有以后当您错误地认为两种类型必须相同时,这是一个更令人困惑的错误消息.

因此,声明泛型类型,一旦作为一个通用的参数传递给Foo类,然后使用该类型(T在我的例子),在其他地方是指那种类型,而不是接受,可能指的不是同一类型的一些新的泛型类型参数的.