介紹從C ++開(kāi)始,最大的區(qū)別之一是作用域的不同:在C ++中,每個(gè)標(biāo)識(shí)符都相對(duì)于當(dāng)前范圍(class或namespace),您可以::在開(kāi)始時(shí)使用范圍解析運(yùn)算符編寫一個(gè)絕對(duì)路徑。但是,在Java中,如果不將標(biāo)識(shí)符導(dǎo)入當(dāng)前作用域或編寫其完整路徑,就無(wú)法找到從其他包訪問(wèn)標(biāo)識(shí)符的方法。如果我有幾個(gè)同名的類,那么這可能是一個(gè)問(wèn)題(然后,在C ++中,我將它們分別命名為Module1 :: Foo和Module2 :: Foo,這在Java中是不可能的,只要我想保持理智即可。因?yàn)閏om.company.project.module1.Foo對(duì)于我的品味來(lái)說(shuō)太長(zhǎng)了)。代碼!這是一個(gè)Tools.Useless.Foo從Java和C ++訪問(wèn)類的示例(不帶import或using)Tools/Useless/Foo.hpp:namespace Tools {namespace Useless {class Foo { };}}Tools/Bar.hppnamespace Tools {...// Use Foo with a relative identifierUseless::Foo foo;// Use Foo with an absolute identifier.::Tools::Useless::Foo bar;...} 這就是在Java中的樣子:com/company/project/Tools/Useless/Foo.java:package com.company.project.Tools.Useless;public class Foo { }com/company/project/Tools/Bar.java:...// Use Foo with a relative identifier???// Use Foo with an absolute identifier.com.company.project.Tools.Useless.Foo foo;...問(wèn)題有沒(méi)有一種方法可以Foo從軟件包中訪問(wèn)Tools.Useless而無(wú)需指定Tools.Useless完整的軟件包名稱(并導(dǎo)入它;因?yàn)閷?dǎo)入會(huì)將其綁定到當(dāng)前作用域)?我做對(duì)了嗎?我應(yīng)該如何使用幾個(gè)同名的類?我應(yīng)該避免這種情況,還是只使用“ package。*”將其導(dǎo)入以繞過(guò)它?解決方案使用更多的包描述類名(例如ToolsUselessFoo而不是Foo)。使用import path.to.module.*而不是導(dǎo)入所有內(nèi)容,import path.to.module.Foo然后訪問(wèn)Foo所需的軟件包以解決任何歧義。問(wèn)題在于有時(shí)包名稱具有含義(例如Tools.Useless.Foo和Tools.Useful.Foo)。
Java中與程序包相對(duì)的標(biāo)識(shí)符路徑
函數(shù)式編程
2021-04-30 14:37:18