类型安全:ArrayList []类型的表达式需要未经检查的转换

时间:2013-02-13 06:08:38

标签: java multithreading casting

我正在开展一个项目,我在初始化一个特定大小的方法时遇到TypeSafety问题。在我的run方法中,我在new ArrayList[tableLists.size()]上有黄线并抱怨 -

Type safety: The expression of type ArrayList[] needs unchecked conversion to conform to ArrayList<Method>[]

以下是代码。

private ArrayList<Method> methods[] = null;


    @Override
    public void run() {

        methods = new ArrayList[tableLists.size()];


    }

如何解决此TypeSafety问题?

更新: -

    int j = 0;
    dbConnection = new Connection[tableLists.size()];
    callableStatement = new CallableStatement[tableLists.size()];
    methods = new ArrayList[tableLists.size()];

    //loop around the map values and make the connection list
    for (Map<String, String> map : tableLists.values()) {

        dbConnection[j] = getDBConnection(map.get("URL"), map.get("USER"), map.get("PASSWORD"), map.get("DRIVER"));
        callableStatement[j] = dbConnection[j].prepareCall(map.get("SQL"));

        methods[j] = getRequiredMethods(map.get("SUFFIX"));
        j++;
    }

1 个答案:

答案 0 :(得分:1)

由于方法本身似乎没有以任何特定的方式分开,为什么不将它们全部存储在同一个ArrayList中,完全绕过问题?

ArrayList<Method> methods;

/* ... */

methods.addAll(getRequiredMethods(map.get("SUFFIX")));

阵列和泛型相互之间往往不会很好玩。如果确实需要分离,则必须使用主要选项:

  1. 使用ArrayList<ArrayList<Method>>代替数组。这将让你很好地处理所有事情而不会破坏普通数组。然后,您可以使用与常规数组一样的大小来有效地初始化methods对象。

    methods = new ArrayList<ArrayList<Method>>(tableLists.size());
    
  2. 如果确实需要使用数组,则可能必须使用@SuppressWarnings("unchecked")注释来禁止警告。这是丑陋和烦人的,所以如果可以,我会避免它。