为什么将此ArrayList视为对象列表?

时间:2014-12-01 08:23:34

标签: java arraylist

如果我需要提供更多代码,请告诉我,但我在此代码段的最后一行收到语法错误,声明incompatible types; Object cannot be converted to String。我无法弄清楚为什么ArrayList被认为是Object而不是String s。

正如你所知,inputList是从另一种方法传递下来的,从这里开始有点复杂,只是发布片段,但据我所知,其他地方ArrayList s始终定义为String s。

任何输入(看我在那里做了什么?)将不胜感激!

public static ArrayList<String> getURLsContainingTarget(ArrayList inputList, String target) throws MalformedURLException
{   
  ArrayList<String> outputList = new ArrayList<>();
  String regEx;
  regEx = "*" + target + "*"; 
  String line= "null";// this is a line in the web page
  // one loop to read through each URL in inputList 
  for (int i = 0; i < inputList.size() - 1; i++)
  {
    String URLline = inputList.get(i);

3 个答案:

答案 0 :(得分:4)

您的inputList是使用原始类型定义的 - ArrayList inputList - 这意味着,就编译器而言,它可能包含任何类型的Object。因此,inputList.get(i)会返回Object而非String,并且需要投射。

如果您将方法签名更改为:

public static ArrayList<String> getURLsContainingTarget(ArrayList<String> inputList, String target) throws MalformedURLException

不需要铸造。

答案 1 :(得分:1)

你可以做两件事:

  1. inputList更多强类型。在函数参数列表中使用ArrayList<String> inputList

  2. 在使用地点使用演员String URLline = (String)inputList.get(i);

  3. 请注意,(1)将导致编译时失败,而(2)将导致运行时失败,如果inputList包含不是{{1}的对象类型。因此(1)将为您提供更多的程序稳定性,但(2)将更容易适合您的代码库,特别是如果您在许多地方使用函数String

答案 2 :(得分:1)

如果您没有定义ArrayList的类型,那么它将被视为对象类型,因此您有两个选项:

1:inputList定义为String,如ArrayList<String> inputList

2: 把它像: String URLline = (String)inputList.get(i);

如果您没有指定类型,则使用旧的非通用版本。这基本上等同于:

ArrayList<Object> inputList= new ArrayList<Object>();