我很好奇人们如何解决这个问题。我经常写相同类型的代码。例如:
new Thread() {
//...
//...
//...
//Change this line
//...
//...
}.start();
我不断更改“更改此行”的行,然后启动一个帖子。此更改可以是一行或几行。我该如何压缩这段代码?
答案 0 :(得分:21)
好吧,我想你可以通过C预处理器运行你的java文件......
答案 1 :(得分:18)
您可以使用template pattern创建包含公共代码的基类。例如:
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 here中找到有关设置它们的一些信息,您可以在Useful Eclipse Java Code Templates找到有用的列表
答案 2 :(得分: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();
}
一般来说,如果没有必要,扩展Thread
或其他类不是一个好主意。
答案 3 :(得分:7)
可以使用Java注释生成样板代码。编写自己的注释处理器并不难。
答案 4 :(得分:1)
如果它是你在许多项目中使用的东西,我会在你的IDE中设置它。例如,我使用eclipse,如果你去 Window-> Preferences-> Java-> Editor->模板,您可以设置自己的模板,然后让它们自动完成。例如,我总是开始键入sysout,然后按Tab键,eclipse有一个内置模板,用System.out.println()替换它;
eclipse中有许多预先构建的模板,所以你可以查看那些关于语法的例子,如果那是你使用的IDE,如果没有,那么在其他IDE中可能会有类似的东西
这非常有用,您可以为自己编写的任何锅炉代码创建一个。
答案 5 :(得分:0)
不,没有宏。对于这种情况,最接近的是创建新的Runnable实例并将其传递给您自己创建的函数或ExecutorService,它将为您启动任务。
使用Java,没有好办法摆脱这种“样板”代码,主要是因为你无法将指针传递给函数;一切都需要成为一个对象。
答案 6 :(得分:0)