gpt4 book ai didi

java - 在反射中处理 HashMap

转载 作者:行者123 更新时间:2023-12-02 02:24:14 25 4
gpt4 key购买 nike

有一个java学校项目,使用Reflection,除了处理HashMap之外,我设法处理这个主题。

假设我们有一个 Shape 类,以及扩展 Shape 的多边形。
每个多边形都会继承一个 ID 和名称。下面是一个使用 Triangle 实现的简短示例:

Class Shape{
private static int id_counter;
protected ID;
protected Shape(String name){
ID = id_counter;
id_counter++;
this.name = name;
}
}

Class Triangle {
{
public Triangle(Sting name, Point[] vertices)
{
super(name);
/* some operations to define Triangle vertices*/
}
public int getID()
{
return this.ID;
}

需要仅通过多边形的 ID 对多边形执行操作,因此我使用了名为 ShapesHash 的 HashMap:

HashMap <Integer, Shape> shapesHash = new HashMap <Integer, Shape>;

当我尝试使用反射创建新形状时,事情开始变得棘手。在 Main void 中,我声明如下(跳过所需的 try-catch 换行):

Class<? extends Shape> myClass = Class.forName("polygonName").asSubclass(Shape.class);
// String "polygonName" is given
Constructor<?> myConstructor = myClass.getDeclaredConstructor();
Object myObject = myConstructor.newInstance(name, points);
// String "name" and Points 'points' are given
Method myMethod = myClass.getMethod("getID");
Object result = myMethod.invoke(null);
shapesHash.put( (Integer) result, (Class<? extends Shape>) myClass);

问题是我试图找出要作为第二个参数的内容,
而不是(Class<? extends Shape>)myClass
我尝试了多种类型的转换,但根本没有进行转换 - 但没有成功(我收到编译错误)。

遇到这种情况我能做什么?

最佳答案

首先,您需要在对象上调用getID:

Object result = myMethod.invoke(myObject);
^^^^^^^^

对于 put 方法的第二个参数,只需传入 myObject,即您使用构造函数创建的对象!

shapesHash.put( (Integer) result, (Shape) myObject);   

关于java - 在反射中处理 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48029938/

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