1

我从 Byte Buddy 站点获取以下示例代码并将其粘贴到 Eclipse 中:

Class<?> type = new ByteBuddy()
      .subclass(Object.class)
      .make()
      .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
      .getLoaded();

getClass()语法检查器出错并显示以下消息:

无法从 Object 类型对非静态方法 getClass() 进行静态引用。

我该如何解决这个问题?

4

2 回答 2

2

此代码是在静态方法中指定的 - 您没有包含它,但“无法进行静态引用”是一个赠品。

将您的代码移动到一个实例方法中,然后从那里调用它。如果您当前正在通过main方法执行此操作,请将其更改为以下内容。

public class ExampleClass {
    public static void main(String[] args) {
        // this method is static - see the key word in the signature
        new ExampleClass().execute();
    }

    public void execute() {
        // this is an instance method
        Class<?> type = new ByteBuddy()
                              .subclass(Object.class)
                              .make()
                              .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
                              .getLoaded();
    }
}

或者,您可以将获取类的方式从getClass()更改为静态引用ExampleClass.class

于 2015-07-31T11:58:33.173 回答
0

我假设您将代码复制到静态 main 方法中。

由于该方法是静态的,因此您不能使用实例方法getClass()

而是像这样访问类加载器:

YourClassName.class.getClassLoader()

您可以在Java Language Specification中找到有关 Class Literals 的更多信息。

于 2015-07-31T11:57:03.197 回答