什么是减少Java冗长的好的模式/技术[封闭]

2022-09-02 03:32:55

关于Java,其中一件可能有点烦人的事是表达概念所需的代码量。我是“代码越少越好”哲学的信徒,我想知道如何编写Java而不会如此令人沮丧的冗长。最近,我阅读了Java的隐藏功能问题,并被介绍使用双大括号初始化来模拟列表或Map文本。当然,使用此方法也有缺点,但它确实允许您使用明显更少的字符执行某些操作,并且(如果格式正确)使代码更清晰,更清晰。我想知道是否没有其他聪明的技巧和鲜为人知的语言功能可以使我的代码更加简洁。

我希望看到答案,包括对该技术的解释,它所取代的更详细的方式,以及使用该技术的任何潜在缺点。


答案 1

在 Java 7 中引入菱形运算符之前,用于创建泛型类型的静态工厂方法可用于通过减少重复类型参数的需要来减少冗长。(这是因为如果没有菱形运算符,Java 永远不会在构造函数上推断类型参数,但它会在方法调用时推断。Google Collections 使用这种技术,因此您可以编写:

Set<MyClassWithALongName> set = Sets.newHashSet();

而不是:

Set<MyClassWithALongName> set = new HashSet<MyClassWithALongName>();

在 Google Collections 的 和 类中查找以“new”开头的方法,以获取更多示例。ListsSetsMaps

除非您是为旧版本的Java编写的,否则从Java 7开始,最好只使用菱形运算符。


答案 2

一个你可能已经知道的类似的,使用“varargs”功能:

String[] array = new String[] {"stack", "over", "flow"};
List<String> list = Arrays.asList(array);

可以缩写

List<String> list = Arrays.asList("stack", "over", "flow");

诚然,这不是一个巨大的节省,但它确实减少了一点点冗长。正如托马斯所指出的,这个列表将是不可变的,所以要小心。实际上,您可以修改列表,只是无法更改其长度。感谢pimlottc指出这一点。