如何解决"非静态类T不能从静态上下文引用"?

cev*_*ing 3 java

如何编写一个简单地接受任何类型参数的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)

可爱的计划我为你感到悲伤......

Mar*_*nik 5

您将其中的类实现为其他内部类.在这种情况下,您必须将该类标记为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)