java - java中如何调用带有Object参数而不是实际参数类型的方法?

标签 java

大家好,我只是想知道我们如何调用一个传递对象类型作为参数而不是实际参数的方法。假设我有一个类

public class Helper {

    public void showEntity(Message msg)
    {
        System.out.println(msg.sessionID);
    }

}

现在我想调用 showEntity 方法,但我只有有关参数类型名称的信息,即 Message,自然我将使用 Class.forName().getClass 创建此类的对象,然后创建一个新实例等等。

Class<?> clazz=Class.forName(nameOfParameterType).getClass();
Object obj=clazz.newInstance();

现在的问题是,我如何通过传入创建的对象类型而不是实际的消息类型来实际调用 showEntity 方法,因为调用 showEntity(obj) 会给出错误,并且我不想使用反射来调用这个方法,我想通过

做到这一点
Helper helper=new Helper();
helper.showEntity(obj) //gives error 

最佳答案

简单的答案是:通过强制转换,例如 (Message) thatObjThatIsAMessage。或者,通过使用反射来调用该方法(这当然只会在这里增加疯狂)。

真正的答案是:你走入了一个非常错误的兔子洞。

您不必调用方法并传递任意参数,因为您可以这样做。您这样做是因为您需要

如果您不知道要传递给方法的参数,您为什么认为应该首先调用该方法?这就像“我不知道调用 911(或任何紧急号码)时会发生什么,但我面前有一部电话,所以我现在就这样做”。

当然:您随后考虑使用反射这一事实只会增加这一点。反射(reflection)和做事 byName() 绝对是你别无选择时才会做的事情!例如,谁说您的 Message 类有一个无参构造函数,这样 newInstance() 就能真正起作用?!如果它今天有一个,但拥有它的人明天就把它删除了怎么办?您只会在运行时了解到这一点!这并不是要贬低你,而是说实话:一个不知道如何转换对象的人,这个人缺乏基本的 Java 知识。反射(reflection)完全超出了你在那个技能水平上应该处理的事情。

长话短说:立即停下来,确定您真正拥有什么以及想要做什么。我向你保证:它不会调用一个你没有合适参数的方法!

关于java - java中如何调用带有Object参数而不是实际参数类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54604275/

相关文章:

java - 更改 GUI 上的颜色

java - 如何在 spring mvc 中动态切换语言?

java - 在写入新内容之前清除文件(Java、Android)

java - 如何将用户信息添加到 Sentry 上下文?

java - 无法在 OpenGl/Android 中使用 VBO

java - 如何在 shell 脚本中运行 Picard(生物信息学)工具时消除 Java 异常错误?

java - 当 session 被销毁时,Tomcat Session 中保存的值是否应该设置为 null?

java - 用于匹配 mp3 URL 的正则表达式

java - 如何将多条数据保存为一个包

java - 在jsp中打印 session 属性