被结合的通用范围的反模式?
-
11-07-2019 - |
题
作为后续行动,我前面的问题 具有功能与结合的通用范围,例如:
<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)
在所有的情况下,你需要了解一些有关的说法,我不认为第一个案例是,要求任何更多的知识,其他人,因为它有两个标识符。
的反模式是铸造。
然而,花式泛型步法可能混淆非高级程序员。这些类型和方法的使用应该比其执行要容易得多。
不隶属于 StackOverflow