【问题标题】:Java Packages - Import vs Explicit InclusionJava 包 - 导入与显式包含
【发布时间】:2014-01-08 07:01:55
【问题描述】:

我认为我合理地理解了包的使用,但在尝试使用导入包中的方法时遇到了一个表面上微不足道的问题。

我在以下目录结构中有三个文件:

  • Tester.java
  • approach1\Approach.java
  • approach2\Approach.java

他们的代码如下:

Tester.java

import approach1.Approach;

public class Tester {

    public static void main(String[] args)
    {
        approach1.Approach.sharedMethod("TEXT");

        sharedMethod("TEXT");
    }
}

approach1\Approach.java

package approach1; 

public class Approach {

    public static void sharedMethod(String approachText)
    {
        System.out.println("Approach Text: " + approachText);
    }
}

approach2\Approach.java

package approach2;

public class Approach {

    public static void sharedMethod(String approachText) { }

}

正如您可能猜到的,我试图根据导入的包/类从不同的方法中得出不同的响应。我遇到的问题在 Tester.java 中。第一个显式行工作正常,而第二个导入行 (sharedMethod("TEXT")) 抛出 “方法 sharedMethod(String) 未定义类型 Tester” 的错误。我不明白,因为我已经导入了其中一个包,所以该方法应该是可见的。

任何澄清都会被欣赏,因为我是 Java 新手。谢谢!

【问题讨论】:

  • 非静态导入导入类,而不是方法。调用方法时还是需要指定类:Approach.sharedMethod("TEXT");

标签: java import package


【解决方案1】:

你可以像这样导入你的静态方法shareMethod

import static approach1.Approach.sharedMethod;

【讨论】:

    【解决方案2】:

    您使用的标准导入类型仅导入类 - 因此类中的所有内容都必须使用类名引用。只需使用:

    Approach.sharedMethod()

    现在编译器将能够知道要使用哪种方法,这完全取决于您在顶部导入的 Approach 类。

    澄清一下:

        import approach1.Approach;
        public class Tester {
            public static void main(String[] args)
            {
                Approach.sharedMethod("TEXT");
            }
        }
    

    不同于

        import approach2.Approach;
        public class Tester {
            public static void main(String[] args)
            {
                Approach.sharedMethod("TEXT");
            }
        }
    

    您应该只指定类名并将其留给顶部的包导入语句来确定从哪个包中找到类/方法。

    如果名称冲突或您没有导入任何内容,您只需要在主程序主体中明确提及包。

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2010-09-30
      • 2022-11-01
      • 2018-12-12
      • 2010-12-16
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多