Valaには、Javaの最終的なキーワードに直接相当するものはありません。私はこのような何かあなたが来ることができるようになるだろうされている最も近いと思う:
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の建設工事のため、最終的には少し異なっています。それらは構築時にのみ設定できますが、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)));
}
}
完璧!それは**私の現在の設定よりも** **多くのように見えます。ありがとう! – terrygarcia