簡體   English   中英

Java命名空間 - 兩個在不同包中具有相同名稱的類

[英]Java Namespace - Two classes with the same name in different packages

我來自Objective-C,我們沒有包和命名空間。

Android有android.text.format.DateFormat,它有靜態方法,返回java.text.DateFormat實例(特別是getLongDateFormat()getMediumDateFormat() )。

  1. 這些方法是否可以互換地稱為“靜態方法”或“類方法”?

  2. 看看Android文檔 ,我怎么想知道android.text.format.DateFormat方法返回一個java.text.DateFormat實例而不是android.text.format.DateFormat實例(返回后者的實例就是我最初的預期)?

  3. 如何導入必要的包以便能夠在我的源中使用這兩個類?

  4. 是否可以這樣編寫我的實現代碼:

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());

  1. 來自JLS

    聲明為static方法稱為類方法

    我會說我聽說“靜態方法”比“類方法”更常用,但兩者都在使用中,應該由有能力的Java開發人員理解。

  2. 唯一的選擇是將鏈接懸停在返回值上。 這是一個極差的API設計示例,內置了名稱沖突,而android.text.format.DateFormat應該被命名為DateFormatFactory 似乎這個類可能原本用於與java.text類相同的目的,並且API兼容性使其停滯不前。 有關類似的故事,請參閱java.sql.Date

  3. 使用import只是一種便利,允許您在代碼中使用簡單的類名。 使用完全限定的類名始終是合法的,編譯器會將導入的類名轉換為完全限定的類名。 您不能導入具有相同名稱的多個類,因為這樣就無法區分它們

  4. 我建議從java.text導入類有兩個原因:你可能會更頻繁地使用它,而且它是更“標准”的類。 當面對兩個具有相同簡單名稱的類中的一個的限定時,請使用開發人員通常認為的簡單名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM