来自C#背景我不知道这里有什么问题。
我有我的基类,它定义了抽象方法getContentValues
public abstract class BaseDataSource<T> {
protected abstract ContentValues getContentValues(T object);
}
继承它是另一个类,IIdentifiableDataSource。
public abstract class IIdentifiableDataSource extends BaseDataSource<IIdentifiable> {
// Nothing in here is relevant to the getContentValues method.
}
最后,继承自IIdentifiableDataSource,是最后一个子类MessagesDataSource,其中getContentValues被覆盖。它在这里抛出一个错误,指出“方法不会覆盖超类中的方法”
public class MessagesDataSource extends IIdentifiableDataSource {
@Override
protected ContentValues getContentValues(Message object) {
// fill ContentValues and return it.
}
}
我想这可以做泛型基类,但我不确定为什么。
答案 0 :(得分:1)
您的MessagesDataSource
课程为BaseDataSource<IIdentifiable>
,而不是BaseDataSource<Message>
。 getContentValues
中MessagesDataSource
的参数类型必须与类型参数IIdentifiable
匹配。
@Override
protected ContentValues getContentValues(IIdentifiable object) {
或者,如果您必须将Message
替换为参数类型,假设Message
实现IIdentifiableobject
,那么中间类IIdentifiableDataSource
可以定义自己的类型参数MessagesDataSource
可以提供。
public abstract class IIdentifiableDataSource<T extends IIdentifiable>
extends BaseDataSource<T> {
然后MessagesDataSource
可以将T
定义为Message
:
public class MessagesDataSource extends IIdentifiableDataSource<Message> {