@Data
public abstract class B {
private final String str;
}
@Data
public class A extends B{
private final String s;
}
クラスAのデータはintellijで文句を言いますが、コードはコマンドラインから正常にコンパイルできます。
1つの問題は、@Data
が変更可能なデータ用であり、クラスに変更可能なものがないことです。したがって、@Data
を使用することは単に間違っています...コンパイルするかどうかは実際には重要ではありません。
変更可能なデータが必要な場合は、final
フィールドを削除してください。不変データの場合、すべてのフィールドをfinal
にし、@Value
を使用します。場合によっては、部分的に変更可能なデータが必要ですが、混乱を招き(一部のフィールドは設定可能で、一部は設定不可)、両方の欠点を提供するため、私はそれを避けるように努めています。
もう1つの問題は、Lombokがクラス階層にアクセスできないことです。 B
に最終フィールドがある場合、コンストラクターで初期化する必要があります。つまり、A
のコンストラクターはデフォルト以外のコンストラクターを呼び出す必要があります。これはロンボクでは不可能です。ロンボクには@Superbuilder
があり、これはロンボクのクラス階層をうまく処理する唯一の機能です。