我不會使用toString,因爲它可能有其他目的(如調試)或打印對象狀態。如果返回類名對於非程序員來說不清楚,那麼程序員也可能不清楚。我的意思是,如果你使用原則乾淨的代碼你的類名應該清楚給大家。String simplifiedClassName = qualifiedClassName.substring(qualifiedClassName.lastIndexOf(".") + 1).
如果你想更靈活,您IDisplayName.getName
可以這樣定義:
default String getName() {
String qualifiedName = getClass().toString();
return qualifiedName.substring(qualifiedName.lastIndexOf(".") + 1);
}
這是一個接口默認然後您必須的課程,由僅顯示一個簡化的類名稱中刪除軟件包方法,這意味着程序員只能在他們認爲他們必須的類中重寫它。
另一種可能性,如果你需要國際化/本地化: 你getName
可以讀取屬性文件的名稱,其屬性 關鍵是簡化的類名。屬性文件可以由非程序員編輯,而具有100個條目的屬性文件不是一個大的文件。保證屬性文件中值的唯一性也很容易。
編輯對於Java 7:除了IDisplayName
接口,創建一個名爲DisplayNameUtil
類,其中getName
是一個靜態方法:或
public static String getName(Object obj) {
String qualifiedName = obj.getClass().toString();
return qualifiedName.substring(qualifiedName.lastIndexOf(".") + 1);
}
然後,在你最顯示器類(共同超類),你可以補充一點:
@Override
public String getName() {
return DisplayNameUtil.getName(this);
}
程序員仍然能夠爲選擇的類返回特定的名字, 和接口getName
仍然可以訪問屬性文件,如果你想。
具有爲接口方法提供默認行爲的Util類是 Java 7模式。順便說一下,當從Java 7移動到8時,建議移除伴隨Util類的 重構。換句話說,如果您的代碼 被翻譯爲Java 8,則很容易將其重構爲在界面中使用默認的 方法並刪除Util類。
Just * make *類名用戶友好,例如通過省略包裝部分。 – EJP 2015-01-26 22:38:42
您能否詳細說明您的意思是「多顯示器擴展它」?他們是「顯示」(或其他類)對象,並且每個顯示都是一個實例?還是不同的顯示大師班的一些子類? – ahjohnston25 2015-01-26 23:07:03
顯示對象,每個顯示是一個實例 – 2015-01-26 23:27:50