介绍从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
提交
取消