Java 为什么eclipse在返回语句中给我一个错误?

Java 为什么eclipse在返回语句中给我一个错误?,java,eclipse,return,Java,Eclipse,Return,我试图使selectVMwareServer方法在HashMap中存在密钥时返回VMwareServer对象。但是eclipse不喜欢我放置return语句的位置。为什么会这样?是因为方法必须返回一个对象吗 这是我的密码 package configFS; import java.util.HashMap; import java.util.Map; public class Config { private Map <String, Object> config;

我试图使selectVMwareServer方法在HashMap中存在密钥时返回VMwareServer对象。但是eclipse不喜欢我放置return语句的位置。为什么会这样?是因为方法必须返回一个对象吗

这是我的密码

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;

    }

}
包配置;
导入java.util.HashMap;
导入java.util.Map;
公共类配置{
私有地图配置;
公共配置(){
/*
*这将在每次创建Config.class的新实例时创建一个新配置
*通过使用字符串和对象的泛型,我可以将名称标记链接到所需的任何对象。
*/
config=newhashmap();
}
public void addVMwareServer(字符串par1){
config.put(par1,新的VMwareServer());
}
public void removeVMwareServer(字符串par1){
配置删除(par1);
}
公共VMwareServer选择VMwareServer(字符串par1){
if(config.containsKey(par1)){
return(VMwareServer)config.get(par1);
}
返回null;
}
}
注意:这是一项正在进行的工作


为了使eclipse静音,我让它添加“returnnull;”

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


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

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


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

指定在if语句(包含键)的情况下返回的内容。想一想如果你的if语句不正确,被忽略了该怎么办。方法必须返回一些东西,这就是“Null”return语句的用武之地。例如:

公共布尔selectVMwareServer(字符串par1){

更好的解决方案可能是:

创建新字段,例如X

public void selectVMwareServer(String par1) {

    if (config.containsKey(par1)) {

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

    }
    else//do nothing, 


}

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

您可以指定在if语句(包含键)的情况下返回什么。考虑在if语句不成立且被忽略的情况下该怎么办。该方法必须返回一些内容,即“Null”的位置return语句很方便。例如:

公共布尔selectVMwareServer(字符串par1){

更好的解决方案可能是:

创建新字段,例如X

public void selectVMwareServer(String par1) {

    if (config.containsKey(par1)) {

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

    }
    else//do nothing, 


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

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

基本上,是的

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


请注意,实际上可以在根本不使用
return
语句的情况下实现非void方法;例如

    public int test() {
        throw new SomeUncheckedException(...);
    }
…但这通常不是有用的。编译器的路径分析代码可以指出,
test
方法不能通过
throw
语句…因此不需要在它后面加一个
return
语句。(实际上,添加一个语句会导致编译错误。)

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

基本上,是的

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


请注意,实际上可以在根本不使用
return
语句的情况下实现非void方法;例如

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

…但这通常不是有用的。编译器的路径分析代码可以指出,
test
方法不能通过
throw
语句…因此不需要在它后面加一个
return
语句。(实际上,添加一个语句会导致编译错误。)

typo,我指的是if blocktypo,我指的是if blocktypo,因为您总是返回
VMWareServer
,所以将
config
变量声明为
Map
。然后,您不需要在return语句中进行强制转换。因为您总是返回
VMWareServer
,所以将
config
变量声明为
Map>。那么,您不需要在return语句中使用强制转换。