java - ByteBuddy,在子类化参数化类时是否可以将类分配给泛型

标签 java byte-buddy

如果我有以下内容:

public abstract class Parameterized<T> {
  protected abstract String foo();
}

是否可以这样做:

DynamicType.Unloaded<Parameterized<MyClass>> subclassed = new ByteBuddy()
    .subclass(Parameterized.class)... //assign MyClass.java to T?

或者是否只能这样做:

DynamicType.Unloaded<Parameterized> subclassed = new ByteBuddy()
    .subclass(Parameterized.class).make();

最佳答案

只删除实例的类型信息;不在引用文献上。根据用例,使用正确的参数进行实际扩展(而不是扩展原始类型)可能会带来一些好处。

这就是您使用 ByteBuddy 的方式:

Class<?> subclass = new ByteBuddy()
  .subclass(TypeDescription.Generic.Builder.parameterizedType(Parameterized.class, MyClass.class).build())
  .make()
  .load(Parameterized.class.getClassLoader())
  .getLoaded();

在运行时使用/提取类型参数的一种方法是:

Paramerized<MyClass> instance = (Paramerized<MyClass>) subclass.getConstructor().newInstance();
if (instance.getClass() instanceof ParameterizedType) {
    ParameterizedType para = (ParameterizedType) instance.getClass().getGenericSuperclass();
    System.out.println(para.getActualTypeArguments()[0]);
}

关于java - ByteBuddy,在子类化参数化类时是否可以将类分配给泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44053211/

相关文章:

java - 如何跟踪列在数据库表上的位置

java - 当缓冲区已满时,DataOutputStream 会自动刷新吗?

java - android数组空指针异常

java - Rebase方法拦截,完全重写方法

java - 使用 ByteBuddy 创建步骤生成器

java - 出现 ArrayIndexOutOfBoundsException : 97 的运行时错误

java - 在 Grails 中使用 Java 类(具有 Spring/Hibernate 依赖项的整个模块)

byte-buddy - 用于构建上限通配符的 ByteBuddy 配方是什么?

hibernate - ByteBuddy 在 Hibernate 中的性能

java - 如何为 java.nio.ByteBuffer 实例创建一个 java 代理对象?