作为后续行动,我前面的问题 具有功能与结合的通用范围,例如:

<T extends Foo & Bar> void doStuff(T argument) {
  //do stuff wich should only be done if arguments is both foo and bar
}

由于这是不是从一个不明物体浇注料,你需要有这实际上实现这些接口的一些对象的知识。在我看来,这需要知道特定类型的对象参数的传递给doStuff(T a)是违反得墨忒耳定律。

在功能不指定需要知道实际的类(可能有许多不同的),我真的不想知道它知道这个类增加了我的代码库的依赖关系。

使用这些界限抗图案?如果是的话应该怎么一个最好避免呢?

的情况涉及一个接口指定对象是永久的,并具有一个相关的实体的其他指定的对象。在这种情况下,doStuff(T a)功能依然存在相关实体时,它仍然存在。然而非持久实体也可以具有一个相关的实体,但不应该被doStuff(T a)功能处理

没有正确的解决方案

其他提示

我不会考虑结合的通用范围的反模式。至少我在我的代码得到了他们一些用途。例如,下面的示例代码发现使用的compareTo从可比接口集合中的最大数量的实例:

<T extends Number & Comparable<T>> T max(Collection<T> numbers)
  

在我看来,这需要知道特定类型的对象参数的传递给doStuff(T一)违反迪米特法

我不同意。我不知道如何

T<? extends Foo & Bar> void doStuff(T argument) 

需要参数的任何更多的知识来传递,然后

T<? extends Foo> void doStuff(T argument) 

或甚至更多然后只是

void doStuff(T argument) 

在所有的情况下,你需要了解一些有关的说法,我不认为第一个案例是,要求任何更多的知识,其他人,因为它有两个标识符。

的反模式是铸造。

然而,花式泛型步法可能混淆非高级程序员。这些类型和方法的使用应该比其执行要容易得多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top