[java] जावा - वर्तमान कक्षा का नाम प्राप्त करें?



Answers

प्रयत्न,

String className = this.getClass().getSimpleName();

यह तब तक काम करेगा जब तक आप इसे स्थिर विधि में उपयोग नहीं करते हैं।

Question

मैं बस इतना करना चाहता हूं कि वर्तमान वर्ग का नाम प्राप्त करें, और जावा मेरे वर्ग के नाम के अंत तक बेकार गैर-समझ $ 1 जोड़ता है। मैं इससे कैसे छुटकारा पा सकता हूं और केवल वास्तविक वर्ग का नाम वापस कर सकता हूं?

String className = this.getClass().getName();



आप इसका उपयोग कर सकते हैं this.getClass().getSimpleName() , जैसे:

import java.lang.reflect.Field;

public class Test {

    int x;
    int y;  

    public void getClassName() {
        String className = this.getClass().getSimpleName(); 
        System.out.println("Name:" + className);
    }

    public void getAttributes() {
        Field[] attributes = this.getClass().getDeclaredFields();   
        for(int i = 0; i < attributes.length; i++) {
            System.out.println("Declared Fields" + attributes[i]);    
        }
    }

    public static void main(String args[]) {

        Test t = new Test();
        t.getClassName();
        t.getAttributes();
    }
}



मुझे लगता है कि यह एक अज्ञात वर्ग के लिए हो रहा है। जब आप एक अज्ञात वर्ग बनाते हैं तो आप वास्तव में एक कक्षा बनाते हैं जो उस वर्ग को बढ़ाता है जिसका नाम आपको मिला है।

जो नाम आप चाहते हैं उसे प्राप्त करने के लिए "क्लीनर" तरीका है:

यदि आपकी कक्षा एक अज्ञात आंतरिक कक्षा है, तो getSuperClass() आपको वह कक्षा देनी चाहिए जिसे वह बनाया गया था। यदि आपने इसे एसओएल के प्रकार से इंटरफ़ेस से बनाया है क्योंकि आप जो कर सकते हैं वह सबसे अच्छा है getInterfaces() जो आपको एक से अधिक इंटरफ़ेस दे सकता है।

"हैकी" तरीका सिर्फ getClassName() साथ नाम प्राप्त करना है और $1 को छोड़ने के लिए रेगेक्स का उपयोग करना है।




दोनों उत्तरों का संयोजन। एक विधि नाम प्रिंट भी करता है:

Class thisClass = new Object(){}.getClass();
String className = thisClass.getEnclosingClass().getSimpleName();
String methodName = thisClass.getEnclosingMethod().getName();
Log.d("app", className + ":" + methodName);



प्रतिबिंब एपीआई

कई प्रतिबिंब एपीआई हैं जो कक्षाएं लौटाती हैं लेकिन इन्हें केवल तभी पहुंचा जा सकता है जब कक्षा पहले से ही प्रत्यक्ष या परोक्ष रूप से प्राप्त की जा चुकी हो।

Class.getSuperclass()
     Returns the super class for the given class.

        Class c = javax.swing.JButton.class.getSuperclass();
        The super class of javax.swing.JButton is javax.swing.AbstractButton.

        Class.getClasses()

विरासत सदस्यों सहित कक्षा के सदस्यों के सभी सार्वजनिक वर्ग, इंटरफेस, और enums देता है।

        Class<?>[] c = Character.class.getClasses();

चरित्र में दो सदस्य वर्ग कैरेक्टर हैं। सबसेट और
Character.UnicodeBlock।

        Class.getDeclaredClasses()
         Returns all of the classes interfaces, and enums that are explicitly declared in this class.

        Class<?>[] c = Character.class.getDeclaredClasses();
     Character contains two public member classes Character.Subset and Character.UnicodeBlock and one private class

Character.CharacterCache।

        Class.getDeclaringClass()
        java.lang.reflect.Field.getDeclaringClass()
        java.lang.reflect.Method.getDeclaringClass()
        java.lang.reflect.Constructor.getDeclaringClass()
     Returns the Class in which these members were declared. Anonymous Class Declarations will not have a declaring class but will

एक संलग्न वर्ग है।

        import java.lang.reflect.Field;

            Field f = System.class.getField("out");
            Class c = f.getDeclaringClass();
            The field out is declared in System.
            public class MyClass {
                static Object o = new Object() {
                    public void m() {} 
                };
                static Class<c> = o.getClass().getEnclosingClass();
            }

     The declaring class of the anonymous class defined by o is null.

    Class.getEnclosingClass()
     Returns the immediately enclosing class of the class.

    Class c = Thread.State.class().getEnclosingClass();
     The enclosing class of the enum Thread.State is Thread.

    public class MyClass {
        static Object o = new Object() { 
            public void m() {} 
        };
        static Class<c> = o.getClass().getEnclosingClass();
    }
     The anonymous class defined by o is enclosed by MyClass.





Links