nameof equivalent in Java

前端 未结 4 516
生来不讨喜
生来不讨喜 2020-12-16 09:35

C# 6.0 introduced the nameof() operator, that returns a string representing the name of any class / function / method / local-variable / property identifier put

相关标签:
4条回答
  • 2020-12-16 10:31

    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.

    0 讨论(0)
  • 2020-12-16 10:33

    You can't.

    You can get a Method or Field using reflection, but you'd have to hardcode the method name as a String, which eliminates the whole purpose.

    The concept of properties is not built into java like it is in C#. Getters and setters are just regular methods. You cannot even reference a method as easily as you do in your question. You could try around with reflection to get a handle to a getter method and then cut off the get to get the name of the "property" it resembles, but that's ugly and not the same.

    As for local variables, it's not possible at all.

    0 讨论(0)
  • 2020-12-16 10:35

    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));
        }
    }
    
    0 讨论(0)
  • 2020-12-16 10:37

    You can't.

    If you compile with debug symbols then the .class file will contain a table of variable names (which is how debuggers map variables back to your source code), but there's no guarantee this will be there and it's not exposed in the runtime.

    0 讨论(0)
提交回复
热议问题