为什么eclipse会在返回语句中给出错误?

时间:2013-04-08 01:43:11

标签: java eclipse return

我正在尝试使方法selectVMwareServer在HashMap中存在密钥时返回VMwareServer对象。但是eclipse并不喜欢我放置返回语句的地方。为什么是这样?是因为方法有返回对象吗?

这是我的代码;

package configFS;

import java.util.HashMap;
import java.util.Map;

public class Config {

    private Map <String, Object> config;

    public Config() {

        /*
         * This will create a new configuration everytime we create a new instance of Config.class
         * By using the generics of String and Object I can link a name tag to any object needed.
         */
        config = new HashMap <String, Object> ();

    }

    public void addVMwareServer(String par1) {

        config.put(par1, new VMwareServer());

    }

    public void removeVMwareServer(String par1) {

        config.remove(par1);

    }

    public VMwareServer selectVMwareServer(String par1) {

        if (config.containsKey(par1)) {

            return (VMwareServer) config.get(par1);

        }

        return null;

    }

}

注意:这是一项正在进行的工作!

为了使eclipse沉默,我让它添加“return null;”

3 个答案:

答案 0 :(得分:3)

如果方法具有返回类型,则该方法应始终具有return语句。 根据你的代码,如果不满足“if”条件,那么它将永远不会进入那个条件,并且return语句永远不会被执行。

这就是为什么你必须在“if”条件之外有return语句。

答案 1 :(得分:0)

如果你的if语句(包含键),你可以指定返回的内容。考虑如果if语句不成立并被忽略,该怎么做。该方法必须返回一些东西,即“Null”返回语句派上用场的地方。例如:

public boolean selectVMwareServer(String par1){

    if (config.containsKey(par1)) {

        return true; //(VMwareServer) config.get(par1);

    }

    return false; // If I dont have this in place, Java has no idea what to do hence it HAS to return something.

}

更好的解决方案可能是:

创建新字段说X,

public void selectVMwareServer(String par1) {

    if (config.containsKey(par1)) {

        X =  (VMwareServer) config.get(par1);

    }
    else//do nothing, 


}

在此之后你可以使用X但是你需要解决你的问题。希望它有点清楚..

答案 2 :(得分:0)

  

是因为方法有返回对象吗?

基本上,是的。

或者更准确地说,程序的每个“正常终止”路径都必须返回一个可以分配给方法返回类型的值。


请注意,实际上可以实现非空方法而不需要 return语句; e.g。

    public int test() {
        throw new SomeUncheckedException(...);
    }

......但这通常没用。编译器的路径分析代码可以确定test方法不能超过throw语句...因此不需要跟随它的return语句。 (实际上添加一个是编译错误。)