gpt4 book ai didi

java - 当类1对象通过反射在另一个类2中私有(private)声明时,如何访问类1的私有(private)变量的值?

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:26 29 4
gpt4 key购买 nike

我试图在通过类(class)作为函数对象后访问部门的私有(private)领域。 Department 当然是一个私有(private)变量。该解决方案必须是通用的,因为这是一个反射(reflection)练习。在运行时,存储对象函数不知道正在传递哪种类型的对象,因此我也无法使用类型转换。这是部门类别:

public class Department{
private String departmentName;
private Teacher departmentHOD;
}

这是类(class):

public class Course {
private String courseNumber;
private String semesterName;
private String courseName;
private Department offeringDepartment;
private Teacher[] courseInstructors;
private int sectionNumbers;
}

在 main 中,我通过函数 void storeObject(Object o) 传递类(class):

void storeObject(Object o)
{
//in this function i need to extract all possible primitive datatype objects and save them in a data base
Class classForStorage = o.getClass();
Field[] publicFields = classForStorage.getDeclaredFields();//.getFields()
for (int i = 0; i < publicFields.length; i++)
{ // making private ones accessible
publicFields[i].setAccessible(true);
//Getting name and type of all attributes in the class one by one
String fieldName = publicFields[i].getName();
Class typeClass = publicFields[i].getType();
String fieldType = typeClass.getName();
......//after this i access values by datatype and store in sql
//but it only works for primitive data types
}

我无法使用以下方式访问departname:

  publicFields[i].getType().getDeclaredFields()[0].setAccessible(true);
value =(String)publicFields[i].getType().getDeclaredFields()[0].get(obj);

这给了我非法访问异常

顺便说明一下如何从 courseInstructor 数组中获取值。

最佳答案

你想太多了。

void printObject( Object o ) {
for ( Field fld : o.getClass().getDeclaredFields() ) {
fld.setAccessible( true );
System.out.println( fld.get( o ) );
}
}

如果您需要方法在字段是数组时表现不同,请使用 isArray

void printObject( Object o ) {
for ( Field fld : o.getClass().getDeclaredFields() ) {
fld.setAccessible( true );
Object oFldVal = fld.get( o );
if ( fld.getType().isArray() ) {
int iLen = Arrays.getLength( oFldVal );
for ( int i = 0; i < iLen; ++i ) {
printObject( Arrays.get( oFldVal, i ) );
}
} else {
System.println( oFldVal );
}
}
}

关于java - 当类1对象通过反射在另一个类2中私有(private)声明时,如何访问类1的私有(private)变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320844/

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