java - 如何获取构造函数中带有泛型参数的类的构造函数

标签 java

问题:在类C中获取A的子类(如下所示的类H)的参数化构造函数引用。

Class A<T extends B> {
  public A(T objectT, D objectD, E objectE, F objectF) {

  }

  public T aMethodWithTAsReturnType();
}

Class B { }

Class C<T extends A<?>> {
  private Constructor<?> classAConstructor;
  public C(Class<T> classA) {
     classAConstructor=classA.getConstructor(B.class, D.class,E.class,F.class)
  }
}

Class H extends A<X> {
  public H(X objectX, D objectD, E objectE, F objectF) {}
}

Class X extends B {}

new C(new H(objectX,objectD,objectE,objectF));

上面的代码配置会在创建新的 C 类对象时导致 NoSuchMethodException,因为它找不到 A 类的构造函数

我现在尝试使用:

Method methodInA = classA.getMethod('aMethodWithTAsReturnType')
Class<?> TClassInA = methodInA.getReturnType();

作为 classA.getConstructor 行中 B.class 的替代品,因为我猜测这就是这里的问题,因为类 B 是 T 的父类(super class)型(在类 A 中)。

但是...当我使用 methodInA.getReturnType() 时,它返回 B.class!而不是扩展 B 的类。然后我找到了一个 getGenericReturnType() 方法,但它返回一个 Type 对象。

最佳答案

这对我有用:

public class G {
    static class A<T extends B> {
        A(T objectT, D objectD, E objectE, F objectF) { }
    }

    static class B { }

    static class C<XT extends B, T extends A<XT>> {
        private Constructor<?> classAConstructor;
        public C(Class<T> classA, Class<XT> classX) throws SecurityException, 
            NoSuchMethodException {
            classAConstructor = classA.getConstructor(classX, D.class,
                    E.class, F.class);
        }
    }
    static class D { }
    static class E { }
    static class F { }

    static class X extends B { }

    public static class H extends A<X> {
        public H(X objectT, D objectD, E objectE, F objectF) {
            super(objectT, objectD, objectE, objectF);
        }
    }

    public static void main(String[] args) throws SecurityException,
        NoSuchMethodException {
        new C<X, H>(H.class, X.class);
    }
}

更新: 您需要找到某种方法将 A 的参数化传递到 C 中。 我已经更新了您的代码以说明这样做的一种方法。

关于java - 如何获取构造函数中带有泛型参数的类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360800/

相关文章:

java - 在具有不同 Controller 的多个端口上运行 Spring Boot 应用程序

java - 从 Pdf 标题重命名 Pdf

java - ArrayBlockingQueue v/s BlockingBuffer.decorate(new BoundedFifoBuffer()

java - 在 Google AppEngine 数据存储中使用 500 多个字符字符串

java - 如何比较 Java 中的时间?

java.io.IOException : Error writing to server 异常

java - 从 html 字符串中删除字体颜色

java - 有没有办法在没有 ANT 的情况下仅在 .java 文件上运行 Checkstyle?

java - 将任意数字转换为一位数

java - 多次截图程序