使用java反射使用抽象类Poligono
检索所有字段值,它创建的问题:第一个是getDeclaredFields()
确实没有返回(数组的0个值,而不是三个值,而不是三个字段班级)和field.get(object)
提高unreported exception 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);
}
}
要访问超类属性,您可以做到这一点:
p.getClass().getSuperclass().getDeclaredFields();
我看不到get()
调用上的问题。(使用上述片段时)