介紹從C ++開始,最大的區別之一是作用域的不同:在C ++中,每個標識符都相對于當前范圍(class或namespace),您可以::在開始時使用范圍解析運算符編寫一個絕對路徑。但是,在Java中,如果不將標識符導入當前作用域或編寫其完整路徑,就無法找到從其他包訪問標識符的方法。如果我有幾個同名的類,那么這可能是一個問題(然后,在C ++中,我將它們分別命名為Module1 :: Foo和Module2 :: Foo,這在Java中是不可能的,只要我想保持理智即可。因為com.company.project.module1.Foo對于我的品味來說太長了)。代碼!這是一個Tools.Useless.Foo從Java和C ++訪問類的示例(不帶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;...問題有沒有一種方法可以Foo從軟件包中訪問Tools.Useless而無需指定Tools.Useless完整的軟件包名稱(并導入它;因為導入會將其綁定到當前作用域)?我做對了嗎?我應該如何使用幾個同名的類?我應該避免這種情況,還是只使用“ package。*”將其導入以繞過它?解決方案使用更多的包描述類名(例如ToolsUselessFoo而不是Foo)。使用import path.to.module.*而不是導入所有內容,import path.to.module.Foo然后訪問Foo所需的軟件包以解決任何歧義。問題在于有時包名稱具有含義(例如Tools.Useless.Foo和Tools.Useful.Foo)。
添加回答
舉報
0/150
提交
取消