我有一個基類,用於我所有活動(ActivityBase
),它本身來自android.app.Activity
。在onCreate中,我想根據當前執行的子類執行一些條件邏輯。如果SomeCustomActivity
和AnotherCustomActivity
都延伸ActivityBase
,我怎麼能在父類(ActivityBase
)確定哪兩個是當前正在執行的?從父類獲取子類名稱
回答
使用instanceof運營商。
假如你有一個基類,並命名爲Base
,SubOne
和SubTwo
兩個子類,如果你想檢查一個變量ref
是SubOne
或實例SubTwo
你會說:
if(ref instanceof SubOne){
}
else if(ref instanceof SubTwo){
}
注意:(ref instanceof Base)
將始終返回true
。
這不是一個面向對象的解決方案。你最好使用this.getClass()。getSimpleName()。這樣,每次引入新的子類時,您都不必修改父代碼。或者給父母一個名爲getName()的抽象方法,這樣每個孩子都會返回自己的名字。 – Evvo 2017-04-24 18:40:50
我想你想使用instanceof運算符,例如:
if(this instanceof SomeCustomActivity) {
// do stuff
} else if (this instanceof AnotherCustomActivity) {
// do other stuff
}
,這是所有有給它。
而不是使用if語句,你應該爲你的條件邏輯創建一個抽象方法。然後讓子類運行正確的代碼。
這也會讓你無需每次創建新的子類時修改基類。
雖然我不需要重複執行任何操作。我只想知道Activity是否應該執行某段代碼,否則跳過它。比方說,15和15不會。所有15個應該執行相同的代碼塊......應該在基類中完成,並有條件地執行它。 – Rich 2011-03-04 20:13:09
在某些情況下,父類中的這條線可以解決這個問題。它返回的「子」類(不是父)的名稱:
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
在你的超級類負責回答問題的條件創建方法 - 是類型X的子類之一。在處理邏輯中,使用此方法來決定執行哪個代碼塊。每個子類都可以根據需要覆蓋決策方法和答案。結果你的超類沒有關於子類的知識,而子類不需要擔心實際的處理實現。
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. Rails:獲取父類方法中子類的類名稱
- 4. 獲取子類名稱?
- 5. 獲取子類的名稱
- 6. 從帖子ID獲取類別名稱
- 7. 獲取超父類的方法名稱層次的子類
- 8. 在父類中獲取子類的函數名稱
- 9. 從父類中獲取對象類名?
- 10. 從子類獲取父類的字段
- 11. 獲取wordpress中父類別的名稱
- 12. 如何從打字稿中的父類中獲取子類的名稱?
- 13. 從擴展類中獲取類名稱
- 14. 如何從父類獲取執行的Java子類名?
- 15. 獲取基於父母類名稱的子元素的ID
- 16. 在Grail中的子類審覈日誌中獲取父名稱
- 17. 從子/子/繼承類獲取基類/父級/超級類
- 18. 從超類中獲取子類的名稱
- 19. 我想顯示子類別名稱不是父類別名稱
- 20. 獲取子屬性名稱強類型
- 21. Java從父類中獲取子方法
- 22. 存儲/從父類中獲取子女
- 23. C#3.5:如何從UserControl獲取父類的名稱?
- 24. 如何使用jQuery獲取第二個父類的類名稱
- 25. 獲取子類名?
- 26. 在父類中獲取子類變量
- 27. 獲取類名稱函數的名稱
- 28. 從PRAGMA獲取名稱和類型table_info()
- 29. 從列名稱獲取數據類型
- 30. 從QName獲取Java類名稱
問題與標題不匹配。你根本不需要兒童班的名字。而是你想測試這個'this'是否是一個特定的子類的實例。 – 2011-03-03 03:36:36
超類不叫「父」嗎?我聽說定義爲A的關係是B - B是父母,A是孩子。 – Rich 2011-03-03 03:45:58
是的,超類被稱爲父類,但你並不特別需要知道子類的名稱,你只需要知道孩子是什麼類的實例。 – gailbear 2011-03-03 21:22:39