java – “伪typedef反模式”是否有理由?
发布时间:2020-12-14 05:46:27 所属栏目:Java 来源:网络整理
导读:我有一个相对复杂的通用类型(例如Map Long,Map Integer,String),它在类中内部使用. (没有外部可见性,它只是一个实现细节.)我想将它隐藏在typedef中,但 Java没有这样的功能. 昨天我重新发现了以下成语,并很失望地得知这是considered an anti-pattern . class
|
我有一个相对复杂的通用类型(例如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主要反对使用它)的时候,这样做有什么理由吗? 解决方法
真正的问题是,这个成语在你的伪typedef和你的客户端代码之间建立了很高的耦合.但是,由于您私有使用FooBarMap,所以没有真正的耦合问题(它们是实现细节).
NB 现代Java IDE应该有助于处理复杂的通用类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读
