4

如何编写一个简单地接受任何类型的参数、打印并返回它的 Java 函数?

在 Scheme 中,我习惯于编写以下宏:

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

调用它(+ 1 (dump (* 2 3)))会返回 7 和 print (* 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) { ... }

作为旁注,我在我的代码中使用了相同的技巧,但我总是包含一个 msg 参数以便于转储读取/grepping:

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