Можно ли написать пользовательские атрибуты или аннотацию в классе vala, например C# или Java? - PullRequest
1 голос
/ 13 апреля 2020

, поскольку вопрос подразумевает, как можно уменьшить стандартный код или добавить пользовательские функции, как, например, в Java

@Setter(AccessLevel.PROTECTED) private String name;

или аннотации Джексона @JsonProperty, как можно реализовать или эмулировать эту функцию? спасибо

1 Ответ

0 голосов
/ 14 апреля 2020

Нет, вы не можете создавать собственные атрибуты прямо сейчас.
Для свойств вы можете использовать следующий синтаксис:

 public string name { get; protected set; default = "42"; }

Система типов GObject также поддерживает Json Сериализация / десериализация для свойств.
Вот небольшой пример (vala c file --pkg json -glib-1.0):

public enum MyEnum {
    FOO, BAR, FOOBAR
}

public class MyObject : Object {
    public string str { get; set; }
    public MyEnum en { get; set; }
    public int num { get; set; }

    public MyObject (string str, MyEnum en, int num) {
        this.str = str;
        this.num = num;
        this.en = en;
    }
}

public static int main (string[] args) {
    MyObject obj = new MyObject ("my string", MyEnum.FOOBAR, 10);
    Json.Node root = Json.gobject_serialize (obj);

    // To string: (see gobject_to_data)
    Json.Generator generator = new Json.Generator ();
    generator.set_root (root);
    string data = generator.to_data (null);

    // Output:
    // ``{"str":"my string","en":2,"num":10}``
    print (data);
    print ("\n");

    return 0;
}

Вы можете найти больше на ValaDo c.

...