4

任意の型の引数を取り、それを出力して返すJava関数を作成するにはどうすればよいですか?

スキームでは、次のマクロを作成するために使用されます。

(define-syntax dump
  (syntax-rules ()
    ((_ arg) (let ((value arg))
               (display 'arg)
               (display " -> ")
               (display value)
               (newline)
               arg))))

これを呼び出すと(+ 1 (dump (* 2 3)))、7が返され、が出力されます(* 2 3) -> 6

私はJavaで似たようなことを試しました:

public class Debug<T>
{
    public static T dump (T arg)
    {
        System.err.println (arg);
        return arg;
    }
}

しかし、エラーが発生します:

non-static class T cannot be referenced from a static context

これを解決する方法は?

編集 ありがとう私はそれを手に入れました:

import java.util.Arrays;

public class Debug
{
    public static <T> T dump (T arg)
    {
        System.err.println(arg instanceof Object[] ? 
                           Arrays.toString((Object[])arg) : arg);
        return arg;
    }
}

素敵なスキーム私はあなたのために悲しみます...

4

1 に答える 1

6

クラスを他のクラスの内部クラスとして実装しました。その場合、クラスをとしてマークする必要がありますstatic

しかし、本当の答えは次のとおりです。クラスはまったく必要ありません。必要なのはメソッドだけです。

public static <T> T dump(T arg) { ... }

ちなみに、私はコードで同じトリックを使用していますが、ダンプの読み取り/greppingを簡単にするために常にmsg引数を含めています。

public static <T> T dump(String msg, T arg) { ... }
于 2013-03-14T10:14:07.600 に答える