18

人々がこれをどのように解決するのか、私はただ興味があります。いつも同じタイプのコードを書いていることがよくあります。例えば:

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

「この行を変更してください」という行を変更し続けてから、スレッドを開始します。この変更は、1 行または数行の場合があります。このコードを圧縮するにはどうすればよいですか?

4

7 に答える 7

21

Cプリプロセッサを介してJavaファイルを実行できると思います...

于 2009-11-13T22:19:55.153 に答える
18

テンプレート パターンを使用して、共通コードを含む基本クラスを作成できます。例えば:

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でそれらを設定するための情報を見つけることができます.Useful Eclipse Java Code Templatesで便利なもののリストを見つけることができます.

于 2009-11-13T22:42:33.117 に答える
8

1 つの手法は、コードを匿名の内部クラスに配置し、それを残りの処理を行うメソッドに渡すことです。

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または他のクラスを使用することはお勧めできません。

于 2009-11-13T22:18:37.680 に答える
7

Java アノテーションを使用して定型コードを生成することができます。独自の注釈プロセッサを作成することは難しくありません。

于 2009-11-13T22:20:52.943 に答える
1

多くのプロジェクトで使用しているものであれば、IDEで設定します。たとえば、私はEclipseを使用しており、[ウィンドウ]->[設定]->[Java]->[エディター]->[テンプレート]に移動すると、独自のテンプレートをセットアップして、オートコンプリートできます。たとえば、私は常にsysoutと入力し始めてから、Tabキーを押します。そして、eclipseには、System.out.println()に置き換えるための組み込みのテンプレートがあります。

Eclipseには多くのビルド済みテンプレートがあるので、構文の例としてそれらを見ることができます。それが使用するIDEである場合、そうでない場合は他のIDEに類似したものがある可能性があります。

これは非常に便利で、自分でたくさん書いているボイラーコード用に作成できます。

于 2009-11-14T00:55:39.343 に答える
0

いいえ、マクロはありません。この場合、最も近い方法は、新しい Runnable インスタンスを作成し、それを独自に作成した関数または ExecutorService に渡すことです。これにより、タスクが開始されます。

Java では、主に関数へのポインターを渡すことができないため、この「ボイラープレート」コードを取り除く良い方法はありません。すべてがオブジェクトである必要があります。

于 2009-11-13T22:19:30.230 に答える
0

Thread の場合、実装する任意のオブジェクトRunnableをそのコンストラクターに渡すことができます。

したがって、解決策は独自のクラスを作成することです。

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

残念ながら、run は静的ではないため、最初に MyClass のインスタンスを作成する必要があります。

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

MyClass とコンストラクターに変数を追加して、引数を渡すこともできます。

編集: start メソッド以上のものが必要な場合は、Threadそれ自体をサブクラス化することもできます。

于 2009-11-13T22:27:39.327 に答える