別のコンストラクタを呼び出す前に、文字列を分割する方法

wutzebaer:

私はこのように私のコンストラクタを再利用してみてください。

    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("-")));、私のオプションは何ですか?

チャールズDowbecki:

呼び出しthis()かはsuper()、コンストラクタの最初のステートメントでなければなりません。それを修正する一つの方法は、第二に、コンストラクタを変換することですファクトリメソッド

public static TileCoordinate parseTitleCoordinate(String key) {
  String[] bits = key.split("-");
  long x = Long.parseLong(bits[0]);
  long y = Long.parseLong(bits[1]);
  long level = Long.parseLong(bits[2]);
  return new TitleCoordinate(x, y, level);
}

これは、フィールドを維持することができますfinal

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=223451&siteId=1
おすすめ