如何编写一个简单地接受任何类型参数的Java函数,打印并返回它?
在Scheme我用来编写以下宏:
(define-syntax dump
(syntax-rules ()
((_ arg) (let ((value arg))
(display 'arg)
(display " -> ")
(display value)
(newline)
arg))))
Run Code Online (Sandbox Code Playgroud)
调用它将(+ 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;
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
non-static class T cannot be referenced from a static context
Run Code Online (Sandbox Code Playgroud)
怎么解决这个?
编辑 谢谢我明白了:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
可爱的计划我为你感到悲伤......
您将其中的类实现为其他内部类.在这种情况下,您必须将该类标记为static.
但是,真正的答案是:你根本不需要这个类,你只需要方法:
public static <T> T dump(T arg) { ... }
Run Code Online (Sandbox Code Playgroud)
作为旁注,我在我的代码中使用相同的技巧,但我总是包含一个msg参数,以便更容易地进行转储读取/ grepping:
public static <T> T dump(String msg, T arg) { ... }
Run Code Online (Sandbox Code Playgroud)