web-dev-qa-db-ja.com

非静的フィールドは静的コンテキストから参照できません-Mainメソッド

Spring-Bootアプリケーションに2つのクラスがあります。

-タスク

-ランナー

ランナークラスには、Tasksクラスからメソッドを呼び出そうとするmainメソッドが含まれています。

ランナー:

@Component
public class Runner {

    Tasks tasks;    

    @Autowired
    public void setTasks(Tasks tasks){
        this.tasks=tasks;
    }

    public static void main(String[] args){

    //error being caused by below line
    tasks.createTaskList();

    }

タスククラス:

@Service
public class Tasks {

    public void createTaskList() {

    //my code
    }


    //other methods 


}

ランナーで、TasksクラスのcreateTaskList()メソッドを呼び出そうとすると、次のエラーが発生します。

Non static field 'tasks' cannot be referenced from a static context

どうすればこれを解決できますか?

7
java123999

Mainメソッドはstaticです。これは、オブジェクトではなくクラスに属していることを意味します。そのため、静的コンテキストはインスタンス変数を参照できません。これは、Runnerのインスタンスがあったとしても、それがどのインスタンスを使用するかがわからないためです。

要するに、解決策は、TasksオブジェクトをstaticクラスにRunnerにすることです。

4
Zircon