1

私はコマンドラインツールに取り組んでおり、ユーザー入力の量を最小限に抑えようとしていますが、機能を最大限に活用しています. リソースフォルダーに一連のデフォルト入力を用意する道を歩み始めました。これにより、ユーザー入力がまったくなくてもコードを実行できます。私は不変ライブラリを使用してこれを処理しているので、次のような型があります (ミッキー マウスの例):

@Value.Immutable
public interface Type {
    String string();
    Double number();
    Boolean bool();
}

ユーザーがこれらの値のどれも、一部、またはすべてをオーバーライドできるようにしたい場合は、同じフィールドを持つ別の型を使用しますが、オプションでラップします。

@Value.Immutable
public interface OptionalType {
    Optional<String> string();
    Optional<Double> number();
    Optional<Boolean> bool();
}

2 つの型をマージする場合、オプションの型をフィールドごとにチェックし、オプションではない型を再構築するメソッドがあります。

    public Type MergeType(Type type, OptionalType optionalType) {

        ImmutableType.Builder builder = ImmutableType.builder().from(type);

        if (optionalType.string().isPresent()){
            builder.string(optionalType.string().orElseThrow());
        }

        if (optionalType.number().isPresent()){
            builder.number(optionalType.number().orElseThrow());
        }

        if (optionalType.bool().isPresent()){
            builder.bool(optionalType.bool().orElseThrow());
        }

        return builder.build();
    }

これはすべて正常に機能しますが、定型コードが多く、別の方法をとったほうがよいのではないかと考えています。10 個以上の型に 10 個以上のフィールドがあると、かなり面倒になります。リフレクションの使用を検討しましたが、それは通常、私がある種のパターンであることを意味するため、常に少しうんざりしています.

4

0 に答える 0