Massimiliano Kraus Massimiliano Kraus - 6 days ago 6
Java Question

nameof equivalent in Java

C# 6.0 introduced the

nameof()
operator, that returns a string representing the name of any class / function / method / local-variable / property identifiers put inside it.

If I have a class like this:

class MyClass
{
public SomeOtherClass MyProperty { get; set; }

public void MyMethod()
{
var aLocalVariable = 12;
}
}


I can use the operator like this:

//with class name:
var s = nameof(MyClass); // s == "MyClass"

//with properties:
var s = nameof(MyClass.OneProperty); // s == "OneProperty"

//with methods:
var s = nameof(MyClass.MyMethod); // s == "MyMethod"

//with local variables:
var s = nameof(aLocalVariable); // s == "aLocalVariable".


This is useful since the correct string is checked at compile time. If I misspell the name of some property/method/variable the compiler returns an error. Also, if I refactor, all the strings are automatically updated. See for example this documentation for real use cases.

Is there any equivalent of that operator in Java? Otherwise, how can I achieve the same result (or similar)?

Answer

Sadly, there is nothing like this. I had been looking for this functionality a while back and the answer seemed to be that generally speaking, this stuff does not exist.

See Get name of a field

You could, of course, annotate your field with a "Named" annotation to essentially accomplish this goal for your own classes. There's a large variety of frameworks that depend upon similar concepts, actually. Even so, this isn't automatic.

Comments