Java未经检查的方法调用

时间:2014-08-25 08:53:22

标签: java sqlite generics

我正在尝试使用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;
    }
  });

Source

我创建的以下示例代码产生相同的警告:
警告:

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上问这个问题。

我相信这一切都归结于我对泛型类型的缺乏经验。我已经花了几个小时在这上面,并且不觉得我到处都是。

如何停止警告?

1 个答案:

答案 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());