gpt4 book ai didi

java - 如何使用通用参数正确查询构造函数

转载 作者:行者123 更新时间:2023-12-02 12:51:47 25 4
gpt4 key购买 nike

我需要在运行时使用反射而不是直接访问来获取类的构造函数。对于简单类型,这是微不足道的:

public class MyType {
public MyType(String a, Integer b, Long c) {}
}

Constructor constructor = MyType.class.getConstructor(String.class, Integer.class, Long.class);

但是如果该类使用泛型作为其参数的一部分,则不清楚我应该输入什么:

public class MyType {
public MyType(Set<String> a, Integer b, List<Long> c) {}
}

Constructor constructor = MyType.class.getConstructor(Set<String>.class /*Doesn't compile*/, Integer.class, List<Long>.class /*doesn't compile*/);

我可以编写类似于 MyType.class.getConstructor(Set.class, Integer.class, List.class); 的内容,但尚不清楚这是否会实现我想要的行为。编写这种代码的正确方法是什么?

最佳答案

通用信息不是 getConstructor 方法使用的信息的一部分。您表示的调用 (Set.class, ...) 是正确的,因为它类似于运行时可用的信息。

正如 Andy Turner 所指出的,您只能拥有一个这种类型的构造函数 - 即使您尝试在源代码中为第二个构造函数使用不同的泛型参数。

如果您好奇,可以使用 javap 查看字节码:

$ javap -private -c MyType
Compiled from "MyType.java"
public class MyType {
public MyType(java.lang.String, java.lang.Integer, java.lang.Long);
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
}

关于java - 如何使用通用参数正确查询构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44576297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com