【问题标题】:Java: Several possible types for a variable inside of a loopJava:循环内变量的几种可能类型
【发布时间】:2023-04-06 06:05:01
【问题描述】:

我必须解决一个工作问题,由于我对 java 不是很流利,所以我被困住了。

为了简短起见,我有一个循环通过Map<String, String>,其中的值定义了循环内的变量类型的名称。我试图以多种方式解决问题;我使用了反射和一些泛型类,但问题总是相同的:程序无法访问该生成对象的方法,因为我无法确定它的类型。当对象被调用时,我必须接收一个ArrayList<String> 并将其附加到项目主类中定义的那个(顺便说一句:eclipse 没有显示任何错误,我得到一个运行时异常)。

所以问题是:我如何能够从循环内部的字符串(我假设使用反射)分配具有动态类型的变量,并从存储在其中的对象访问方法?

【问题讨论】:

  • 你运行的是什么版本的JDK?
  • Class.forName().newInstance() + Class.forName().getMethod().invoke()。但就您而言,听起来您需要多态性。
  • 您能提供一些代码或伪代码来显示您正在尝试做什么吗?我不清楚你想做什么?您有地图中的类名,您正在尝试创建该类的实例并在新创建的实例上调用方法?你怎么知道调用什么方法?它总是相同的方法签名吗?
  • 您想要从中获取的字符串和对象以及初始化它们的值的任何示例?
  • 看来我的回答应该有效。如果由于某种原因无法正常工作,请对其发表评论。

标签: java oop generics reflection


【解决方案1】:

到目前为止,听起来应该是这样的:

for (Map.Entry<String, String> entry : myMap.entrySet()){

    Class<?> clazz = Class.forName(entry.getValue());
    ADBBean bean = (ADBBean)clazz.newInstance();
    Method method = clazz.getMethod("methodName", String.class, Integer.class, etc);
    method.invoke(bean, "blah", 145);
}

【讨论】:

  • 非常感谢!我可以使用这个小提示来解决问题。我完全忘记了我可以将对象转换为那种类型。
【解决方案2】:

我认为您正在寻找模板/泛型编程。 http://en.wikipedia.org/wiki/Generics_in_Java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2014-06-06
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多