2013-01-19 25 views
0

「本地主機」在Java SE 6的任何地方都是常量?打出來並不難,但在許多地方而不是字符串中可能會很好。是否有標準的做法?在Java中「localhost」是一個常量嗎?

編輯:我知道如何創建一個常量。在過去,我發現諸如org.apache.http.HttpHeaders之類的常量比使用我自己的更清潔,因爲它們不太容易出現拼寫錯誤或意外編輯。

+3

我不確定我是否理解這個問題。你在問如何使一個常量?你是否爲這個字符串創建了一個常量並在某處出現錯誤? – David

+0

public static String LOCAL_HOST =「localhost」or public static String LOCAL_HOST =「127.0.0.1」.... – Jayamohan

+1

Java沒有提供常量。 –

回答

5

好了,你可以得到本地主機的名字是這樣的:

InetAddress.getLocalHost().getHostName() 

以前的片段將返回本地主機的配置(不是真正的字符串"localhost")。我相信你最好寫你自己的常數:

public static final String LOCAL_HOST = "localhost"; 

和(雖然有些人會說這是一個不好的做法,但這是開放的辯論),你可以在任何類靜態導入不斷在你需要它,只是在class存在真正的包和TheClass與類中定義的常量的實際名稱替換"package.to"

import static package.to.TheClass.LOCAL_HOST; 

通過這種方式,使用常數會在需要的地方寫LOCAL_HOST一件簡單的事情。

+0

問題是*可能有*沒有註冊名稱的迴環IP地址。如果你使用'getLocalHost()。getHostName()'它可能是'null',如果你不允許它會導致NPE。如果硬連線「本地主機」可能無法解決。如果你將其中任何一個放在常量後面,那麼你會得到「應該總是有效」的錯覺...... –

2

「localhost」在Java SE 6中的任何位置都是常量嗎?

簡單的答案是

您可以通過轉到Java SE javadoc索引頁面「L」並搜索來確認此操作。沒有公開「本地主機」,或在任何資本的Javadoc local_host」不斷上市。

這是不是非常難打出來,但它可能是好的,有很多地方,而不是字符串常量。

首先,我不同意,這將是「好」,國際海事組織,它將使代碼可讀性。SomeInterface.LOCAL_HOST是字符多於"localhost"。如果你使用靜態導入,讀者仍然要查找LOCALHOST的定義來找出它實際上綁定的內容。

二,更重要的是,「localhost」的名字實際上是一個約定而非標準。舊的Windows系統(例如)沒有爲「本地主機」名稱提供默認映射,所以不能保證名稱能夠解決。 (即使這樣做,也不能保證它會解析爲回送IP地址。)因此,如果Java SE API確實爲「本地主機」主機名定義了一個符號,它(理論上)會引發可移植性問題。

並且注意"localhost"InetAddress.getLocalHost().getHostName()很可能不一樣。前者通常解析爲127.0.0.1,後者通常解析爲其他系統可以將數據包路由到的IP地址;即不是127.x.x.x IP地址。有關係嗎?在很多情況下,是的!例如,當您明確不希望IP流量離開當前主機時,通常會使用127.x.x.x地址;例如因爲它未經加密發送。

+0

我同意它會使代碼更不可讀,特別是因爲一半的開發人員會使用Interface.LOCAL_HOST,而另一個一半會像今天一樣使用String「localhost」。 –

+0

所以遵循這個邏輯,似乎這些評論者會發現任何不合常理的定義。我完全不同意。 –

+2

@GarretWilson - 您錯誤地將我的論點視爲一種辯論策略。如果我遵循我論證的邏輯,我不會得出這個結論。對於它的價值,我也認爲「所有不變的定義是不可取的」的立場是不可支持的。但它是你的草莓師......不是我的。 –

相關問題