【问题标题】:Undefined method when using static import使用静态导入时未定义的方法
【发布时间】:2016-09-17 08:22:30
【问题描述】:

我正在阅读“Thinking in Java,第 4 版”并且无法通过这个练习:

创建两个包:debug 和 debugoff,包含相同的类 使用 debug() 方法。第一个版本显示它的字符串参数 到控制台,第二个什么都不做。使用静态导入行 将该类导入测试程序,并演示条件 编译效果。

显然我缺少一些东西,因为当我尝试这个时:

// C:\Users\user\Documents\EclipseProjects\DebugOnOff\bin\debugonoff\debugon
package debugonoff.debugon;
public class Test {
    public static void debug(String str) {}
}

// C:\Users\user\Documents\EclipseProjects\DebugOnOff\bin\debugonoff\debug
package debugonoff.debug;
public class Test {
    public static void debug(String str) {
        System.out.println(str);
    }
}

// C:\Users\user\Documents\EclipseProjects\DebugOnOff\bin
import static debugonoff.debug.Test.*;
public class TestProgram {
    public static void main(String[] args) {
        debug("Hi there!");
    }
}

出现此错误消息:

TestProgram 类型的方法 debug(String) 未定义

这里有什么问题?

【问题讨论】:

    标签: java import static undefined


    【解决方案1】:

    您不能使用指定的静态导入来导入方法

    1. 您可以使用静态导入来访问或导入成员(对象)

    例如:System.out.println(""); -> 可以替换为 out.println("");如果您对 java.lang.System.* 进行了静态导入;

    1. 在任何情况下都不建议大量使用静态导入,因为它会降低代码的可读性和可维护性。

    2. 静态方法只能像 Class.methodName() 一样被访问 或者像往常一样 new class().methodName()

    添加评论如果您不清楚

    【讨论】:

      【解决方案2】:

      这段代码应该可以工作。至少对我有用。

      您使用哪种编译器、Java 版本、IDE 和操作系统?

      请注意,其他 2 个 cmets 与 oracle documentation 的引用不正确。可以对方法进行静态导入。文档中的示例是

      import static java.lang.Math.*; double r = cos(PI * theta);

      【讨论】:

        【解决方案3】:

        你能检查一下你的项目设置吗?

        我将你的代码复制到我的一个项目中,它可以工作。

        从您显示的路径来看,您的代码似乎位于 bin 目录中 - 这是 eclipse 通常放置已编译的 .class 文件的位置。您的源文件应该位于src 目录中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-23
          相关资源
          最近更新 更多