【问题标题】:"Module" functionality in Java?Java中的“模块”功能?
【发布时间】:2011-10-18 13:03:59
【问题描述】:

在 Vb.net 中,我们有一个称为“模块”的东西,它提供了一个全局范围,模块中的静态函数在整个项目中可见。 p>

Java 中有这样的功能吗? (即添加可用于多个包/文件/类的静态方法无需import .*

好的,我知道这是一个会引起很多争论的功能,但这个帖子的真正意义不是就这个功能进行争论。

【问题讨论】:

  • 没有这样的东西。 Java IDE 会自动添加导入并在编辑器中隐藏/折叠它们,所以我们不介意它们:-)
  • 好吧,你不必导入 java.lang 包(字符串包含在这个包中,你永远不必导入字符串)......但我不知道有什么方法可以创建一个无需导入即可使用的新“模块”。
  • @Asaf 我们如何在java.lang 包中编写一个类?
  • @Pacerier 你不能,它是 java 的一部分。如果你能找到破解它的方法,我强烈建议不要这样做。当您实际部署应用程序时,您会遇到大量问题。另外需要澄清的是,String 中的任何方法或 java.lang 中的任何其他类都不能在不引用 String 的情况下访问,例如 String.replace。你不能随时去 replace() 。它所做的就是自动导入 java.lang.*。
  • 恕我直言,如果这个问题提到了使 VB 模块特别方便的原因(存在名称冲突的风险),这个问题会更有用:导入 VB 模块可以在不附加类的情况下引用公共函数姓名。所以不仅仅是这些函数是可见的(公共的),它们实际上是在全局名称空间中(一旦它们被导入)。

标签: java vb.net function module import


【解决方案1】:

从字面上回答,不,Java 中没有真正的“全局”。但是你不需要导入,尤其是import .*

下面的代码说明了导入不是必需的,但它只是答案的一部分。

package org.example.pkg.foo;
public class Foo {
    public static void doSomething();
}

package org.example.pkg.bar;
public class Bar {
    public void bar() {
        org.example.pkg.foo.Foo.doSomething();
    }
}

在 Java 中,类和接口等类型是根据加载它们的 ClassLoader 定义的。您可以有多个类加载器,这意味着可以加载同一类的多个副本。其明显的扩展是可以加载具有相同限定名(包 + 类)的多个类,并且没有内在要求它们是相关的。

OSGi 就是一个例子,其中每个 bundle 都有自己的类加载器,因此您可以同时加载同一类的多个 版本时间。

这与问题有什么关系?好吧,如果不准确识别您要引用的类,就不可能准确识别您要引用的方法或成员。导入或 FQN 引用就是这样做的。

【讨论】:

  • 全局变量可能有时很有用,该死。
  • 顺便说一句,我想知道我们如何编写一个类并将其放在 java.lang 包中?
  • 您真的不想尝试将代码添加到 java.lang,甚至 java.* 或 javax.*。这在某些运行时可能是可能的,但是 Eclipse 会忽略用户在 java.lang 中创建的类。
  • 好的,我明白了,但我的意思是你知道规范对这件事有什么要说的吗?
  • 我实际上在 JLS 中找不到任何东西,但是关于 SO 的另一个问题提到了限制; stackoverflow.com/questions/727844/javax-vs-java-package/…
【解决方案2】:

不,不这么认为。静态导入可以减少使用此类方法的痛苦/冗长,但通常建议小心使用它们。

【讨论】:

    【解决方案3】:

    没有import。您可以声明可从项目中的任何位置访问的 public static 方法,但您仍然必须导入类或在使用时使用完全限定的类路径。

    【讨论】:

      【解决方案4】:

      公共方法在整个项目中都是可见的

      但是,如果您想省去导入,您可以明确路径

      my.package.UtilClass.methodIWannaCall(someArg);
      

      【讨论】:

        【解决方案5】:

        没有。任何静态方法都需要导入才能可见。(这是一件好事)。

        正如其他人提到的,Java IDE 为我们完成了这项工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-09
          • 1970-01-01
          • 2023-04-07
          • 2015-12-04
          • 1970-01-01
          • 2014-08-08
          相关资源
          最近更新 更多