通用通配符类型不应在返回参数中使用

是否可以在方法的返回参数中使用通用通配符类型,这是否可行?

换句话说,确实可以像下面这样声明一个接口:

interface Foo<T> {

Collection<? extends T> next();

}

另外,可以说通用通配符类型仅在方法的 时才有意义吗?

回答:

使用通配符类型(例如在方法正式参数中)的主要好处是为用户提供了灵活性,使其可以传递任何类型的CollectionList或任何实现Collection的东西(假设collection声明为Collection<?>)。您通常会发现自己在形式参数中使用通配符类型。

但理想情况下,应避免将它们用作方法的返回类型。因此,您将强制该方法的用户在调用方使用通配符类型,即使他们不想这样做也是如此。通过使用通配符类型,您是在说,嘿!此方法可以返回的任何类型Collection,因此,您的工作就是做这件事。你不应该那样做。最好使用有界类型参数。使用有界类型参数时,将根据您传递的类型或方法调用的目标类型来推断类型。

这是来自 有效Java项目28 的引用

与其给用户提供更多的灵活性,不如说是迫使他们在客户端代码中使用通配符类型。

正确使用的通配符类型对于类的用户几乎是不可见的。它们使方法接受应接受的参数,并拒绝应拒绝的参数。

以上是 通用通配符类型不应在返回参数中使用 的全部内容, 来源链接: utcz.com/qa/413736.html

回到顶部