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

Yuv*_*dam 14 java

我昨天的回答中,我将以下代码称为"黑客":

final class MyMap extends HashMap<SomeSuperLongIdentifier, OtherSuperLongIdentifier> {}
// declared MyMap as an alias for readability purposes only

MyMap a = new MyMap();
a.put("key", "val");
Run Code Online (Sandbox Code Playgroud)

给它另一个想法,这根本不是一个坏主意,但我可能会遗漏一些东西.我错过了哪些坑洼?这是在Java中声明别名的可接受(可能是创造性的)方式吗?

Joa*_*uer 5

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

例如,你将无法使用filter()的方法Maps(通过提供谷歌集合).他们会接受一个MyMap实例作为输入,但他们只返回一个Map<SomeSuperLongIdentifier, OtherSuperLongIdentifier>.

通过将您MyMap的委托写入另一个Map实现,可以稍微减少此问题.然后你可以将这样一个方法的返回值传递给构造函数,并且仍然有MyMap(没有复制,甚至).默认构造函数可以将委托设置为新HashMap实例,因此默认用法将保持不变.