我正在尝试创建将具有List
行为但将Field
的{{1}}作为行为应确定唯一性的属性的名称的泛型类。
例如,我们有String
类:
User
我想让班级说一个名字public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
。
为了能够提供给构造函数UniqueList
,这将使该用户列表在用户的属性名称中是唯一的,并且该列表将不能包含两个名称为“ John”的User对象例子。
就目前而言,我试图创建扩展User.class.getDeclaredField("name")
并实现ArrayList<T>
的类,但是我在逻辑上开始陷入混乱。
也许有些人已经有了类似的东西,可以分享或帮助理解如何实现它。
目前我拥有的代码:
Set<T>
答案 0 :(得分:0)
您的逻辑似乎是正确的。替换时,别忘了从列表中删除对象:
@Override
public boolean add(T t) {
try {
//get value of the key from provided object.
Object keyValue = keyField.get(t);
if (hashMap.containsKey(keyValue)) {
super.remove(hashMap.get(keyValue)); // << remove old object from list
hashMap.remove(keyValue);
}
hashMap.put(keyValue, t);
super.add(t);
return true;
} catch (IllegalAccessException | NullPointerException e) {
e.printStackTrace();
}
return false;
}
相应地覆盖其他添加/删除方法。请记住,ArrayList扩展了List,因此您还需要覆盖ArrayList的add / remove方法(例如add(int index, E element)
,remove(int index)
等)