Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:循环中变量的几种可能类型_Java_Oop_Generics_Reflection - Fatal编程技术网

Java:循环中变量的几种可能类型

Java:循环中变量的几种可能类型,java,oop,generics,reflection,Java,Oop,Generics,Reflection,我必须在工作中解决一个问题,因为我对java不是很流利,所以我被它困住了 简而言之,我有一个循环,它通过映射,其中的值定义了循环中变量类型的名称。我试着用各种方法来解决问题;我使用了反射和一些泛型类,但问题总是一样的:程序无法访问生成对象的方法,因为我无法确定其类型。调用对象时,我必须接收一个ArrayList并将其附加到项目主类中定义的一个列表中(顺便说一句:eclipse没有显示任何错误,我得到一个运行时异常) 所以问题是:我如何能够从循环中的字符串(我假设带有反射)分配一个动态类型的变量,

我必须在工作中解决一个问题,因为我对java不是很流利,所以我被它困住了

简而言之,我有一个循环,它通过
映射
,其中的值定义了循环中变量类型的名称。我试着用各种方法来解决问题;我使用了反射和一些泛型类,但问题总是一样的:程序无法访问生成对象的方法,因为我无法确定其类型。调用对象时,我必须接收一个
ArrayList
并将其附加到项目主类中定义的一个列表中(顺便说一句:eclipse没有显示任何错误,我得到一个运行时异常)


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

我想您正在寻找模板/泛型编程。

我认为您正在寻找模板/泛型编程。

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

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);
}
for(Map.Entry:myMap.entrySet()){
Class clazz=Class.forName(entry.getValue());
ADBBean bean=(ADBBean)clazz.newInstance();
Method=clazz.getMethod(“methodName”、String.class、Integer.class等);
调用(bean,“blah”,145);
}

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

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);
}
for(Map.Entry:myMap.entrySet()){
Class clazz=Class.forName(entry.getValue());
ADBBean bean=(ADBBean)clazz.newInstance();
Method=clazz.getMethod(“methodName”、String.class、Integer.class等);
调用(bean,“blah”,145);
}

您正在运行哪个版本的JDK?Class.forName().newInstance()+Class.forName().getMethod().invoke()。但在您的情况下,听起来您需要多态性。您能提供一些代码或伪代码来显示您正在尝试做什么吗?我不清楚你想做什么?您从映射中获得了一个类名,您是否正在尝试创建该类的实例并在新创建的实例上调用方法?您如何知道要调用什么方法?它总是同一个方法签名吗?你想从中得到字符串和对象的例子,以及初始化它们的值吗?看来我的答案应该行得通。如果它因某种原因无法工作,请对此进行注释。您正在运行哪个版本的JDK?Class.forName().newInstance()+Class.forName().getMethod().invoke()。但在您的情况下,听起来您需要多态性。您能提供一些代码或伪代码来显示您正在尝试做什么吗?我不清楚你想做什么?您从映射中获得了一个类名,您是否正在尝试创建该类的实例并在新创建的实例上调用方法?您如何知道要调用什么方法?它总是同一个方法签名吗?你想从中得到字符串和对象的例子,以及初始化它们的值吗?看来我的答案应该行得通。如果由于某种原因它不起作用,请对此进行评论。非常感谢!我可以用这个小提示来解决这个问题。我完全忘了我可以把这个物体变成那种类型。非常感谢!我可以用这个小提示来解决这个问题。我完全忘记了我可以将对象转换为那种类型。