0

キーが HashMap に存在する場合、selectVMwareServer メソッドが 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;

    }

}

注:これは非常に進行中の作業です。

日食を沈黙させるために、「return null;」を追加させました。

4

3 に答える 3

3

メソッドに戻り値の型がある場合、メソッドには常に return ステートメントが必要です。あなたのコードによると、「if」条件が満たされない場合、その条件に入ることがなく、return ステートメントが実行されることはありません。

そのため、「if」条件の外に return ステートメントが必要です。

于 2013-04-08T01:45:56.840 に答える
0

メソッドがオブジェクトを返さなければならないからですか?

基本的に、はい。

より正確には、プログラムのすべての「正常終了」パスは、メソッドの戻り値の型に割り当てることができる値を返す必要があります。


実際には、ステートメントをまったく使用せずに非 void メソッドを実装できることに注意してください。return例えば

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

...しかし、これは一般的には役に立ちません。コンパイラのパス分析コードは、testメソッドがステートメントを通過できないことを把握できthrowます...したがって、returnその後のステートメントは必要ありません。(実際、これを追加するとコンパイル エラーになります。)

于 2013-04-08T03:03:35.283 に答える
0

if ステートメント (キーを含む) の場合に返すものを指定します。if ステートメントが成り立たず、無視された場合の対処方法を考えてください。メソッドは何かを返す必要があります。そこで「Null」return ステートメントが役に立ちます。例えば:

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 を使用できますが、問題を解決する必要があります。そのやや明確なことを願っています..

于 2013-04-08T02:21:30.033 に答える