当前位置: 首页 > 知识库问答 >
问题:

有没有办法通过反射来识别Java 16记录的“主要”构造者?

赵正雅
2023-03-14

假设我有这样的记录(或任何其他记录):

record X(int i, int j) {
    X(int i) {
        this(i, 0);
    }
    X() {
        this(0, 0);
    }
    X(String i, String j) {
        this(Integer.parseInt(i), Integer.parseInt(j));
    }
}

有没有办法找到该记录的规范构造函数,即在RecordHeader中隐式声明的构造函数?

共有1个答案

姚阳德
2023-03-14

这似乎很管用,虽然有点蹩脚:

List<?> componentTypes = Stream
    .of(X.class.getRecordComponents())
    .map(RecordComponent::getType)
    .toList();

for (Constructor<?> c : X.class.getDeclaredConstructors())
    if (Arrays.asList(c.getParameterTypes()).equals(componentTypes))
        System.out.println(c);

印刷

Test$1X(int,int)

我仍然愿意接受更好的建议。

 类似资料:
  • 为了能够 动态获取对象构造方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getConstructors() getConstructor(Class<?>…parameterTypes) getDeclaredConstructors() getDeclaredConstructor(Class<?>...parameterTypes) 如果是访问指定的构造方法,需要根据该构

  • 问题内容: 我在代码中有很多地方可以处理Alamofire请求/响应。 由于某些间歇性问题(最常见的是不稳定的网络),每个请求都可能失败。 我希望能够在重试前重试请求3次。 直接的方法是拥有类似的东西 但是,出于多种原因,我不喜欢这种方法。最明显的是,我将需要为每种请求类型实现这样的代码(并且我有15种这样的代码)。 我很想知道是否有办法做类似的事情(变化很小且非侵入性) 问题答案: 通过Swif

  • 问题内容: 我正在使用Spring 3.0.5,并为类成员尽可能多地使用@Autowire注释。我需要自动装配的bean之一需要其构造函数的参数。我浏览了Spring文档,但似乎找不到任何有关如何注释构造函数参数的参考。 在XML中,我可以将其用作bean定义的一部分。@Autowire注释是否有类似的机制? 例如: 在此示例中,如何在MyBeanService中使用@Autowire批注指定“

  • 问题内容: 在我的项目中,我们使用了许多批注,这些批注在javadoc API文档中非常有用。 有谁知道在生成的javadocs中包含注释的简单方法?我不想编写自己的javadoc插件。有什么解决办法吗? 问题答案: 参见java.lang.annotation.Documented 表示默认情况下,javadoc和类似工具将记录带有类型的注释。此类型应用于注释其注释会影响其客户端对已注释元素的使

  • Spring HATEOAS提供了方便的ControllerLinkBuilder来创建指向控制器方法的链接,这些方法将作为HREF添加到返回给客户端的JSON/XML中。例如: ... 可能会生成类似以下内容的JSON: 然而... 我倾向于通过反向代理访问我的服务。我想大多数人可能会这样做。这让我可以在不同的端口上运行多个服务,但让我可以通过相同的基本URL访问它们。不幸的是,通过代理访问意味

  • 我有一个spring实体类,如下所示。 具有相应的getter和setter。 我已经为这个表访问编写了一个Spring Data JPA存储库,如下所示。 但我想使用value读取所有记录。但不是主键。所以我想知道如何实现这一点。 有人能帮我一下吗。