0
使用Java反射檢索所有字段值使用抽象類Poligono
它創建的問題:第一個是getDeclaredFields()
確實沒有返回任何內容(一個0值的數組而不是三個字段內的類)和field.get(object)
引發unreported exception IllegalAccessException
抽象類的Java反射錯誤
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);
}
}
添加完整的堆棧跟蹤請 – Jens
對於'IllegalAccessException',您可能需要'field.setAccessible(true);'在調用get之前。 –
我在代碼中使用它 – user6542453