C# 6.0 introduced the nameof()
operator, that returns a string representing the name of any class / function / method / local-variable / property identifier 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)?
C# 6.0 introduced the nameof() operator, that returns a string representing the name of any class / function / method / local-variable / property identifier put inside it. I can use the operator like this: // with class name: var s = nameof(MyClass); // s == "MyClass" // with properties: var s = nameof(MyClass.
idiom. : used to indicate the name that is used for someone or something.
It can be done using runtime byte code instrumentation, for instance using Byte Buddy library.
See this library: https://github.com/strangeway-org/nameof
The approach is described here: http://in.relation.to/2016/04/14/emulating-property-literals-with-java-8-method-references/
Usage example:
public class NameOfTest { @Test public void direct() { assertEquals("name", $$(Person.class, Person::getName)); } @Test public void properties() { assertEquals("summary", Person.$(Person::getSummary)); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With