What is the practical difference between
It looks like both are recorded into the bytecode and both may be accessed at the run-time anyway.
both may be accessed at the run-time anyway.
That’s not what the javadoc says:
RUNTIME: Annotations are to be recorded in the class file by the compiler and retained by the VM at run time, so they may be read reflectively.
CLASS: Annotations are to be recorded in the class file by the compiler but need not be retained by the VM at run time.
In practice, I’m not aware of any use-cases for
CLASS. It would only be useful if you wanted to read the bytecode programmatically, as opposed to via the classloader API, but that’s a very specialised case, and I don’t know why you wouldn’t just use
CLASS is the default behaviour.