Можно ли вызвать несколько методов из анонимного класса? - PullRequest
0 голосов
/ 20 апреля 2019

Я хочу знать, возможно ли это каким-то образом, пожалуйста, Java 7 или 8

public class App{
    public static void main(String[] args) {
        new Thread(){
            public void run(){
                //Something
            }
        }.start().setName("Something") //Here!!
        //Something
    }
}

Ответы [ 3 ]

0 голосов
/ 20 апреля 2019

Нет, это невозможно, поскольку ни start(), ни setName() не возвращает поток.Созданный анонимный класс является подклассом Thread, поэтому его можно присвоить такой переменной:

Thread thread = new Thread {
    // something
};
thread.setName(...);
thread.setPriority(...);
thread.start();

или с использованием функциональной записи:

Thread thread = new Thread( () -> { ... } );
thread.setName(...);
thread.setPriority(...);
thread.start();

и мой предпочтительный (дополнительный класс не создается), используя ссылку на метод:

    Thread thread = new Thread(this::runInThread);
    thread.setName(...);
    thread.setPriority(...);
    thread.start();
    ...
}

private void runInThread() {
    // something to run in thread
}

добавлено setPriority() только для дополнительных вызовов

0 голосов
/ 20 апреля 2019

Если вы просто хотите объявить, назвать и запустить поток в одном выражении, просто используйте конструктор, который задает имя потока:

new Thread("Something") { ... }.start();
0 голосов
/ 20 апреля 2019

В вашем примере это невозможно, так как start() возвращает void.Тем не менее, зависит от реализации метода, который вы вызываете.В некоторых случаях мы проектируем метод (Builder pattern/ Fluent), обычно возвращает this, в этом случае возможно method chaining.Для вашего примера вы можете сделать это, как показано ниже.

Thread t = new Thread() {
    public void run() {
    }
};
t.setName("Something");
t.start();
...