Programing

전체 경로가 아닌 클래스 이름 만 얻는 방법은 무엇입니까?

lottogame 2020. 11. 10. 07:41
반응형

전체 경로가 아닌 클래스 이름 만 얻는 방법은 무엇입니까?


사용 Context및 메서드 를 사용하여 .NET getClass().getName()같은 전체 클래스 이름을 나타내는 문자열을 얻을 수 있다는 것을 알고 있습니다 com.package1.package2.MainActivity.

마지막 부분, 클래스 이름 만 어떻게 얻을 수 있습니까? 이 경우 MainActivity문자열이됩니다.

간단한 split()방법으로 할 수 있지만 더 나은 방법이있을 수 있습니다.


이것이 필요한 전부입니다.

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

전체 경로가 아닌 클래스 이름 만 가져 오려면 다음 표현식을 사용합니다.

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

또는 다음을 사용할 수 있습니다.

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

어떤 방법을 사용하든 getClass 위에 추가 작업을 수행해야합니다. 나는 이것을 나누는 것이 좋습니다.

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

  1. 메서드 내에서 클래스 이름이 필요한 경우 getLocalClassName()

  2. 메서드 외부에 클래스 이름이 필요한 경우 getClass().getSimpleName()

  3. 동일한 클래스 내의 여러 메서드에서 클래스 이름을 재사용하려면 클래스 내에서 사용한 private final String TAG = getClass().getSimpleName();다음 모든 메서드에서 TAG 변수를 사용하십시오.

  4. 정적 메소드에서 클래스 이름에 액세스하려면 private static final String TAG = MainActivity.class.getSimpleName();이제 정적 메소드 내에서 정적 변수 TAG를 사용하십시오.


나에게 맞는 다른 솔루션은 없습니다. 이유는 모르겠습니다. 나는 사용하고있다

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

단점 : 하나의 문자열에서 스레드와 리스너에서 사용할 수 있습니다.

(리스터에서는 com.djdance.android.main $ 53 과 같은 것을 얻습니다 )


수업 밖에서 이름을 얻으려면 다음을 호출 할 수 있습니다.

MainActivity.class.getSimpleName()

이런 식으로 클래스를 정적으로 만드는 것을 피할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/10606190/how-to-get-class-name-only-not-full-path

반응형