「本地主機」在Java SE 6的任何地方都是常量?打出來並不難,但在許多地方而不是字符串中可能會很好。是否有標準的做法?在Java中「localhost」是一個常量嗎?
編輯:我知道如何創建一個常量。在過去,我發現諸如org.apache.http.HttpHeaders之類的常量比使用我自己的更清潔,因爲它們不太容易出現拼寫錯誤或意外編輯。
「本地主機」在Java SE 6的任何地方都是常量?打出來並不難,但在許多地方而不是字符串中可能會很好。是否有標準的做法?在Java中「localhost」是一個常量嗎?
編輯:我知道如何創建一個常量。在過去,我發現諸如org.apache.http.HttpHeaders之類的常量比使用我自己的更清潔,因爲它們不太容易出現拼寫錯誤或意外編輯。
好了,你可以得到本地主機的名字是這樣的:
InetAddress.getLocalHost().getHostName()
以前的片段將返回本地主機的配置名(不是真正的字符串"localhost"
)。我相信你最好寫你自己的常數:
public static final String LOCAL_HOST = "localhost";
和(雖然有些人會說這是一個不好的做法,但這是開放的辯論),你可以在任何類靜態導入不斷在你需要它,只是在class存在真正的包和TheClass
與類中定義的常量的實際名稱替換"package.to"
:
import static package.to.TheClass.LOCAL_HOST;
通過這種方式,使用常數會在需要的地方寫LOCAL_HOST
一件簡單的事情。
問題是*可能有*沒有註冊名稱的迴環IP地址。如果你使用'getLocalHost()。getHostName()'它可能是'null',如果你不允許它會導致NPE。如果硬連線「本地主機」可能無法解決。如果你將其中任何一個放在常量後面,那麼你會得到「應該總是有效」的錯覺...... –
「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
地址;例如因爲它未經加密發送。
我同意它會使代碼更不可讀,特別是因爲一半的開發人員會使用Interface.LOCAL_HOST,而另一個一半會像今天一樣使用String「localhost」。 –
所以遵循這個邏輯,似乎這些評論者會發現任何不合常理的定義。我完全不同意。 –
@GarretWilson - 您錯誤地將我的論點視爲一種辯論策略。如果我遵循我論證的邏輯,我不會得出這個結論。對於它的價值,我也認爲「所有不變的定義是不可取的」的立場是不可支持的。但它是你的草莓師......不是我的。 –
我不確定我是否理解這個問題。你在問如何使一個常量?你是否爲這個字符串創建了一個常量並在某處出現錯誤? – David
public static String LOCAL_HOST =「localhost」or public static String LOCAL_HOST =「127.0.0.1」.... – Jayamohan
Java沒有提供常量。 –