【问题标题】:Java object definition shorthand or shortcuts?Java 对象定义的简写或快捷方式?
【发布时间】:2015-03-18 14:15:12
【问题描述】:

有没有一种更快的方法来实例化 Java 中的对象而无需重新键入类?例如,看看这本实例化的著作:

HashMap<Integer, ArrayList<ActivityRecord>> days = new HashMap<Integer, ArrayList<ActivityRecord>>();

我喜欢这样的速记:

HashMap<Integer, ArrayList<ActivityRecord>> days = new();

另外,我也很乐意使用 Eclipse 快捷方式自动完成实例化以使用无参数构造函数。

【问题讨论】:

  • 通常你会将变量类型声明为interface 类型,但是用一个真实的类来实例化它,例如Map&lt;Integer, List&lt;ActivityRecord&gt;&gt; = new HashMap&lt;&gt;();。所以等式的右边需要让类被实例化。
  • @pbabcdefp 确实,更新了我的评论。

标签: java eclipse guava diamond-operator


【解决方案1】:

如果您使用的是 Java 7 及更高版本,则可以使用diamond operator

HashMap<Integer, ArrayList<ActivityRecord>> days = new HashMap<>();

此外,在声明变量时,最好尽可能使用接口,而不是具体的类。所以上面真的是:

Map<Integer, List<ActivityRecord>> days = new HashMap<>();

如果您使用的是 Java 6,则可以使用 Google Guava

Map<Integer, List<ActivityRecord>> days = Maps.newHashMap();

如需进一步阅读,您可以查看Type Inference documentation 中关于泛型类的类型推断和实例化部分。

【讨论】:

  • 爱谷歌番石榴提示! (我必须把它保存在 J6 中,所以这很好用)
【解决方案2】:

您应该使用 Java 7 diamond operator,因为您通常会针对接口进行编码,而不是为引用和实例使用相同的类。

Map<Integer, ArrayList<ActivityRecord>> days = new HashMap<>();

【讨论】:

    【解决方案3】:

    如果您使用的是 Java 6(或更早版本),那么 Google Guava 会派上用场

    Map<Integer, List<ActivityRecord>> days = Maps.newHashMap();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      相关资源
      最近更新 更多