java - 在动态调用上链接方法

标签 java spring-boot

假设我在帖子实体上有一个用户列表

private List<User> users = new ArrayList<>();

我可以使用清除它

post.getUsers().clear();

并且可以添加到它

post.getUsers().addAll(Something);

如果使用动态调用函数getUsers,我该如何做同样的事情?我试过了

post.getClass().getMethod("getUsers").invoke(post).getClass().getMethod("clear").invoke(new ArrayList<>());

我也尝试过

ArrayList.class.getMethod("clear").invoke(post);

但是我得到了

WARN  o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [java.lang.IllegalArgumentException: object is not an instance of declaring class]

知道我该怎么做吗?

请注意,这正在起作用

post.getClass().getMethod("getUsers").invoke(post); //get the users

我只是不知道如何链接clear方法或addAll。

最佳答案

Method.invoke返回一个 Object 并且 Object 类没有 clear() 方法,因此您需要将返回的对象转换为 列表

Post post = new Post();
Method m = post.getClass().getMethod("getUsers");
List<User> users = (List<User>)m.invoke(post);
users.clear();

如果你想把它写在一行中,这很丑陋,但可以做到:

((List<User>)(post.getClass().getMethod("getUsers").invoke(post))).clear();

这也有效:

List.class.cast(post.getClass().getMethod("getUsers").invoke(post)).clear();

关于java - 在动态调用上链接方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59209426/

相关文章:

javascript - 将 java 对象返回给 javascript 时出错

java - 定期报告特定指标

java - Spring @Async 不允许使用 Autowiring 的 bean

mysql - 返回更多属性作为响应(来自数据库模型外部)

java - 根据不同的行分隔符分割文本文件

java - 在 DBCursor.hasNext() 处获取 "not talking to master and retries used up"异常

java - 如何从另一个方法访问本地内部类的字段?

java - 在jtable的所有行中导入mysql数据库的最后一行(Java Swing)

spring-boot - 实体类名转换为带下划线的SQL表名

java - 组件扫描时如何避免Spring中不需要的bean?