Java - λάβετε το όνομα της τρέχουσας κλάσης;

Το μόνο που προσπαθώ να κάνω είναι να πάρω το τρέχον όνομα της κλάσης, και η java προσθέτει ένα άχρηστο μη-ανοησία $1 στο τέλος του ονόματος της κλάσης μου. Πώς μπορώ να το ξεφορτωθώ και να επιστρέψω μόνο το πραγματικό όνομα της κλάσης;

String className = this.getClass().getName();
Λύση

Το "$1" δεν είναι "άχρηστη ανοησία". Εάν η κλάση σας είναι ανώνυμη, προστίθεται ένας αριθμός.

Αν δεν θέλετε την ίδια την κλάση, αλλά την κλάση που τη δηλώνει, τότε μπορείτε να χρησιμοποιήσετε την getEnclosingClass(). Για παράδειγμα:

Class<?> enclosingClass = getClass().getEnclosingClass();
if (enclosingClass != null) {
  System.out.println(enclosingClass.getName());
} else {
  System.out.println(getClass().getName());
}

Μπορείτε να το μεταφέρετε αυτό σε κάποια στατική βοηθητική μέθοδο.

Σημειώστε όμως ότι αυτό δεν είναι το τρέχον όνομα της κλάσης. Η ανώνυμη κλάση είναι διαφορετική κλάση από την κλάση που την περικλείει. Η περίπτωση είναι παρόμοια για τις εσωτερικές κλάσεις.

Σχόλια (1)

Δοκιμάστε να χρησιμοποιήσετε αυτό this.getClass().getCanonicalName() ή this.getClass().getSimpleName(). Εάν πρόκειται για ανώνυμη κλάση, χρησιμοποιήστε this.getClass().getSuperclass().getName().

Σχόλια (7)

Στο παράδειγμά σας, το this πιθανώς αναφέρεται σε μια ανώνυμη περίπτωση κλάσης. Η Java δίνει ένα όνομα σε αυτές τις κλάσεις προσθέτοντας ένα $number στο όνομα της περιβάλλουσας κλάσης.

Σχόλια (1)