0

当密钥存在于 HashMap 中时,我试图让方法 selectVMwareServer 返回一个 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;”

4

3 回答 3

3

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

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

于 2013-04-08T01:45:56.840 回答
0

是因为方法必须返回一个对象吗?

基本上,是的。

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


请注意,实际上完全可以在没有return语句的情况下实现非 void 方法;例如

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

...但这通常没有用。编译器的路径分析代码可以确定该test方法不能越过throw语句……因此,return它后面的语句是不必要的。(确实,添加一个会导致编译错误。)

于 2013-04-08T03:03:35.283 回答
0

如果您的 if 语句(包含密钥),您可以指定要返回的内容。考虑一下如果您的 if 语句不成立并被忽略时该怎么办。该方法必须返回一些东西,这就是您的“Null”返回语句派上用场的地方。例如:

公共布尔选择VMwareServer(字符串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 但是您需要解决您的问题。希望它有点清楚..

于 2013-04-08T02:21:30.033 回答