Java子类构造函数

Jav*_*ero 4 java

这是我需要扩展的外部类:

public class Binary {

    public Binary( byte type , byte[] data ){
        _type = type;
        _data = data;
    }

    public byte getType(){
        return _type;
    }

    public byte[] getData(){
        return _data;
    }

    public int length(){
        return _data.length;
    }

    final byte _type;
    final byte[] _data;
}
Run Code Online (Sandbox Code Playgroud)

这是我创建的子类:

import org.bson.types.Binary;

public class NoahId extends Binary {

 public NoahId(byte[] data) {
  //Constructor call must be the first statement in a constructor 
  super((byte) 0 , data);
 }
}
Run Code Online (Sandbox Code Playgroud)

我想强制所有子类(NoahId)具有某个长度的byte []数据,否则抛出异常.如果构造函数调用必须是子类构造函数中的第一个语句,我该如何执行此类检查?

使用静态方法创建我的类允许我进行检查,但我仍然需要定义一个显式构造函数.

Mat*_*nry 7

您可以在调用后执行检查并抛出异常super().如果在构造函数期间的任何时刻抛出异常,则该对象将被丢弃并且对调用者不可用.

如果您关注效率,可以编写一个静态方法来执行检查并抛出异常,如下所示:

super((byte) 0 , doChecks(data));
Run Code Online (Sandbox Code Playgroud)

doChecksdata如果没问题会返回不变,否则会抛出异常.