Valaには、Javaのfinalキーワードに直接相当するものはありません。私はあなたが来ることができるようになる最も近いものはこのようなものだと思います:
public class Rectangle : GLib.Object {
public double sideA { get; construct; }
public double sideB { get; construct; }
public double area { get; construct; }
public double diagonal { get; construct; }
public Rectangle (double SideA, double SideB) {
GLib.Object (
sideA: SideA,
sideB: SideB,
area: SideA * SideB,
diagonal: Math.sqrt(Math.pow(SideA, 2) + Math.pow(SideB, 2)));
}
}
構築プロパティは、主にGObject構築がどのように機能するかにより、finalとは少し異なります。これらは構築時にのみ設定できますが、Javaのfinal(IIRC ...私のJavaの知識のほとんどは抑制されています)とは異なり、サブクラスによる構築中に設定することもできます。たとえば、これは完全に受け入れられます。
public class Square : Rectangle {
public Square (double Side) {
GLib.Object (
sideA: Side,
sideB: Side,
area: Side * Side,
diagonal: Math.sqrt(Math.pow(Side, 2) + Math.pow(Side, 2)));
}
}
したがって、GObjectスタイルの構築を許可したい場合(他の人が呼び出すライブラリを作成している場合はそうすることをお勧めします...コードがあなただけのものである場合は必要ありません)、何かをしたいと思うかもしれませんこのように:
public class Rectangle : GLib.Object {
public double sideA { get; construct; }
public double sideB { get; construct; }
private double? _area = null;
public double area {
get {
if ( _area == null )
_area = sideA * sideB;
return _area;
}
}
private double? _diagonal = null;
public double diagonal {
get {
if ( _diagonal == null )
_diagonal = Math.sqrt(Math.pow(sideA, 2) + Math.pow(sideB, 2));
return _diagonal;
}
}
public Rectangle (double SideA, double SideB) {
GLib.Object (
sideA: SideA,
sideB: SideB,
area: SideA * SideB,
diagonal: Math.sqrt(Math.pow(SideA, 2) + Math.pow(SideB, 2)));
}
}