抽象类的Java反射错误

抽象类的Java反射错误,java,reflection,abstract-class,Java,Reflection,Abstract Class,使用Java反射使用抽象类Poligono检索所有字段值会产生问题:第一个问题是getDeclaredFields()不返回任何内容(0值数组而不是类中的三个字段)和field.get(对象)引发未报告的异常IllegaAccessException import java.lang.reflect.*; 导入java.util.ArrayList; 抽象类Poligono { 国际努姆维蒂奇; 双基; 双阿尔特扎; int getnumeriovertici() { 返回numVertici;

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

import java.lang.reflect.*;
导入java.util.ArrayList;
抽象类Poligono
{
国际努姆维蒂奇;
双基;
双阿尔特扎;
int getnumeriovertici()
{
返回numVertici;
}
抽象双getArea();
抽象双getPerimetro();
}
classtriangolo扩展了Poligono
{
公共三角(双拉托)
{
numVertici=3;
基础=拉托;
}
公共区域()
{
返回((基数*基数)/4)*数学sqrt(3);
}
公共双通道
{
返回基数*3;
}
}
class Rettangolo扩展了Poligono
{
公共Rettangolo(双基、双高)
{
numVertici=4;
base=base\u p;
altezza=altezza_p;
}
公共区域()
{
返回(基本*altezza)/2;
}
公共双通道
{
返回2*(基本+altezza);
}
}
类几何体
{
ArrayList lista;
公共几何()
{
lista=新的ArrayList();
}
公共空间aggiungi(Poligono p)
{
增加(p);
}
公共国际数字图书馆()
{
返回lista.size();
}
公共布尔校验Poligono(Poligono p)
{
对于(Poligono q:lista)
{
如果(q.getClass().equals(p.getClass()))
{
Field[]fields=p.getClass().getDeclaredFields();
System.out.println(fields.length);//长度为1
用于(字段:字段){
field.setAccessible(true);//附加行
System.out.println(“字段名:”+Field.getName());
System.out.println(“字段类型:+Field.getType());
System.out.println(“字段值:”+Field.get(p));//IllegalAccessException
}
}
}
返回true;
}
}
公共类主
{
公共静态void main(字符串[]args)
{
几何图形g=新几何图形();
Rettangolo r=新Rettangolo(2,3);
Rettangolo r2=新Rettangolo(2,3);
g、 aggiungi(r);
g、 checkPoligono(r2);
}
}

要访问超类属性,可以执行以下操作:

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

我看不到
get()
调用有问题。(使用上述代码段时)

要访问超类属性,可以执行以下操作:

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

我看不到
get()
调用有问题。(使用上述代码段时)

请添加完整的stacktrace,以便
IllegalAccessException
您可能需要
field.setAccessible(true)在调用get之前。我在代码中使用了它添加完整的stacktrace pleaseFor
IllegalAccessException
您可能需要
field.setAccessible(true)在调用get之前。我在代码中使用了它