相关疑难解决方法(0)

如何初始化静态地图?

你会如何Map在Java中初始化静态?

方法一:静态初始化
方法二:实例初始化(匿名子类)还是其他一些方法?

各自的优点和缺点是什么?

这是一个说明两种方法的示例:

import java.util.HashMap;
import java.util.Map;

public class Test {
    private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
    static {
        myMap.put(1, "one");
        myMap.put(2, "two");
    }

    private static final Map<Integer, String> myMap2 = new HashMap<Integer, String>(){
        {
            put(1, "one");
            put(2, "two");
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

java collections dictionary initialization idiomatic

1084
推荐指数
20
解决办法
82万
查看次数

Java"双支撑初始化"的效率?

Java隐藏功能中,最佳答案提到了Double Brace Initialization,它具有非常诱人的语法:

Set<String> flavors = new HashSet<String>() {{
    add("vanilla");
    add("strawberry");
    add("chocolate");
    add("butter pecan");
}};
Run Code Online (Sandbox Code Playgroud)

这个成语创建了一个匿名内部类,其中只包含一个实例初始化程序,"可以使用包含作用域中的任何[...]方法".

主要问题:这听起来效率低吗?它的使用是否应限于一次性初始化?(当然炫耀!)

第二个问题:新的HashSet必须是实例初始化程序中使用的"this"...任何人都可以了解机制吗?

第三个问题:在生产代码中使用这个成语是否过于模糊

简介:非常非常好的答案,谢谢大家.在问题(3)中,人们认为语法应该是清楚的(尽管我建议偶尔发表评论,特别是如果你的代码会传递给可能不熟悉它的开发人员).

在问题(1)上,生成的代码应该快速运行.额外的.class文件会导致jar文件混乱,并且会稍微减慢程序启动速度(感谢@coobird测量它).@Thilo指出垃圾收集可能会受到影响,在某些情况下,额外加载类的内存成本可能是一个因素.

问题(2)对我来说最有趣.如果我理解答案,那么DBI中发生的事情是匿名内部类扩展了由new运算符构造的对象的类,因此具有引用正在构造的实例的"this"值.井井有条.

总的来说,DBI让我感到非常好奇.Coobird和其他人指出,您可以使用Arrays.asList,varargs方法,Google Collections和提议的Java 7 Collection文字获得相同的效果.Scala,JRuby和Groovy等较新的JVM语言也为列表构建提供了简明的符号,并且与Java良好地互操作.鉴于DBI使类路径混乱,减慢了类加载速度,并使代码更加模糊,我可能会回避它.但是,我打算在一位刚刚获得SCJP的朋友身上发表这篇文章,并且喜欢关于Java语义的好朋友!;-) 感谢大家!

7/2017:Baeldung 对双支撑初始化有很好的总结,并认为它是一种反模式.

12/2017:@Basil Bourque指出,在新的Java 9中你可以说:

Set<String> flavors = Set.of("vanilla", "strawberry", "chocolate", "butter pecan");
Run Code Online (Sandbox Code Playgroud)

这肯定是要走的路.如果您遇到早期版本,请查看Google Collections的ImmutableSet.

java collections performance initialization

786
推荐指数
10
解决办法
12万
查看次数

ArrayList初始化等效于数组初始化

我知道您可以在实例化期间初始化数组,如下所示:

String[] names = new String[] {"Ryan", "Julie", "Bob"};
Run Code Online (Sandbox Code Playgroud)

有没有办法用ArrayList做同样的事情?或者我必须单独添加内容array.add()吗?

java arrays initialization arraylist

258
推荐指数
7
解决办法
20万
查看次数

HashMap的构建器

Guava为Java类型提供了很好的工厂方法,例如Maps.newHashMap().

但是还有java Maps的构建者吗?

HashMap<String,Integer> m = Maps.BuildHashMap.
    put("a",1).
    put("b",2).
    build();
Run Code Online (Sandbox Code Playgroud)

java collections guava

104
推荐指数
7
解决办法
9万
查看次数

什么是初始化块?

我们可以将代码放在构造函数或方法或初始化块中.初始化块有什么用?每个java程序都必须拥有它吗?

java constructor initialization initialization-block

93
推荐指数
3
解决办法
6万
查看次数

Java中的命名参数习语

如何在Java中实现命名参数习语?(特别是对于构造函数)

我正在寻找类似Objective-C的语法,而不是像JavaBeans中使用的语法.

一个小代码示例就可以了.

谢谢.

java idioms

71
推荐指数
10
解决办法
5万
查看次数

Java中是否提供C#样式对象初始值设定项

像这个?http://weblogs.asp.net/dwahlin/archive/2007/09/09/c-3-0-features-object-initializers.aspx

Person p = new Person()
{
    FirstName = "John",
    LastName = "Doe",
    Address = new Address()
    {
        Street = "1234 St.",
        City = "Phoenix"
    }
};
Run Code Online (Sandbox Code Playgroud)

java

46
推荐指数
4
解决办法
2万
查看次数

new Class(...){{...}}初始化习语的含义

{{ ... }}块在以下代码中的含义是什么?

class X {

    private Y var1;

    private X() {
        Z context = new Z(new SystemThreadPool()) {{
            var1 = new Y();
        }};
    }

}
Run Code Online (Sandbox Code Playgroud)

java initialization double-brace-initialize

44
推荐指数
2
解决办法
8819
查看次数

为什么选择java Instance初始化器?

Java中的"Instance Initializers"有什么意义?
我们不能只将那段代码放在构造函数的开头吗?

java

29
推荐指数
4
解决办法
9672
查看次数

直接在java中初始化对象

是否可以直接初始化对象,就像我们在java中使用String类一样:

如:

String str="something...";
Run Code Online (Sandbox Code Playgroud)

我想为我的自定义类做同样的事情:

class MyData{
public String name;
public int age;
}
Run Code Online (Sandbox Code Playgroud)

是可能的

MyClass obj1={"name",24};
Run Code Online (Sandbox Code Playgroud)

要么

MyClass obj1="name",24;
Run Code Online (Sandbox Code Playgroud)

初始化对象?或者它是如何可能的!

java initialization object

27
推荐指数
3
解决办法
5万
查看次数