Как передать значение в функцию run () java runnable из метода main - PullRequest
0 голосов
/ 11 декабря 2018

Здесь пытается передать id в run() функцию, но она печатает Cannot resolve symbol id

public class main2 implements Runnable {

    public main2(int id) {
        //
    }

    public void run() {
        System.out.println("ID in the run: " + id); // Cannot resolve symbol id
    }

    public static void main(String args[]) throws InterruptedException {
        int id = 5;
        System.out.println("ID in the main: " + id);
        Thread[] threads = new Thread[1];
        threads[0] = new Thread(new main2(id));
        threads[0].start();
    }
}

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вы можете иметь поле экземпляра в вашем main2 классе:

public class main2 implements Runnable {
    private int id;
    public main2(int id) {
        this.id = id;
    }

    @Override
    public void run() {
        System.out.println("ID in the run: " + this.id);
    }

    ...

Но так как все это в одном классе, вы можете просто использовать лямбда-выражение, которое имеет доступ к локальной переменнойметод main, который также устраняет необходимость в экземпляре main2:

public static void main(String args[]) throws InterruptedException {
    int id = 5;
    System.out.println("ID in the main: " + id);
    Thread[] threads = new Thread[1];
    threads[0] = new Thread(() -> System.out.println("ID in the run: " + id));
    threads[0].start();
}
0 голосов
/ 11 декабря 2018

Поскольку в вашем "главном" классе есть метод run (), вы можете иметь в нем переменную поля, а конструктору установить его значение.Вы уже используете конструктор, чтобы получить значение.Вам просто нужно создать новую переменную поля и установить ее значение.

public class main2 implements Runnable {
int id;
public main2(int id) {
    this.id = id;
}

public void run() {
    System.out.println("ID in the run: "+id); // Cannot resolve symbol id
}

public static void main(String args[]) throws InterruptedException {
    int id = 5;
    System.out.println("ID in the main: "+id);
    Thread[] threads = new Thread [1];
    threads[0] = new Thread(new main2(id));
    threads[0].start();
}
0 голосов
/ 11 декабря 2018

Просто установите его как переменную вашего класса.Тогда у вас есть доступ к нему:

private int id;    

public class main2 implements Runnable {
    public main2(int id) {
        this.id = id;
    }

public void run() {
    System.out.println("ID in the run: "+id); // Cannot resolve symbol id
}
...