),我在类内部使用它。 (没有外部可见性;它只是一个实现细节。)我想将其隐藏在 typedef 中,但 Java 没有这样的设施。 昨天我重新发现了以下成语-6ren">
gpt4 book ai didi

java - "pseudo-typedef antipattern"是否有理由?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:14 24 4
gpt4 key购买 nike

我有一个相对复杂的泛型类型(比如 Map<Long,Map<Integer,String>> ),我在类内部使用它。 (没有外部可见性;它只是一个实现细节。)我想将其隐藏在 typedef 中,但 Java 没有这样的设施。

昨天我重新发现了以下成语,得知它是 considered an anti-pattern 时感到很失望。 .


class MyClass
{
/* "Pseudo typedef" */
private static class FooBarMap extends HashMap<Long,Map<Integer,String>> { };

FooBarMap[] maps;

public FooBarMap getMapForType(int type)
{
// Actual code might be more complicated than this
return maps[type];
}

public String getDescription(int type, long fooId, int barId)
{
FooBarMap map = getMapForType(type);
return map.get(fooId).get(barId);
}

/* rest of code */

}

当类型被隐藏并且不构成库 API 的一部分时(根据我的阅读,这是 Goetz 反对使用它的主要理由),是否有任何理由对此进行解释?

最佳答案

IMO,Java 反模式的问题在于它们鼓励黑白思维。

实际上,大多数反模式都是细微差别的。例如,链接的文章解释了伪类型定义如何导致 API 的类型签名过于严格、过于依赖特定的实现决策、病毒式传播等等。但这都是在公共(public) API 的上下文中。如果您将伪类型定义排除在公共(public) API 之外(即将它们限制在一个类或一个模块中),它们可能不会造成真正的伤害,而且它们可能使您的代码更具可读性。

我的观点是,您需要理解反模式,并您自己的合理判断何时何地避免它们。简单地采取“我永远不会做 X,因为它是一种反模式”的立场意味着有时您会排除实用上可接受的,甚至是好的解决方案。 p>

关于java - "pseudo-typedef antipattern"是否有理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1243478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com