如果我需要提供更多代码,请告诉我,但我在此代码段的最后一行收到语法错误,声明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);
答案 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)
你可以做两件事:
让inputList
更多强类型。在函数参数列表中使用ArrayList<String> inputList
。
在使用地点使用演员:String URLline = (String)inputList.get(i);
请注意,(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>();