2013-04-08 2 views
0

Я пытаюсь сделать метод selectVMwareServer возвращать объект VMwareServer, когда ключ присутствует в HashMap. Но 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;»

+0

Поскольку вы всегда возвращаете 'VMWareServer', объявляете переменную' config' как 'Map '. Затем вам не нужно делать акцию в операторе return. –

ответ

3

Метод всегда должен иметь оператор возврата, если он имеет тип возврата. Согласно вашему коду, если условие «если» не выполнено, оно никогда не войдет в это условие и этот оператор возврата никогда не будет выполнен.

Вот почему вы должны иметь оператор возврата за пределами условия «если».

+0

Mmn .. Какой цикл? –

+0

typo, я имел в виду блок if – Abi

0

Вы указываете, что возвращать в случае вашего оператора if (содержит ключ). Подумайте, что делать, если ваш оператор if недействителен и игнорируется. Метод должен возвращать что-то, вот где вам подходит оператор return «Null». например:

общественного логический 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, но вам нужно решить вашу проблему. Надеюсь, что он несколько ясен.

0

Это потому, что метод должен вернуть объект?

В принципе, да.

Или, точнее, каждый путь «нормального завершения» для программы должен возвращать значение, которое может быть присвоено типу возвращаемого метода.


Обратите внимание, что это на самом деле можно реализовать непустой метод безreturn заявления на всех; например

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

... но это обычно не полезно. Код анализа пути компилятора может определить, что метод test не может пройти мимо инструкции throw ... и, следовательно, следующий оператор return не нужен. (Действительно, это была ошибка компиляции, чтобы добавить ее.)

Смежные вопросы