我正在尝试使方法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;”
答案 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
语句。 (实际上添加一个是编译错误。)