android.app.Activity
에서 파생 된 모든 활동 (ActivityBase
)에 대한 기본 클래스가 있습니다. onCreate에서 현재 실행중인 하위 클래스를 기반으로 일부 조건부 논리를 실행하려고합니다. SomeCustomActivity
및 AnotherCustomActivity
이 모두 ActivityBase
으로 확장되는 경우 부모 클래스 (ActivityBase
)에서 현재 실행중인 클래스를 결정할 수 있습니까?부모 클래스에서 자식 클래스 이름 가져 오기
답변
instanceof 연산자를 사용하십시오.
당신이 변수 ref
이 SubOne
또는 인스턴스가 있는지 확인하려는 경우, 기본 클래스 및 Base
, SubOne
및 SubTwo
를라는 두 개의 서브 클래스를 가정하면 SubTwo
당신은 말할 것 :
if(ref instanceof SubOne){
}
else if(ref instanceof SubTwo){
}
참고 : (ref instanceof Base)
은 항상 true
을 반환합니다.
if(this instanceof SomeCustomActivity) {
// do stuff
} else if (this instanceof AnotherCustomActivity) {
// do other stuff
}
을 그리고 그 모든 것이 거기에있다된다
이것은 객체 지향 솔루션이 아닙니다. this.getClass(). getSimpleName()을 사용하면 더 편리합니다. 그렇게하면 새 하위 클래스를 도입 할 때마다 상위 코드를 수정할 필요가 없습니다. 또는 각 부모가 자신의 이름을 반환하도록 getName()이라는 추상 메서드를 부모에게 제공합니다. – Evvo
난 당신이 예를 들어, instanceof 연산자를 사용하려는 생각합니다.
if 문을 사용하는 대신 조건 논리에 대한 추상 메서드를 만들어야합니다. 그런 다음 하위 클래스에 올바른 코드를 실행하게하십시오.
이렇게하면 새 하위 클래스를 만들 때마다 기본 클래스를 수정하지 않아도됩니다.
나는 여러 번 다시 구현할 필요가 없습니다. Activity가 특정 코드를 실행해야하는지 파악하고 싶다면 건너 뛰십시오. 예를 들어, 15 개와 15 개가 아닌 경우를 가정 해 봅시다. 15 개 모두 동일한 코드 블록을 실행해야합니다 ... 기본 클래스에서 수행되어야하며 조건부로 실행해야합니다. – Rich
경우에 따라 상위 클래스의이 행이이 문제를 해결합니다. 그것은 "아이"클래스 (안 부모)의 이름을 반환
자세한 설명은 여기를 참조하십시오this.getClass().getName() //String like "com.mycompany.myclassname"
this.getClass().getSimpleName() //String like "myclassname"
: 질문에 대답을 담당하는 조건 방법을 만들고, 상위 클래스에서 http://www.coderanch.com/t/324715/java/java/Getting-child-class-name-parent
- 처리 논리에서이 메소드를 사용하여 실행할 코드 블록을 결정합니다. 각 하위 클래스는 필요에 따라 결정 방법과 대답을 무시할 수 있습니다. 결과적으로 수퍼 클래스는 하위 클래스에 대한 지식이 없으므로 하위 클래스는 실제 처리 구현을 염려 할 필요가 없습니다.
abstract class A {
abstract boolean isItX();
void doX() { ... }
void doY() { ... }
void process() {
if (isItX()) {
doX();
} else {
doY();
}
}
}
class B extends A {
boolean isItX() {
return true;
}
}
class C extends A {
boolean isItX() {
return false;
}
}
자세한 내용은 Hollywood Principle을 참조하십시오.
또한 부모의 .getClass() 메소드를 사용 후 런타임 객체 클래스를 반환하기 때문에이 기본적으로 작동이
if(parent.getClass().equals(childObj.class)){
//to do ..
}
같이 확인할 수 있습니다. 이것은 추상적 인 클래스의 경우 특히 효과적입니다 - 최근 프로젝트에서 저의 테스트를 거쳐 테스트되었습니다.
- 1. 부모 클래스에서 자식 클래스의 함수 이름 가져 오기
- 2. 확장 클래스에서 클래스 이름 가져 오기
- 3. 부모 클래스에서 로컬 변수 값 가져 오기?
- 4. 클래스에서 패키지 이름 가져 오기
- 5. div에서 클래스 이름 가져 오기
- 6. NHibernate. 명백한 부모 자식 가져 오기
- 7. 모듈에서 클래스 이름 가져 오기
- 8. 하위 클래스 이름 가져 오기?
- 9. 모델 클래스에서 사용자 이름 가져 오기
- 10. Javascript : 부모 노드 이름 가져 오기
- 11. 자식 클래스에서 부모 속성을 숨기는 방법
- 12. 클래스에서 전체 클래스 경로 가져 오기
- 13. jquery - 부모 부모 가져 오기?
- 14. C# 내부 클래스에서 파생 된 형식 이름 가져 오기
- 15. 공통 인터페이스를 구현하는 부모 및 자식 클래스
- 16. javascript id로 자식 가져 오기
- 17. 중첩 클래스 - 부모 클래스에서 중첩 클래스 호출
- 18. 가장 최근의 클래스 선언 이름 가져 오기?
- 19. 메서드 내에서 클래스 이름 가져 오기
- 20. C#에서 문자열의 클래스 이름 가져 오기
- 21. 패키지의 클래스 이름 목록 가져 오기
- 22. 무대/부모의 모든 자식 가져 오기 Object
- 23. 트리 가져 오기 노드 이름
- 24. 부모 함수 가져 오기
- 25. gtk.ScrolledWindow에서 자식 가져 오기
- 26. 자식 클래스에서 UITableView에 액세스
- 27. 어떻게 부모 클래스에서 객체를 설정하고 자식 클래스에서 사용합니까?
- 28. 다른 클래스에서 값 가져 오기
- 29. 확장하는 동안 다른 클래스에서 데이터 가져 오기
- 30. XmlPullParser 자식 노드 가져 오기
질문과 제목이 일치하지 않습니다. 당신은 하위 클래스 이름을 전혀 원하지 않는다. 오히려'this'가 특정 자식 클래스의 인스턴스인지 테스트하려고합니다. –
수퍼 클래스가 "부모"라고도 지정되어 있지 않습니까? 나는 A가 B - B가 부모이고 A가 자식이라고 정의 된 관계를 들었다. – Rich
예, 상위 클래스를 상위 클래스라고 부르지 만 특별히 하위 클래스의 이름을 알 필요는 없으며 하위 클래스가 어떤 클래스인지 알아야합니다. – gailbear