Java:是否支持宏?

Leg*_*end 18 java macros boilerplate

我只是好奇人们如何解决这个问题.我经常写相同类型的代码.例如:

new Thread() {
   //...
   //...
   //...
   //Change this line
   //...
   //...
}.start();
Run Code Online (Sandbox Code Playgroud)

我不断更改"更改此行"的行,然后启动一个主题.此更改可以是一行或几行.我将如何压缩此代码?

gnu*_*nud 21

好吧,我想你可以通过C预处理器运行你的java文件......

  • 这不是我听过的最疯狂的事情,但它近在咫尺! (13认同)
  • @StephaneRolland这个解决方案可能给世界带来混乱.+1 (3认同)
  • 呵呵,我喜欢它. (2认同)
  • @OutlawProgrammer我在一家公司工作,在那里用C/C++ Java代码转换,生成疯狂的事情......而这就是其中之一. (2认同)

Jas*_*man 18

您可以使用模板模式创建包含公共代码的基类.例如:

public abstract class ThreadTemplate extends Thread
{

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

    abstract void doInThread();

}
Run Code Online (Sandbox Code Playgroud)

然后使用样板代码启动一个线程就像这样简单:

new ThreadTemplate{
   void doInThread() {
       // do something
   }
}.start();
Run Code Online (Sandbox Code Playgroud)

此外,一个不太优雅的解决方案,以节省自己的一些打字是使用您的ide的模板功能.您可以在此处找到有关在Eclipse中设置它们的一些信息,您可以在Useful Eclipse Java代码模板中找到有用的列表


Tom*_*ine 8

一种技术是将代码放在匿名内部类中,并将其传递给执行其余操作的方法.

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();
}
Run Code Online (Sandbox Code Playgroud)

一般来说,Thread如果没有必要,扩展或其他类不是一个好主意.


djn*_*jna 7

可以使用Java注释生成样板代码.编写自己的注释处理器并不难.

  • 如果您知道在哪里查看并不难,但可能已经意识到包含一两个参考链接. (4认同)