Lebih
Jawa - dapatkan saat ini nama kelas?
Semua saya coba lakukan adalah untuk mendapatkan saat ini nama kelas, dan jawa yang menambahkan tidak berguna non-sense $1 untuk akhir kelas saya nama. Bagaimana saya bisa menyingkirkan itu dan hanya kembali sebenarnya nama kelas?
String className = this.getClass().getName();
258
10
"$1" tidak "berguna non-sense". Jika kelas anda adalah anonim, sejumlah ditambahkan.
Jika anda don't ingin kelas itu sendiri, tetapi menyatakan kelas, maka anda dapat menggunakan
getEnclosingClass()
. Misalnya:Anda dapat memindahkan bahwa dalam beberapa statis utilitas metode.
Tetapi perhatikan bahwa ini bukan saat ini nama kelas. Anonymous class adalah kelas yang berbeda dari kelas yang melingkupi. Kasus ini mirip dalam kelas.
Cobalah,
Ini akan bekerja selama anda don't menggunakan metode statis.
Mencoba menggunakan ini
ini.getClass().getCanonicalName()
atauini.getClass().getSimpleName()
. Jika itu's anonim kelas, menggunakanini.getClass().getSuperclass().getName()
Anda dapat menggunakan
ini.getClass().getSimpleName()
, seperti:Kombinasi dari kedua jawaban. Juga cetakan nama metode:
jawaban ini terlambat, tapi saya pikir ada cara lain untuk melakukan hal ini dalam konteks anonim handler kelas.
let's mengatakan:
itu akan mencapai hasil yang sama. selain itu,'s benar-benar cukup berkualitas karena setiap kelas didefinisikan pada waktu kompilasi, sehingga tidak ada dynamicity rusak.
di atas itu, jika kelas adalah benar-benar bersarang, yaitu
A
benar-benar tertutup olehB
, kelas B dapat dengan mudah dikenal sebagai:Dalam contoh anda,
ini
mungkin mengacu pada anonim kelas misalnya. Jawa memberi nama untuk kelas-kelas dengan menambahkan$nomor
untuk nama melampirkan kelas.I'm asumsi ini terjadi untuk anonim kelas. Ketika anda membuat sebuah anonim kelas anda benar-benar membuat kelas yang meluas kelas nama yang anda punya.
"cleaner" cara untuk mendapatkan nama yang anda inginkan adalah:
Jika kelas anda adalah anonymous inner class,
getSuperClass()
harus memberikan kelas yang diciptakan dari. Jika anda membuat itu dari sebuah antarmuka dari anda're semacam SOL karena yang terbaik yang dapat anda lakukan adalahgetInterfaces()
yang mungkin memberi anda lebih dari satu interface."hacky" adalah cara untuk mendapatkan nama dengan
getClassName()
dan menggunakan regex untuk menjatuhkan$1
.Refleksi Api
I've ditemukan ini bekerja untuk kode saya,, namun saya kode ini akan mendapatkan kelas dari array hanya untuk loop.