【问题标题】:java importing from the same packagejava从同一个包中导入
【发布时间】:2014-02-24 05:18:39
【问题描述】:

我是 Java 新手,谷歌搜索对我没有帮助。所以,请耐心等待...:P
我创建了一个包acs。这个包有类Gets,它的方法是foo()

现在,我在同一个包中创建了另一个类并尝试调用方法foo()。当然这会起作用 - (new Gets()).foo();

但我添加了一个导入 import acs.Gets; 并简单地尝试直接使用该方法 - foo();http://docs.oracle.com/javase/tutorial/java/package/usepkgs.html 中所述。但不幸的是,代码不起作用。请告诉我哪里出错了。任何帮助将不胜感激!

【问题讨论】:

  • 你能给出确切的代码吗?
  • 它给出了什么错误?
  • 导入不会让你直接调用该方法——它只是意味着你不需要指定完整的包名。您仍然需要一个对象实例来调用该方法。或者如果是静态方法,需要引用类。
  • 如果类在同一个包中,则不需要添加导入。
  • 那么我应该使用什么代码@Trenin?

标签: java methods import package


【解决方案1】:

将 foo() 方法设为静态并使用 classname.foo() 访问它;

【讨论】:

    【解决方案2】:

    如果该函数是静态的,则只能从另一个类中导入该函数;所以例如这将起作用:

    public class Gets {
        public static void foo() {}
    }
    

    然后导入它:

    import static acs.Gets.foo;
    

    如果它不是静态的,但是您将无法导入它。

    编辑: 正如 cmets 中所指出的,使用静态导入会使代码更难阅读,因此应谨慎使用。如果使用得当,它们会很有用。

    【讨论】:

    • static 导入很容易导致混淆,必须避免使用接口或常规导入。
    • 是否必须避免是一个见仁见智的问题;但是确实会导致混淆,因此我在回复中添加了该警告。
    • 嘿,现在终于明白了。+1 用于解释静态方法。
    【解决方案3】:

    您仍然需要创建一个对象来访问非静态方法:

    (new Gets()).foo();
    

    您仍然需要声明该类以访问静态方法:

    Gets.staticFoo();
    

    不需要同一个包中导入一个类。这是多余的,因为包中的所有类已经对彼此可见。

    此外,您还对导入的工作方式感到困惑。导入类并不意味着其方法或字段无需限定即可访问。

    另一个包中导入一个类的原因是不必在代码中到处声明包。而不是写:

    acs.anotherpkg.Blah testblah = new acs.anotherpkg.Blah();
    

    你可以简单地写:

    import acs.anotherpkg.Blah;
    ...
    Blah testblah = new Blah();
    

    【讨论】:

      【解决方案4】:

      Java 是面向对象的。你需要创建一个类的对象来调用类的方法。

      类似

      new Gets().myFunction();

      一定会奏效。 此规则的唯一例外是创建static 方法。您可以了解何时创建静态方法以及它们是否符合您的要求,但是要访问类的方法,您需要一个对象。

      【讨论】:

        【解决方案5】:

        你不能在没有对象的情况下访问另一个类的方法,无论这两个类是否存在于同一个包中。

        【讨论】:

          猜你喜欢
          • 2013-12-22
          • 1970-01-01
          • 2015-10-06
          • 1970-01-01
          • 2013-04-14
          • 2018-10-02
          • 2011-03-23
          • 2020-02-24
          • 1970-01-01
          相关资源
          最近更新 更多