抛出异常然后调用构造函数?

Spe*_*rds 5 java constructor

所以我正在构建一个我将主要用于个人用途的测试库,但是我有一个问题.

使用Java,如果你的班级中有2个或更多的构造函数,如果你想从另一个构建函数,那么它必须是你做的第一件事.这对我来说是个问题,因为我有以下设置.

public Constructor(TypeA a, TypeB b, TypeC c) {
    if (c.getData() == null) throw new IllegalArgumentException("");
    this(a, b, c.getOtherData());
}

public Constructor(TypeA a, TypeB b, TypeD d) {
    // stuff happens
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做,避免"构造函数调用必须是构造函数中的第一个语句"错误?

bhs*_*cer 4

你不能用构造函数做你想做的事。相反,使用静态工厂方法,如下所示:

public static TypeThing buildMyThing(TypeA a, TypeB b, TypeC c) {
    if (c.getData() == null) throw new IllegalArgumentException("");
    return new TypeThing(a, b, c.getOtherData());
}

public Constructor(TypeA a, TypeB b, TypeD d) {
    // stuff happens
}
Run Code Online (Sandbox Code Playgroud)