gpt4 book ai didi

java - 如何在调用另一个构造函数之前拆分字符串

转载 作者:行者123 更新时间:2023-12-01 21:59:38 29 4
gpt4 key购买 nike

我尝试像这样重用我的构造函数:

    public final long x;
public final long y;
public final int level;
private final int hash;
public final Point tileCenter;

public TileCoordinate(long x, long y, int level) {
this.x = x;
this.y = y;
this.level = level;
this.hash = Objects.hash(x, y, level);
this.tileCenter = getTileCenter();
}

public TileCoordinate(String key) {
String[] bits = key.split("-");
// this.level = Integer.parseInt(bits[0]);
// this.x = Long.parseLong(bits[1]);
// this.y = Long.parseLong(bits[2]);
this(Long.parseInt(bits[0]),Long.parseLong(bits[1]),Integer.parseLong(bits[2]));
this.hash = Objects.hash(x, y, level);
this.tileCenter = getTileCenter();
}

因为我不想写 this(Integer.parseInt(key.split("-")[0]),Long.parseLong(key.split("-")[1]), Long.parseLong(key.split("-")));,我有什么选择?

最佳答案

看起来你只做了这一行 String[] bits = key.split("-"); 以避免在延迟的构造函数调用中调用它 3 次 this(),如果存在,则必须是构造函数中的第一条语句。

不是委托(delegate)给实际字段分配的构造函数,而是委托(delegate)给处理字段分配的 private 方法。

public TileCoordinate(String key) {
String[] bits = key.split("-");
init(Long.parseInt(bits[0]),Long.parseLong(bits[1]),Integer.parseInt(bits[2]));
this.hash = Objects.hash(x, y, level);
this.tileCenter = getTileCenter();
}

private void init(long x, long y, int level) {
// assign to fields here
}

确保它是private,这样它就不会被覆盖,泄漏this会成为一个问题。

在继续之前,您可能还想验证 bits 是否包含 3 个元素。

关于java - 如何在调用另一个构造函数之前拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54136944/

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