Java 为什么将此ArrayList视为对象列表?
如果我需要提供更多的代码,请告诉我,但是我在这段代码的最后一行遇到了语法错误,指出Java 为什么将此ArrayList视为对象列表?,java,arraylist,Java,Arraylist,如果我需要提供更多的代码,请告诉我,但是我在这段代码的最后一行遇到了语法错误,指出不兼容的类型;对象无法转换为字符串。我不明白为什么这个ArrayList被认为是由Objects而不是Strings组成的 正如您所知,inputList是从另一个方法传下来的,从这里开始只发布代码片段有点复杂,但据我所知,在其他地方,这些ArrayLists总是定义为Strings 任何意见(看看我在那里做了什么?)都将不胜感激 public static ArrayList<String> getU
不兼容的类型;对象无法转换为字符串
。我不明白为什么这个ArrayList
被认为是由Object
s而不是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);
公共静态ArrayList getURLsContainingTarget(ArrayList inputList,String target)引发错误的ArrayList异常
{
ArrayList outputList=新的ArrayList();
字符串正则表达式;
regEx=“*”+目标+“*”;
String line=“null”//这是网页中的一行
//一个循环,用于读取inputList中的每个URL
对于(int i=0;i您的inputList
是使用原始类型定义的-ArrayList inputList
,这意味着,就编译器而言,它可能包含任何类型的对象。因此,inputList.get(i)
返回对象而不是字符串,需要强制转换
如果将方法签名更改为:
public static ArrayList<String> getURLsContainingTarget(ArrayList<String> inputList, String target) throws MalformedURLException
公共静态ArrayList getURLsContainingTarget(ArrayList inputList,String target)引发错误的ArrayList异常
不需要铸造。您可以做两件事:
使inputList
的类型更强。在函数参数列表中使用ArrayList inputList
在使用点使用强制转换:String URLline=(String)inputList.get(i);
请注意,(1)将导致编译时失败,而(2)如果inputList
包含的对象不是String
类型,则将导致运行时失败。因此,(1)将为您提供更高的程序稳定性,但(2)将更容易适应您的代码库,特别是如果您在许多地方使用函数getURLsContainingTarget
。如果您不定义ArrayList
的类型,则它将被视为对象类型,因此您有两个选择:
1:
将inputList
定义为String
likeArrayList inputList
2:
把它像:
String URLline=(String)inputList.get(i);
如果不指定类型,则使用的是旧的非泛型版本。这基本等同于:
ArrayList inputList=new ArrayList();
ArrayList inputList
作为参数也应该与
一起使用。您必须定义String
类型的ArrayList
。否则它将被视为对象类型,因此您必须强制转换它。因为您有(ArrayList inputList
而不是(ArrayList inputList
我现在觉得自己很笨。有时候这真的需要一双额外的眼睛。谢谢!!另外,顺便说一句,工作到接口。在签名中使用列表,而不是ArrayList。谢谢你的详细回答!我使用了有效的选项1,但我没有意识到选项2也是可能的…(1)在我看来,如果你能重构对函数的所有调用,那就更好了。