我正在创建一个FriendList,它扩展了ArrayList并填充了Friend对象。但是,当我尝试访问Friend通常可用的方法时,编译器表示无法解析该方法-在这种情况下为compareTo(Friend)。
FriendList类:
public class FriendList<Friend> extends ArrayList<Friend> {
private boolean isAdded;
public FriendList() {
isAdded = false;
}
public void alphabetAdd(Friend friend) {
if (this.isEmpty()) {
add(friend);
return;
}
int index = 0;
// add friends alphabetically
while (!isAdded) {
Friend f = this.get(index+1);
if (f.compareTo(friend) < 0) {
index++;
} else {
this.add(index, friend);
isAdded = true;
}
}
}
}
朋友班:
public class Friend implements Comparable<Friend> {
// constructors and other methods work fine - just need to see compareTo
// @Override
public int compareTo(@NonNull Friend o) {
String name1 = getUserFirstName() + getUserLastName();
Friend f;
if (o instanceof Friend) {
f = (Friend) o;
String name2 = f.getUserFirstName() + f.getUserLastName();
if (name1.compareTo(name2) < 0)
return -1;
else if (name1.compareTo(name2) > 0)
return 1;
}
return 0;
}
}
最佳答案
问题在FriendList<Friend>
中。这被视为像FriendList<T>
这样的通用类的声明,并且Friend
不再是实际类型,而是一个别名,这就是为什么只有在Object
中声明的方法才可用的原因。
将您的班级声明更改为public class FriendList extends ArrayList<Friend>