gpt4 book ai didi

java - 从类中获取方法然后通过对象调用

转载 作者:行者123 更新时间:2023-11-30 11:27:33 24 4
gpt4 key购买 nike

为了通过反射调用对象的方法,我知道的唯一方法是这样的:

Object o = ...;
Method m = o.getClass().getMethod("methodName",null);
Object x = m.invoke(o,null);

为什么Java在Object类中没有getMethods方法? (以及 getSuperClass、getFields 等)。

所以我们可以做类似的事情:

Object x = o.invoke("methodName",null);

为什么不呢?我认为这是出于性能原因。

(也作为旁注。在英语中,说“主体调用对象”更有意义,所以在编程术语中,对象调用方法。但是对于 Java,我们得到“对象上的方法调用”。很高兴我今天可能会让你感到困惑。)

最佳答案

我相信原因是 java.lang.Object 应该作为类层次结构的根,它上面的任何方法都应该属于它的实例对象而不是对象的概念。

将反射实用程序方法添加到 Object 会破坏它。您可以选择调用 o.myMethod()o.invoke("myMethod", null),这将引入一种 Java 编程风格,即不是编译安全的,因为没有编译时保证“myMethod”存在于后者中。这将使开发人员很容易摆脱类型安全并一直使用 .invoke 而无需考虑适当的面向对象设计。

通过强制开发人员显式请求 Class 的实例,我们保持了反射 API 和“具体”Java 之间的这种分离。因此,虽然有时会很痛苦,但鼓励开发人员正确编码是件好事。另外,这意味着对象的 OOP 概念由 java.lang.Object 表示,类的概念由 java.lang.Class 表示,即很好、明确的责任区分。

关于java - 从类中获取方法然后通过对象调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19283413/

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