首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以将私有类声明为别名?

是否可以将私有类声明为别名?
EN

Stack Overflow用户
提问于 2010-03-10 16:41:30
回答 10查看 396关注 0票数 14

my answer from yesterday中,我将下面这段代码称为“黑客”:

代码语言:javascript
运行
复制
final class MyMap extends HashMap<SomeSuperLongIdentifier, OtherSuperLongIdentifier> {}
// declared MyMap as an alias for readability purposes only

MyMap a = new MyMap();
a.put("key", "val");

再想一想,这看起来并不是一个坏主意,但我可能遗漏了一些东西。有没有什么我漏掉的坑?这是一种在Java中声明别名的可接受的(可能是有创意的)方式吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-03-10 17:19:25

缺点是您不能直接使用任何返回正确类型的Map的方法,因为它们永远不会返回MyMap。即使他们可以返回一个Map<SomeSuperLongIdentifier, OtherSuperLongIdentifier>

例如,您不能使用Maps (由Google Collections提供)中的filter()方法。它们将接受一个MyMap实例作为输入,但它们只返回一个Map<SomeSuperLongIdentifier, OtherSuperLongIdentifier>

通过编写委托给另一个Map实现的MyMap,可以在一定程度上减少这个问题。然后,您可以将这样的方法的返回值传递到构造函数中,并且仍然有一个MyMap (甚至不需要复制)。默认构造函数可以将委托设置为新的HashMap实例,因此默认用法将保持不变。

票数 5
EN

Stack Overflow用户

发布于 2010-03-10 16:50:29

我认为这肯定是一种声明类型同义词的方便方法。一些语言对此有直接支持(例如,在Delphi (pascal)中,您可以这样做:

代码语言:javascript
运行
复制
type MyMap =  HashMap<SomeSuperLongIdentifier, OtherSuperLongIdentifier>;

既然Java不这样做,我想你可以使用继承。您需要记录该声明只是一个同义词,没有人应该将meethods添加到这个类中。另请注意,这会消耗少量内存用于VMT存储。

票数 3
EN

Stack Overflow用户

发布于 2010-03-10 16:51:25

我反对使用MyMap这个名称:既然您创建了一个别名,那么就给它一个有用的名称来说明它的用途。除此之外,我喜欢它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2415468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档