在哪种情况下,c ++ / c#命名空间方法比Java方法更好?

时间:2010-03-17 17:01:21

标签: c# java namespaces language-features

我之所以这样说是因为c#可以很容易地复制java约定或其变体,但是选择了更灵活的方法来明确声明文件中的命名空间。作为一名Java程序员,我希望我能做的事情有所不同,但命名空间不是其中之一。

灵活性具有一定的开销(额外的支持,开发人员的额外决策,使得查看项目对命名空间的贡献变得更加困难,至少没有专家IDE)。那么当这种灵活性有利时,有什么实际的例子呢?

编辑:为了澄清,重点是类如何在命名空间中声明自己,而不是如何从其他命名空间导入/引用类。

3 个答案:

答案 0 :(得分:1)

它可能在生成的代码中很有用。有时代码生成可能希望为多个类创建单个源文件 - 它们可能位于不同的名称空间中。

答案 1 :(得分:1)

我在Java约定中看到的一个问题是,无法在不同的包中指定多个相同类名的导入。所以假设你有两个类,比如......

com.yourcompany.blah.blah.verylong.blah.blah.FantasticClass
com.someothercompany.blah.blah.also.very.lengthy.blah.blah.FantasticClass

...在一个Java文件中,您可以只在其中一个上使用import。如果您的代码需要使用这两个类,那么您将必须使用完整的包名称为其中一个编写变量声明。这意味着你最终会得到像......这样繁琐的代码。

com.someothercompany.blah.blah.also.very.lengthy.blah.blah.FantasticClass = new com.someothercompany.blah.blah.also.very.lengthy.blah.blah.FantasticClass();

...或者为了避免它而进行的奇怪的重构练习。

除了那个可以用“import class alias class2”这样的新语言功能轻松修复的hiccough之外,我更喜欢Java方法的简单性。

答案 2 :(得分:0)

从代码设计视图命名空间与包相同。 Java中的优秀风格是根据应用程序中的角色将类放入包中。它提高了代码的可读性和可维护性。从这个角度来看,名称空间是相同的。但是命名空间不会强迫您将类放在不同的文件夹中。