为什么我不能用Java调用这个函数?

时间:2010-02-16 00:52:27

标签: java

import static com.example.hello.Tools.*;
public class MAINCLASS{
   public void run(){
      runtools(); // this works
   }
   private class People{
      public void runpeople(){
          runtools(); // this does not work.
      }
   } 
}

内部工具......

编辑:当我在People.runpeople()中滚动runtools()时......我明白了:

方法runtools()未定义类型MAINCLASS.People

public class Tools {
    public void runtools() {
     ....
    }
}

有谁知道为什么?

5 个答案:

答案 0 :(得分:7)

您需要声明Tools#runtools() static才能import static

public class Tools {
    public static void runtools() {
        // ...
    }
}

要么是,要么实例化Tools,然后在其上调用runtools()

new Tools().runtools();

答案 1 :(得分:1)

在提及您最近询问的与此同一课程有关的另一个问题及其问题时:Why can't I put my functions in another class?

采取cletus建议从导入调用中删除'static'是否也解决了这个问题? “静态”位仍在那里。

答案 2 :(得分:1)

runtools()的调用不应该适用于这两种情况,因为runtools不是静态方法 - 它需要调用Tools对象的实例。

答案 3 :(得分:1)

当您发布它时,该代码不应该(根本没有),因为您只导入Tools的静态成员,而runtools()是一个实例方法。如果你要使runtools()静态,那么两个runtools()的调用都应该有效,因为它在两种情况下都在范围内。

答案 4 :(得分:1)

这不编译。您无法使用static关键字导入包。导入需要是一种特定的方法。

所以你需要写这样的东西来编译,然后工作:

import static com.example.hello.Tools.someMethod;

此外,您导入的方法必须是静态的。

这使您可以调用静态方法,就像在此类的范围内声明的那样:

someMethod();