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.Они могут быть установлены только во время создания, но в отличие от final в Java (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)));
}
}