代码之家  ›  专栏  ›  技术社区  ›  Nerdy Bunz

不安全或未经检查的操作警告

  •  0
  • Nerdy Bunz  · 技术社区  · 6 年前

    在应用程序中,我使用sharedreferences保存/加载(序列化/反序列化)一些对象。

    这是反序列化代码:

    private void loadData() {
    
        String str = sharedPreferences.getString(PREF_TAG, null);
    
        byte[] bytes = Base64.decode(str, Base64.DEFAULT);
    
        try {
            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
            ObjectInputStream input = new ObjectInputStream(bais);
            arrayOfObjects = (ArrayList<MyObject>) input.readObject();
        } catch (Exception e) {
            Log.i("BUG", "error decoding serialized objects: " + e.toString());
        }
    
        if (arrayOfObjects == null) {
            Log.i("BUG", "serious problem!");
        }
    
    }
    

    但是每当我编译这个项目时,行:

    arrayOfObjects = (ArrayList<MyObject>) input.readObject();
    

    导致包含此方法的类“使用未选中或不安全的操作”的警告。

    我如何才能摆脱这个警告或更改我的代码以更安全?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Oldskultxo    6 年前

    在这种情况下,显示warinig是因为您直接分析

    input.readObject();
    

    它将一个object类型的对象(非常通用)返回到arraylist中,编译器试图告诉您,它可以是任何其他类型的对象。

    在我看来,如果代码中的指令总是返回arraylist,那么这不是一个重要警告,因此我将添加到方法定义中。

    @SuppressWarnings("unchecked")