通用通配符类型不应在返回参数中使用
是否可以在方法的返回参数中使用通用通配符类型,这是否可行?
换句话说,确实可以像下面这样声明一个接口:
interface Foo<T> { Collection<? extends T> next();
}
另外,可以说通用通配符类型仅在方法的 时才有意义吗?
回答:
使用通配符类型(例如在方法正式参数中)的主要好处是为用户提供了灵活性,使其可以传递任何类型的Collection
,List
或任何实现Collection的东西(假设collection声明为Collection<?>
)。您通常会发现自己在形式参数中使用通配符类型。
但理想情况下,应避免将它们用作方法的返回类型。因此,您将强制该方法的用户在调用方使用通配符类型,即使他们不想这样做也是如此。通过使用通配符类型,您是在说,嘿!此方法可以返回的任何类型Collection
,因此,您的工作就是做这件事。你不应该那样做。最好使用有界类型参数。使用有界类型参数时,将根据您传递的类型或方法调用的目标类型来推断类型。
这是来自 有效Java项目28 的引用 :
与其给用户提供更多的灵活性,不如说是迫使他们在客户端代码中使用通配符类型。
正确使用的通配符类型对于类的用户几乎是不可见的。它们使方法接受应接受的参数,并拒绝应拒绝的参数。
以上是 通用通配符类型不应在返回参数中使用 的全部内容, 来源链接: utcz.com/qa/413736.html