이름으로 수업 받기
내 응용 프로그램에 TestActivity라는 Activity 클래스가있는 경우이 예제와 같이 이름으로 클래스를 가져올 수있는 방법이 있습니까?
Class<?> c = getClassByName("TestActivity");
사용 의 forName을 대신 ..
이 같은..
try {
Class<?> act = Class.forName("com.bla.TestActivity");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Class.forName을이 거기에 예외를 갖고있는 것 같아요. 이것은이 문제를 해결하기 위해 위의 내용을 확장하는 것입니다.
try { t = Class.forName("com.package.classname"); } catch (Exception ignored){}
Class::forName알 수없는 유형의 클래스 객체를 가져 오는 데 사용할 수 있습니다 . 형식화 된 클래스를 얻으려면에서 Class::asSubclass반환 된 클래스에서 사용할 수 있습니다 Class::forName.
Class<? extends Activity> activityClass = Class.forName("com.example.TestActivity")
.asSubclass(Activity.class);
물론 다양한 유형의 예외도 처리해야합니다. 반사를 다룰 때 평소처럼.
나는 또한 비슷한 요구 사항이 있었고 화면과 활동 매핑을 포함하는 백엔드에서 오는 json이있었습니다. iOS / 안드로이드 모두에 공통된 json이기 때문에 json에 같은 용어를 추가 Activity할 수 없었으므로 이것이 우리가 한 일입니다.
모든 JSON에서
Activity또는Viewcontrollers사용의 간단한 이름은 용 IEHomeActivity와HomeViewController우리는 JSON에서 "홈"을 사용합니다앱에서 우리는 json을 구문 분석하고 활동을 동적으로 가져 오기 위해 아래 유틸리티 메서드를 작성했습니다.
수업 이름을 얻으려면 (예 : Home을 통과하면 다시 돌아옵니다 com.package.HomeActivity)
fun getClassInfoFor(name: String, context: Context):String{
var str = "${context.getPackageName()}.${name}Activity"
return str
}
이제 문자열에서 클래스를 얻으려면
try {
val className = Utilties.getClassInfoFor(activityNameFromJSON, context)
val fetchedClass = Class.forName(className)
val showDetailsIntent = Intent(context, fetchedClass)
context.startActivity(showDetailsIntent)
} catch (e: ClassNotFoundException) {
e.printStackTrace()
}
이렇게하면 동일한 방법으로 여러 클래스를 쉽게 관리 할 수 있습니다. 내 모든 셀이 다른 활동으로 이동하는 리사이클 러 뷰에서 이것을 사용합니다.
귀하의 질문에 가장 적절한 답변이 아닐 수도 있지만 일반적으로 클래스 이름 리터럴을 문자열로 하드 코딩하는 것은 좋지 않습니다. 사용하는 것이 더 나을 수 있습니다
Class<?> act = TestActivity.class;
통사론.
참고 URL : https://stackoverflow.com/questions/10119956/getting-class-by-its-name
'IT TIP' 카테고리의 다른 글
| web.config 변환을 사용할 때 ReplacableToken_? (0) | 2020.10.23 |
|---|---|
| Internet Explorer가 Quirks가 아닌 표준 모드에서 렌더링되도록하려면 어떻게해야합니까? (0) | 2020.10.23 |
| $ (document) .on ( "click"… 작동하지 않습니까? (0) | 2020.10.23 |
| Bash : 특정 시간 / 날짜까지 잠자기 (0) | 2020.10.23 |
| 이동 중에 변수를 유지하는 방법이 있습니까? (0) | 2020.10.23 |