Java:是否支持宏?

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

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

我不断更改“更改此行”的行,然后启动一个主题。 此更改可以是一行或几行。 我该如何压缩这段代码呢?

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

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

 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的模板function。 您可以在此处找到有关在Eclipse中设置它们的一些信息,您可以在Useful Eclipse Java代码模板中找到有用的列表

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

 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或其他类不是一个好主意。

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

如果它是你在许多项目中使用的东西,我会在你的IDE中设置它。 例如,我使用eclipse,如果你去Window-> Preferences-> Java-> Editor-> Templates,你可以设置自己的模板,然后让它们自动完成。 例如,我总是开始键入sysout,然后按Tab键,eclipse有一个内置模板,用System.out.println()替换它;

eclipse中有许多预先构建的模板,所以你可以查看那些关于语法的例子,如果那是你使用的IDE,如果没有,可能在其他IDE中有类似的东西

这非常有用,您可以为自己编写的任何锅炉代码创建一个。

不,没有宏。 对于这种情况,您可以获得的最接近的是创建新的Runnable实例并将其传递给您自己创建的函数或ExecutorService,它将为您启动任务。

使用Java,没有好办法摆脱这种“样板”代码,主要是因为你无法将指针传递给函数; 一切都需要成为一个对象。

对于Thread,您可以将实现Runnable任何对象传递给其构造函数。

所以,解决方案是创建自己的类:

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

不幸的是,run不是静态的,所以你必须首先创建一个MyClass实例:

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

您还可以向MyClass和构造函数添加变量,以便可以向其传递参数。

编辑:如果您需要的不仅仅是start方法,还可以将Thread本身子类化。