[英]Java Namespace - Two classes with the same name in different packages
我來自Objective-C,我們沒有包和命名空間。
Android有android.text.format.DateFormat,它有靜態方法,返回java.text.DateFormat實例(特別是getLongDateFormat()
和getMediumDateFormat()
)。
這些方法是否可以互換地稱為“靜態方法”或“類方法”?
看看Android文檔 ,我怎么想知道android.text.format.DateFormat方法返回一個java.text.DateFormat實例而不是android.text.format.DateFormat實例(返回后者的實例就是我最初的預期)?
如何導入必要的包以便能夠在我的源中使用這兩個類?
是否可以這樣編寫我的實現代碼:
DateFormat df = DateFormat.getLongDateFormat(this.getActivity());
mLabel.setText(df.format(mEvent.getDate());
我寫它的另一種方法是使用完整的包名,但這似乎是不必要的:
java.text.DateFormat df = android.text.format.DateFormat.getLongDateFormat(this.getActivity());
mLabel.setText(df.format(mEvent.getDate());
不知道為什么這是低估的,這是一個有用的討論。
1)我一直聽說它們被稱為“靜態方法”。
2)看到它的唯一方法是關注鏈接。 在這種情況下,文檔肯定會產生誤導。
3/4)在java中執行此操作的典型方法是不導入其中一個類,並完全限定其類名。 因此,如果你選擇導入java.text.DateFormat
而不是android版本,你可以執行類似DateFormat df = android.text.format .DateFormat.getLongDateFormat(this.getActivity());
來自JLS :
聲明為
static
方法稱為類方法 。
我會說我聽說“靜態方法”比“類方法”更常用,但兩者都在使用中,應該由有能力的Java開發人員理解。
唯一的選擇是將鏈接懸停在返回值上。 這是一個極差的API設計示例,內置了名稱沖突,而android.text.format.DateFormat
應該被命名為DateFormatFactory
。 似乎這個類可能原本用於與java.text
類相同的目的,並且API兼容性使其停滯不前。 有關類似的故事,請參閱java.sql.Date
。
使用import
只是一種便利,允許您在代碼中使用簡單的類名。 使用完全限定的類名始終是合法的,編譯器會將導入的類名轉換為完全限定的類名。 您不能導入具有相同名稱的多個類,因為這樣就無法區分它們
我建議從java.text
導入類有兩個原因:你可能會更頻繁地使用它,而且它是更“標准”的類。 當面對兩個具有相同簡單名稱的類中的一個的限定時,請使用開發人員通常認為的簡單名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.