2014-04-08 16 views
5

Chcę zdefiniować wartość w moim kodzie Scala i traktować tę wartość jako stałą (używane w adnotacji) w ramach mojego kodu Java (który wywołuje scala).Czy istnieje sposób traktowania wartości scala jako stała z java

Na przykład:

object MyValues { 
    val a = 5 
} 

Jednak gdy próbuję użyć tej wartości w adnotacji Java wyskakuje mi błąd: Java: Wartość atrybutu musi być stała

@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyJavaAnnotation { 
    int aValue() default MyValues.a(); // <-- Error 
} 

Wywołanie go w ten sposób również nie działa: MyValues$.MODULE$.a();

Próbowałem również przedłużyć val z parametrem końcowym słowo kluczowe bez powodzenia.

Czy istnieje obejście tego problemu?

Odpowiedz

1

Nie, o ile wiem. Jako obejście, można zdefiniować stałą Java, który wywołuje metodę:

@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyJavaAnnotation { 
    int aValue() default A; 
    static final int A = MyValues.a(); 
} 

myślę mogło być zdefiniowana wewnątrz tej samej adnotacji, czy nie przenieść go gdzieś.

+0

Niestety ten sam błąd występuje, jeśli jest zdefiniowany w samej adnotacji, ponieważ mogę zmienić kod scala (jest to moduł) Utworzę kod JAVA, który będzie trzymał wartości i używał go w scala oraz w mojej drugiej java moduły –

Powiązane problemy