java version "1.8.0_92"
我正在尝试创建一个通用接口和一个实现它的类。这是界面:
interface UpdateDBListener<T> {
void onUpdateSuccess(T person);
void onUpdateFailure(String errMessage);
}
void updatePerson(T person, UpdateDBListener updateDBListener);
错误:
error: cannot find symbol method getId() where T is a type-variable: T extends Object declared in class PeopleListModelImp
这是实现它的类:
public class PeopleListModelImp<T> implements PeopleListModelContract<T> {
@Override
public void updatePerson(T person, UpdateDBListener updateListener) {
String id = person.getId(); /* ERROR */
}
我正在使用的课程:
public class Person {
String mId;
String mFirstName;
String mLastName;
public Person() {
}
public String getId() {
return mId;
}
public void setId(String id) {
this.mId = id;
}
public String getFirstName() {
return mFirstName;
}
public void setFirstName(String firstName) {
this.mFirstName = firstName;
}
public String getLastName() {
return mLastName;
}
public void setLastName(String lastName) {
this.mLastName = lastName;
}
}
但是,如果我尝试在实现接口的类中获取Id,则会在此行中出现错误:
String id = person.getId();
我认为由于人不知道它是一个Person类,所以不了解getId()。我只是想知道我这样做是不正确的。我希望这个类是完全通用的,所以我可以将它用于其他不同的类。
这可能吗?
非常感谢提前。
答案 0 :(得分:2)
看起来你想要改变
public class PeopleListModelImp<T> implements PeopleListModelContract<T> {
到
public class PeopleListModelImp<T extends Person> implements PeopleListModelContract<T> {
因此,T知道它是Person或Person的子类。
另外,不应该
public void updatePerson(final T person, final UpdateDBListener updateListener) {
改为
public void updatePerson(final T person, final UpdateDBListener<T> updateListener) {
这样该方法不会失去其通用性吗?
请注意,将来,您希望将代码压缩为有效的MCVE,以便此处的志愿者更容易回答。例如,您发布的代码不包含PeopleListModelContract。