使用this.getClass()。newInstance()的通用主方法

时间:2014-12-13 11:04:53

标签: java static this

好的,所以不要问为什么,但我尝试制作通用的public static void main()方法。我已经尝试过使用这两种方法;

public class Foo {
    public static void main(String[] args){
        try {
            this.getClass().newInstance().check();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void check() {
        System.out.println("Check succesful");
    }
}

我得到的错误是this"不能在静态环境中使用"
好的,所以我知道我不能在静态上下文中使用this,但我想知道的是如何在不使用Foo.check()

的情况下替换它

如果可能的话,我该怎么做?如果没有,我想知道原因。

5 个答案:

答案 0 :(得分:3)

查看How to call getClass() from a static method in Java?Getting the class name from a static method in Java之类的内容

interface Checkable {
    public void check();
}

public class Foo implements Checkable {
    public static void main(String[] args){
        try {
            Class currentClass = new Object() { }.getClass().getEnclosingClass();
            Checkable instance = (Checkable) currentClass.newInstance();
            instance.check();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void check() {
        System.out.println("Check succesful");
    }
}

可能会成功,但我不确定我是否应该推荐这样做......

答案 1 :(得分:2)

this是当前实例。静态方法中没有实例。请参阅I want to know the difference between static method and non-static method

请改为:

public class Foo {
  public static void main(String[] args) {
    new Foo().check();
  }

  public void check() {
    System.out.println("Check succesful");
  }
}

作为评论的答案(我似乎无法发表评论):否。唯一的另一种方法是将check()设为静态并调用Foo.check(),但你不想这样做。

答案 2 :(得分:1)

静态上下文中没有this;这正是静态的含义。您尝试的方法不起作用。您也许可以在命令行中提供您感兴趣的类的名称。

答案 3 :(得分:0)

因为,我知道在java实例变量中无法访问静态块util,你没有该类的对象,你想要访问哪个类的实例变量,这在java中是一个实例变量。所以你不能在任何静态块中访问这个变量,或者你需要对象引用。for further clarification check here

答案 4 :(得分:0)

为什么不尝试这个?

  public class Foo
 {
    public static void main(String[] args){
        try 
        {
            Foo obj = new Foo();
            //  this.getClass().newInstance().check();
             obj.check();
        }
        catch(Exception e) 
        {
            e.printStackTrace();
        }
    }

    public void check() 
    {
        System.out.println("Check succesful");
    }
}