gpt4 book ai didi

抽象类的 Java 反射错误

转载 作者:行者123 更新时间:2023-12-01 20:54:17 27 4
gpt4 key购买 nike

使用 Java 反射使用抽象类 Poligono 检索所有字段值会产生问题:首先是 getDeclaredFields() 不返回任何内容(一个数组0 值而不是类内的三个字段)和 field.get(object) 引发未报告的异常 IllegalAccessException

import java.lang.reflect.*;
import java.util.ArrayList;

abstract class Poligono
{
int numVertici;
double base;
double altezza;

int getNumeroVertici()
{
return numVertici;
}

abstract double getArea();
abstract double getPerimetro();
}
class Triangolo extends Poligono
{
public Triangolo(double lato)
{
numVertici = 3;
base = lato;
}

public double getArea()
{
return ((base * base) / 4) * Math.sqrt(3);
}

public double getPerimetro()
{
return base * 3;
}
}
class Rettangolo extends Poligono
{
public Rettangolo(double base_p, double altezza_p)
{
numVertici = 4;
base = base_p;
altezza = altezza_p;
}

public double getArea()
{
return (base * altezza) / 2;
}

public double getPerimetro()
{
return 2 * (base + altezza);
}
}
class Geometrie
{
ArrayList<Poligono> lista;

public Geometrie()
{
lista = new ArrayList<Poligono>();
}

public void aggiungi(Poligono p)
{
lista.add(p);
}

public int numeroPoligoni()
{
return lista.size();
}

public boolean checkPoligono(Poligono p)
{
for (Poligono q : lista)
{
if (q.getClass().equals(p.getClass()))
{
Field[] fields = p.getClass().getDeclaredFields();

System.out.println(fields.length); // length is 1
for (Field field : fields) {
field.setAccessible(true); //Additional line
System.out.println("Field Name: " + field.getName());
System.out.println("Field Type: " + field.getType());
System.out.println("Field Value: " + field.get(p)); // IllegalAccessException
}
}
}
return true;
}
}
public class Main
{
public static void main(String [] args)
{
Geometrie g = new Geometrie();
Rettangolo r = new Rettangolo(2, 3);
Rettangolo r2 = new Rettangolo(2, 3);

g.aggiungi(r);
g.checkPoligono(r2);
}
}

最佳答案

要访问父类(super class)属性,您可以执行以下操作:

p.getClass().getSuperclass().getDeclaredFields();

我没有发现 get() 调用有问题。 (当使用上面的代码片段时)

关于抽象类的 Java 反射错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42624752/

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