1

我试图返回一个 ArrayList 但最后我得到错误:找不到符号。我将一些字符串和双精度添加到列表中,并将其返回给它的名称。

错误:

./Sample.java:55: error: cannot find symbol
        return placeMatch;
               ^
  symbol:   variable placeMatch
  location: class Sample
1 error

考虑到提到的关于 try catch 的内容,我将声明语句移到顶部,我得到:

./Sample.java:54: 错误:不兼容的类型返回 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;
    }

}

4

2 回答 2

8

您需要声明:

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

在 try 块之外。

第二个问题:

方法返回类型是String. 你不能返回ArrayList<Object>

解决方案取决于您需要做什么。您可以更改返回类型:

public List<Object> invert(String city, String state) throws RemoteException {
于 2013-10-31T14:21:58.393 回答
1

参数 placeMatch 仅在 try 块中可见。所以如果你想在try块中初始化并声明这个参数,你应该在try块的底部返回这个参数,在catch块中返回null什么的。但!如果可以,请在 try 块之外将此参数声明为实例变量。

于 2013-10-31T14:25:08.947 回答