【发布时间】:2018-06-05 16:10:13
【问题描述】:
我编写了一个名为MySet<T> 的自定义集合,它本质上是HashSet 的包装器:
import java.util.Collections;
import java.util.HashSet;
public class MySet <T> {
private HashSet<T> set;
public MySet() {
this.set = new HashSet<>();
}
public MySet(T[] elements) {
this.set = new HashSet<>();
Collections.addAll(this.set, elements);
}
public HashSet<T> getSet() {
return this.set;
}
}
它包含与 union()、intersect() 等集合相关的方法。
我还写了一个名为Person 的类,它代表了一个人的基本细节并实现了Comparable 接口:
public class Person implements Comparable<Person> {
private int id;
private String name;
private int age;
public Person(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
private boolean equals(Person p) {
return this.age == p.age;
}
public int compareTo(Person p) {
return this.age - p.age;
}
}
我们根据age 字段比较Person 对象。
我需要编写第三个类,它只具有接收MySet<Person> 对象并确定最小Person 的方法。当然,这可以通过使用两个循环来找到最小年龄来手动完成,但重点是使用 Java 方法进行泛型,所以我虽然在 MySet<Person> 上使用 Collections.min():
public class MinimumClass<T> {
public T minElement(MySet<T> set) {
Collections.min(set);
}
}
不编译并给出错误:no instance(s) of type variable(s) T exist so that MySet<T> conforms to Collection<? extends T> 据我了解,这意味着我必须在MySet 中实现Collection 接口。
有没有更简单的方法来编写确定最小人员的方法,使用Person 实现Comparable 和MySet 是一个泛型类这一事实?
【问题讨论】:
-
您为什么要避免使用
MySet实现Collection接口? -
@Mureinik 因为我必须实现 10 种方法才能只使用一种方法。
-
您可以将它们全部委托给底层
Set...无论如何-有没有办法从MySet取回元素?你分享的 sn-p 没有显示。 -
@Mureinik 是的,我有
getSet()method,我编辑了 OP 以添加它
标签: java generics collections comparison min