我正在尝试使用SQLite4java设置多线程应用程序,一切正常。但是,根据入门教程,我的意思是创建一个“object”类型的对象,并返回null值(由于使用泛型类型)。
以下是建议的代码:
queue.execute(new SQLiteJob<Object>() {
protected Object job(SQLiteConnection connection) throws SQLiteException {
// this method is called from database thread and passed the connection
connection.exec(...);
return null;
}
});
我创建的以下示例代码产生相同的警告:
警告:
test.java:9: warning: [unchecked] unchecked method invocation: <T,J>execute(J) in com.almworks.sqlite4java.SQLiteQueue is applied to (query<java.lang.Integer>)
queue.execute(new query<Integer>());
test.java:
import com.almworks.sqlite4java.*;
import java.util.ArrayList;
import java.io.File;
class test{
public static void main(String[] args){
File f = new File("file.db");
SQLiteQueue queue = new SQLiteQueue(f);
queue.execute(new query<Integer>());
}
}
query.java:
import com.almworks.sqlite4java.SQLiteException;
import com.almworks.sqlite4java.SQLiteJob;
import com.almworks.sqlite4java.SQLiteConnection;
import com.almworks.sqlite4java.SQLiteStatement;
import java.util.ArrayList;
class query<T> extends SQLiteJob{
protected ArrayList<Integer> job(SQLiteConnection connection) throws SQLiteException{
ArrayList<Integer> ints = new ArrayList<Integer>();
//DB Stuff
return ints;
}
}
我已经阅读了很多关于当人们未能为ArrayList指定类型时如何显示此特定消息的内容。但是,我并没有尝试使用它来投射对象或做任何事情。它只是库开发人员为了返回null而实现的机制。我不相信这是一个直接与库有关的问题,这就是为什么我在StackOverflow上问这个问题。
我相信这一切都归结于我对泛型类型的缺乏经验。我已经花了几个小时在这上面,并且不觉得我到处都是。
如何停止警告?
答案 0 :(得分:3)
问题是你的query
课程。您扩展了泛型类,但未指定泛型类型的值。
你应该像这样去做它(尽管这没有用......):
class Query<T> extends SQLiteJob<T> {
protected T job(SQLiteConnection connection)
throws SQLiteException{
return ...; // Return something of type T
}
}
或者,如果您希望它专门用于List<Integer>
:
class IntListQuery extends SQLiteJob<List<Integer>> {
protected ArrayList<Integer> job(SQLiteConnection connection)
throws SQLiteException{
List<Integer> list = new ArrayList<>();
// Populate list
return list;
}
}
用法:
SQLiteQueue queue = new SQLiteQueue(f);
queue.execute(new IntListQuery());