我正在尝试返回一个ArrayList,但最后我得到错误:找不到符号。我在列表中添加了一些字符串和双打并将其返回到所谓的字符串。
错误:
./Sample.java:55: error: cannot find symbol
return placeMatch;
^
symbol: variable placeMatch
location: class Sample
1 error
考虑到提到的关于try catch的内容我将我的声明声明移到了顶部,我得到了:
./ Sample.java:54:错误:不兼容的类型 return placeMatch; ^ 必需:字符串 发现:ArrayList
实际代码:
import java.util.ArrayList;
//...other imports
public class Sample
extends UnicastRemoteObject
implements SampleInterface {
public Sample() throws RemoteException {
}
public String invert(String city, String state) throws RemoteException {
try{
ArrayList<Object> placeMatch = new ArrayList<Object>();
// Read the existing address book.
PlaceList place =
PlaceList.parseFrom(new FileInputStream("places-proto.bin"));
// Iterates though all people in the AddressBook and prints info about them.
for (Place Placeplace: place.getPlaceList()) {
//System.out.println("STATE: " + Placeplace.getState());
if(Placeplace.getName().startsWith(city)){
placeMatch.add(Placeplace.getName());
placeMatch.add(Placeplace.getState());
placeMatch.add(Placeplace.getLat());
placeMatch.add(Placeplace.getLon());
break;
}
}
}catch(Exception e){
System.out.println("opening .bin failed:" + e.getMessage());
}
return placeMatch;
}
}
答案 0 :(得分:8)
您需要声明:
ArrayList<Object> placeMatch = new ArrayList<Object>();
在try块之外。
第二个问题:
方法返回类型为String
。您无法退回ArrayList<Object>
。
解决方案取决于您需要做什么。您可以更改返回类型:
public List<Object> invert(String city, String state) throws RemoteException {
答案 1 :(得分:1)
参数placeMatch仅在try块中可见。因此,如果要在try块中初始化并声明此参数,则应在try块的底部返回此参数,并在catch块中返回null或其他内容。但!如果可以的话,在try块外面声明这个param,作为实例变量。