2

假设我有一堂课

public static class A<T extends D> { ... }

以及D具有两个扩展它的类的类:Band C,例如

public static class D { ... }
public static class B extends D { ... }
public static class C extends D { ... }

现在,在某个地方,假设我想要一个A's 数组,无论是B-kind 还是C-kind。(例如,将类中的函数应用于D数组中的所有项目。)

然后我应该再次限制类型吗?

换句话说:这些选项中的哪一个是可以选择的?

  1. A<?>[] re;

  2. A<? extends D>[] re;

哪一个是最佳实践?

4

2 回答 2

2

由于T有 的上界DA<?>因此只是 的简写A<? extends D>。它们的含义相同 - 就像 if Twere unbounded,A<?>是 的缩写A<? extends Object>

当涉及到这种语法时,我不知道任何最佳实践。我认为这只是编码风格的问题。我更喜欢A<?>它,因为它很简洁,但会A<? extends D>立即将上限传达给不熟悉A.

于 2013-12-13T05:36:05.617 回答
1

根据我的说法,您应该使用A<? extends D>[] re; 这样用户将不允许您仅添加扩展 D 类有界通配符的对象,从而在界限内提供有限的灵活性。

任何带有有界通配符的类型只能在界内实例化,而任何在界外的实例化都会导致编译器错误。使用有界通配符的一个重要好处是,它不仅可以限制类型的数量,还可以将其作为参数传递给任何方法提供对由 bound 声明的方法的访问。例如 TreeMap( Comparator<? super K> comparator) 允许访问 Java 中 Comparator 的 compare() 方法。

于 2013-12-12T11:42:49.060 回答