【问题标题】:Type safety: The expression of type ArrayList[] needs unchecked conversion类型安全:ArrayList[] 类型的表达式需要未经检查的转换
【发布时间】:2013-02-13 06:08:38
【问题描述】:

我正在从事一个项目,在该项目中,我在初始化具有特定大小的一种方法时遇到了 TypeSafety 问题。在我的运行方法中,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++;
    }

【问题讨论】:

  • 您在这里创建了一个ArrayList 对象数组。你确定这真的是你想要的吗?
  • @Jake,是的,我需要那个。使用更新的代码查看我的更新问题。这有什么问题吗?还是有更好的方法?
  • 对Java不熟悉,不需要在ArrayList中指定类型吗? methods = new ArrayList[tableLists.size()];

标签: java multithreading casting


【解决方案1】:

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

ArrayList<Method> methods;

/* ... */

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

数组和泛型往往不能很好地相互配合。如果您真的需要分离,则必须选择主要选项:

  1. 使用ArrayList&lt;ArrayList&lt;Method&gt;&gt; 而不是数组。这将使您可以很好地处理所有事情,而无需使用普通数组。然后,您可以使用与常规数组一样的大小有效地初始化 methods 对象。

    methods = new ArrayList<ArrayList<Method>>(tableLists.size());
    
  2. 如果您真的需要使用数组,您可能必须使用@SuppressWarnings("unchecked") 注释来抑制警告。这既丑陋又烦人,所以如果可以的话,我会避免使用它。

【讨论】:

  • 是的,我可以这样做,但是对于零索引,会有不同的方法,对于 1 索引,会有不同的方法。所以这就是我这样做的原因,以便我可以根据索引区分调用的内容。
  • 如果我使用您的第一个选项,那么我不能像 methods[j] 那样将相应的方法存储在特定索引上,请参阅我更新的代码倒数第二行。所以假设如果我选择你的第一个选项,那么我怎样才能让这个东西工作呢?还有你的第二个选项,我已经知道并且我想避免。
  • @Nevzz03 List 为获取和设置提供随机访问。你可以使用method.add(j, x),而不是method[j] = x
猜你喜欢
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2015-06-20
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多