如何编写一个简单地接受任何类型参数的Java函数,打印并返回它?
在Scheme中我习惯编写以下宏:
(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;
}
}
可爱的方案我为你感到悲伤......
答案 0 :(得分:5)
您将您的类实现为其他内部类。在这种情况下,您必须将班级标记为static
。
但是,真正的答案是:你根本不需要这个类,你只需要方法:
public static <T> T dump(T arg) { ... }
作为旁注,我在我的代码中使用相同的技巧,但我总是包含一个msg参数,以便于转储读取/ grepping:
public static <T> T dump(String msg, T arg) { ... }