簡體   English   中英

Java未經檢查的方法調用

[英]Java unchecked method invocation

我正在嘗試使用SQLite4java設置多線程應用程序,並且一切正常。 但是,根據入門教程,我打算創建一個類型為“對象”的對象,並為了返回空值(由於使用泛型類型)。

這是建議的代碼:

 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指定類型時如何顯示此特定消息的信息。 但是,我沒有嘗試投射對象或對其執行任何操作。 它僅僅是由庫開發人員實現的一種返回空值的機制。 我不認為這是與庫直接相關的問題,這就是為什么我在StackOverflow上問這個問題。

我認為這全都歸因於我對泛型類型缺乏經驗。 我已經花了幾個小時了,覺得自己什么都沒有。

如何停止警告?

問題是您的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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM