我试图通过编写一个小的todo列表控制台应用程序来学习Java,该应用程序可以将todos保存到文件系统或CouchDB。不幸的是,我遇到了从CouchDB阅读todos的编译器问题(使用LightCouch库),完全不知道如何继续前进。
我有以下课程:
Todo
、TodoFilesystem
、TodoCouchDB
Listx
、ListFilesystem
、ListCouchDB
下面是ListCouchDB
的内容:
public class ListCouchDB extends Listx {
public void load() {
CouchDbClient dbClient = new CouchDbClient();
list = dbClient.view("_all_docs").includeDocs(true).query(TodoCouchDB.class);
}
}
list
变量是在超类上定义的示例变量:
public class Listx {
public List<Todo> list = new ArrayList<Todo>();
...
}
编译此程式码会掷回下列编译器错误:
ListCouchDB.java:12: error: incompatible types: inference variable T has incompatible equality constraints Todo,TodoCouchDB
list = dbClient.view("_all_docs").includeDocs(true).query(TodoCouchDB.class);
^
where T is a type-variable:
T extends Object declared in method <T>query(Class<T>)
1 error
当我在ListCouchDB
类中将query(TodoCouchDB.class)
更改为query(Todo.class)
时,它实际上编译并正确地填充了我的列表;然而,该列表包含Todo
项的数组,因此,如果我试图对列表中的项调用任何方法,它将错误地调用Todo
超类上的方法,而不是TodoCouchDB
子类上的方法。
抱歉,如果有足够的信息。在这里,但感谢任何人能够提供的任何输入。
1条答案
按热度按时间1yjd4xko1#
您可以尝试使用泛型型别。
使用泛型定义Listx
将ListCouchDB定义为
Listx<TodoCouchDB>
的扩展现在,
list
属性是TodoCouchDB示例的列表