我正在开发open source API来轻松测量自定义对象的运行时分配。虽然我可以很好地编写缓存处理算法,但我有一个问题是有机地访问自定义对象中的所有数据类型。我想编写此API以获取任何自定义对象,只要它具有当前支持的以下数据类型:
例如,拿这个自定义对象类
package productions.widowmaker110.byteme;
/**
* Created by Widowmaker110 on 11/20/2015.
*
* This object class is meant to mimick possible data types held within a single object
*
* For simplicity, I will be mimicking a simplified user profile data
*/
public class ExampleObject {
private String Name;
private int Age;
private String Location;
private String Sex;
private String Description;
/**
* Empty Constructor
*/
public ExampleObject() {}
/**
* Basic constructor with initializing data
*
* @param _Name String with the name of the user
* @param _Age Integer with the age of the user
* @param _Location String containing the curret city and state of the user
* @param _Sex String Male, Female, Transgender, or Other
* @param _Description String short blurb about the user
*/
public ExampleObject(String _Name, int _Age, String _Location, String _Sex, String _Description)
{
this.setName(_Name);
this.setAge(_Age);
this.setLocation(_Location);
this.setSex(_Sex);
this.setDescription(_Description);
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
public String getLocation() {
return Location;
}
public void setLocation(String location) {
Location = location;
}
public String getSex() {
return Sex;
}
public void setSex(String sex) {
Sex = sex;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
}
我想做的是采取类似的方式和"转移"如果我可以帮助它,所有数据都指向我的缓存处理类,同时将对象保持为当前形式。我的第一个想法是让一个对象拥有一个给定对象的每种数据类型的数组,但那时我似乎很费力地以这种方式解构一个自定义对象。我可能会看错了,但如果我做了类似的事情:
Object(int[] int_array, String[] string_array, short[] short_array,
long[] long_array, byte[] byte_array, float[] float_array,
double[] double_array, char[] char_array, boolean[] boolean_array,
Bitmap[] bitmap_array)
请程序员通过将它们放入数组中来输入所有数据点。
我对此API的最终目标是将其放入项目中,并立即为您完成所有令人讨厌的缓存处理。
编辑我很抱歉让它不清楚。我试图给出项目的整个范围,但可能给了太多。是否有任何方法可以使用自定义类并解析它,而不知道哪些字段可用,只要它们属于我在顶部制作的项目符号列表?我自己可以做缓存部分。这会让它变得更清楚吗?
编辑#2 JFPicard指出使用Java反射进行此类处理。看了oracle documentation和这些:
我发现这样的东西非常有帮助。
import java.lang.reflect.Method;
...
Method[] methods = MyObject.class.getMethods();
for(Method method : methods){
System.out.println("method = " + method.getName());
}
谢谢!
答案 0 :(得分:4)
我认为您需要使用反射来获取对象的所有getter并获取数据以执行某些操作。
这是一个很好的教程,可以帮助您:https://docs.oracle.com/javase/tutorial/reflect/member/methodModifiers.html