gpt4 book ai didi

Java - 在重载的构造函数调用中创建 HashMap

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:42 25 4
gpt4 key购买 nike

我有一个非常简单的问题,但到目前为止找不到任何问题。

我正在尝试创建两个类构造函数。
第一个构造函数获取 2 个 String 和一个 HashMap 并初始化类变量。

public Foo(String a, String b, HashMap<String, String> c) {
this.a = a;
this.b = b;
this.c = c;
}

第二个构造函数应该只获取 2 个字符串并创建一个“默认”-HashMap。

通常你只需调用this()使用默认值,但我找不到使用 HashMap 执行此操作的方法.

public Foo(String a, String b) {
this(a, b, new HashMap<String, String>().put("x", "y").put("f","g"));
}

Eclipse 标记错误:

Type mismatch: cannot convert from String to HashMap<String,String>

否则 this() -call 不能是函数中的第一条语句。

public Foo(String a, String b) {
HashMap<String, String> c = new HashMap<String, String>();
c.put("x", "y");
c.put("f", "g");
this(a, b, c);
}

有什么解决办法吗?

最坏的情况是我不得不复制代码,但我想知道是否有更好的方法。

最佳答案

如果这个 Map 是一个常量,您可以将它存储为一个常量并重新使用它。这避免了每次创建新的 Foo 时都重新创建 Map,但它随后会在所有 Foo 之间共享。

public class Foo {

private static final Map<String, String> DEFAULT = new HashMap<>();

static {
DEFAULT.put("x", "y");
DEFAULT.put("f","g");
}

public Foo(String a, String b) {
this(a, b, DEFAULT);
}

public Foo(String a, String b, Map<String, String> c) {
this.a = a;
this.b = b;
this.c = c;
}

}

您还可以创建一个返回正确值的静态方法。请注意,该方法需要是静态的,因为您不能在 this() 中调用实例方法。

public class Foo {

public Foo(String a, String b) {
this(a, b, getDefaultMap());
}

public Foo(String a, String b, Map<String, String> c) {
this.a = a;
this.b = b;
this.c = c;
}

private static Map<String, String> getDefaultMap() {
Map<String, String> map = new HashMap<>();
map.put("x", "y");
map.put("f", "g");
return map;
}

}

关于Java - 在重载的构造函数调用中创建 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com