2012-05-15 34 views
48

Tôi biết rằng việc sử dụng Context và phương thức getClass().getName() Tôi có thể nhận được một chuỗi đại diện cho tên đầy đủ, như com.package1.package2.MainActivity.Làm cách nào để chỉ lấy tên lớp, không phải đường dẫn đầy đủ?

Làm cách nào để chỉ nhận phần cuối cùng, tên lớp? Trong trường hợp này, nó sẽ là MainActivity chuỗi.

Tôi có thể làm điều đó với phương thức split() đơn giản, nhưng có thể có cách tốt hơn, đáng tin cậy hơn.

Trả lời

122

Đây là tất cả các bạn cần.

MainActivity.this.getClass().getSimpleName(); 
+1

Đây là điều đúng. 'GetLocalClassName()' sẽ trả về bất kỳ tên gói nào trong thư mục gốc của ứng dụng. Việc này chỉ trả về tên của lớp, cho dù nó nằm trong thư mục gốc hay trong một gói khác. – sandalone

1

Bất kể bạn làm cách nào, bạn sẽ cần thực hiện thêm thao tác trên đầu trang của getClass. Tôi muốn khuyên này qua chia:

String className = xxx.getClass(); 
int pos = className.lastIndexOf ('.') + 1; 
String onlyClass = className.substring(pos); 
+0

đọc dòng cuối cùng của bài đăng mà anh ấy muốn khác rồi chia (chuỗi con) –

+1

Tốt thôi, tôi không sử dụng chia tách. – Rawkode

+0

@Rawkode Có một cách tốt hơn. Cái này an toàn hơn sử dụng 'split' hoặc' substring'. – sandalone

14

Để có được chỉ là tên của lớp, không đầy đủ đường dẫn mà bạn sẽ sử dụng biểu thức này:

String className = this.getLocalClassName(); 
//or 
String className = getBaseContext().getLocalClassName(); 
//or 
String className = getApplicationContext().getLocalClassName(); 
+2

Mỗi ngày là một ngày học, hãy tìm :-) – Rawkode

+1

Có, tôi ghét vì đã quá sớm sau khi tôi đăng một câu hỏi, nhưng tốt hơn là tôi đăng nó theo cách này hơn là xóa một câu hỏi. – sandalone

+0

không dựa trên cả 3 nếu bạn sử dụng API cũ, văn bản trống hoặc vô dụng sẽ trả lại. Đối với tôi chỉ getClass().getName() hoạt động – djdance

5

Ngoài ra, bạn có thể sử dụng:

private static final String TAG = MainActivity.class.getSimpleName(); 
0

Không giải pháp khác làm việc cho tôi, dunno lý do tại sao. Tôi đang sử dụng

this.getClass().getName().replace("$",".").split("\\.")[3] 

điểm: trong một chuỗi và bạn có thể sử dụng nó trong chuỗi và người nghe.

(trong listeres tôi nhận được một cái gì đó giống như com.djdance.android.main $ 53)

0

Nếu bạn muốn để có được những tên bên ngoài lớp bạn có thể gọi:

MainActivity.class.getSimpleName() 

theo cách này bạn có thể tránh làm cho lớp của bạn tĩnh.

1
  1. Nếu bạn cần tên lớp trong một phương pháp, sử dụng getLocalClassName()

  2. Nếu bạn cần tên lớp bên ngoài một phương pháp, sử dụng getClass().getSimpleName()

  3. Nếu bạn muốn sử dụng lại tên lớp trong nhiều phương pháp trong cùng một lớp, sau đó sử dụng private final String TAG = getClass().getSimpleName(); trong lớp và sau đó sử dụng biến TAG trong mọi phương thức.

  4. Nếu bạn muốn truy cập tên lớp từ các phương pháp tĩnh, sau đó sử dụng private static final String TAG = MainActivity.class.getSimpleName(); bây giờ sử dụng biến tĩnh TAG trong các phương pháp tĩnh của bạn.

Các vấn đề liên quan