To reference a class constant in an annotation present on the same class, the reference must be prefixed with the class name:
package example; @MyAnnotation(someAttribute = SomeClass.someConstant) public class SomeClass { public static final someConstant = "..."; }
Since this can get quite bulky when using multiple constants / string concatenations, I might simply use the following import directive in the same file to eliminate the need for these prefixes:
package example; import static example.SomeClass.*; @MyAnnotation(someAttribute = someConstant + more + constants) public class SomeClass { public static final someConstant = "..."; public static final more = "..."; public static final constants = "..."; }
Is there anything against this, or when could this lead to problems / ambiguities?
Java Language Specification Chapter 7.5.4 Static-Import-on-Demand Declarations: v8, v11, v17
Advertisement
Answer
Is there anything against this
No, it’s fine.
when could this lead to problems / ambiguities?
when you get really wild with defining symbols in the file whose names clash with the imports.
For example:
package example; import static example.SomeClass.*; class SomeClass { static int foo; void bar() { foo = 1; String foo = ""; System.out.println(foo); // Prints the local variable. } }
but you should be giving yourself a stern talking to if you’re writing code like this, so it’s not really an issue.