【发布时间】:2014-10-17 08:28:21
【问题描述】:
我将用以下示例描述我的问题:
public class Person{
private int age;
private String name;
public Person(int age, String name){
this.age = age;
this.name = name;
}
}
我的班级有一些成员(在这种情况下是年龄和姓名),但我不知道我的班级有哪些成员以及有多少成员。我什至不在乎数量或类型。我不想只获得一个班级的所有成员。像这样:
private List<Object> getAll(Class searchedClass, Object from){
// This is where the magic happens
}
此方法应返回一个列表,其中包含每个非空对象,该对象是“searchedClass”类的实例,并且是“from”对象的成员。
在我的例子中,我有一个名为 Property 和 PropertyContainerList 的类以及一个名为 PropertyContainer 的接口。 PropertyContainerList 只能包含实现我的接口 PropertyContainer 的对象。所以一个类可以有 10 个属性作为成员,另一个有 5 个属性,但可以添加两者的对象。属性具有方法 addListener(...)。我希望,每次将一个对象添加到我的列表中时,为该对象的每个“属性”成员添加一个侦听器。就像这样:
if(instance of PropertyContainer is added){
List<Property> properties = getAll(Property.class, propertyContainerObject);
for(Property property : properties)
property.addListener(new Listener());
}
我尝试了一些东西,但我不知道如何实现 getAll(Class, Object) 方法。请帮忙:)
感谢解答
【问题讨论】:
-
我完全不清楚
Property与Person有什么关系(根本没有提到Property)。基本上,我不明白你的问题——如果你能给出一个更具体的例子in code而不是仅仅描述一半的代码会更清楚。 -
我不确定
getAll应该发生什么样的魔法?你想反省吗?或者搜索某种类型的对象? -
这里也一样。我的解释只是“反射是他想要的吗?”在这种情况下,请查看docs.oracle.com/javase/tutorial/reflect/class/classMembers.html 或请详细描述 getAll-Methods 所需的功能(我也不清楚您的 Person、getAll 和 PropertyContainer 之间的联系)
-
好吧...我又读了一遍,我认为 getAll 方法应该做什么很清楚,我研究了一下(但是我看不到与该属性的任何关系)