Подтвердить что ты не робот

Java: есть ли поддержка макросов?

Мне просто интересно, как люди решают это. Я часто пишу один и тот же тип кода все время. Например:

new Thread() {
   //...
   //...
   //...
   //Change this line
   //...
   //...
}.start();

Я продолжаю менять строку, где говорится "Измените эту строку", а затем начните поток. Это изменение может быть одной строкой или несколькими строками. Как мне сжать этот код?

4b9b3361

Ответ 1

Ну, я думаю, вы можете запускать ваши java файлы через препроцессор C...

Ответ 2

Вы можете использовать шаблон шаблона для создания базового класса, который содержит общий код. Например:

public abstract class ThreadTemplate extends Thread
{

    public void run() {
        //reusable stuff
        doInThread();
        //more resusable stuff
    }

    abstract void doInThread();

}

Тогда запуск потока с шаблоном кода так же просто, как:

new ThreadTemplate{
   void doInThread() {
       // do something
   }
}.start();

Кроме того, менее элегантное решение, позволяющее сберечь себя от типизации, - это использовать функцию шаблонов вашего ide. Вы можете найти информацию о настройке их в Eclipse здесь, и вы можете найти список полезных в Полезные шаблоны кода Java Eclipse

Ответ 3

Один из методов заключается в том, чтобы поместить код в анонимный внутренний класс и передать его методу, который сделает все остальное.

interface SomeInterface {
    void fn();
}

    executeTask(new SomeInterface {
        public void fn() {
            // Change this line.
        }
    });

private void executeTask(final SomeInterface thing) {
     Thread thread = new Thread(new Runnable() { public void run() {
        //...
        //...
        //...
        thing.fn();
        //...
        //...
     }});
     thread.start();
}

Как правило, не рекомендуется распространять Thread или другие классы, если это не нужно.

Ответ 4

Можно использовать аннотации Java для генерации кода шаблона. Написание собственного процессора комментариев не сложно.

Ответ 5

Если это то, что вы используете во многих проектах, я бы установил это в вашей среде IDE. Например, я использую затмение, и если вы идете в Window- > Preferences- > Java- > Editor- > Шаблоны вы можете настроить свои собственные шаблоны, а затем автоматически их завершить. Например, я всегда начинаю вводить sysout, а затем нажимаю вкладку, а eclipse имеет встроенный шаблон, который заменяет System.out.println();

В eclipse есть много готовых шаблонов, поэтому вы можете посмотреть примеры для синтаксиса, если это IDE, которую вы используете, если не может быть что-то похожее в других IDE

Это очень полезно, и вы можете создать его для любого кода котла, который вы написали много.

Ответ 6

Нет, нет макросов. В этом случае наиболее близким вы можете создать новый экземпляр Runnable и передать его либо функции вашего собственного создания, либо ExecutorService, которая запустит вашу задачу.

С Java нет хорошего способа избавиться от этого "шаблонного" кода, главным образом потому, что вы не можете передавать указатели на функции; все должно быть объектом.

Ответ 7

В случае Thread вы можете передать любой объект, который реализует Runnable его конструктору.

Итак, решение заключается в создании собственного класса:

public class MyClass implements Runnable {
    void run() {
        // change this line
    }
}

К сожалению, запуск не является статичным, поэтому сначала нужно создать экземпляр MyClass:

new Thread(new MyClass()).start();

Вы также можете добавить переменные в MyClass и конструктор, чтобы вы могли передавать ему аргументы.

Изменить: если вам нужно больше, чем просто метод start, вы также можете подклассы Thread.