2016-12-08 12 views
0

Если класс Foo имеет HashMap, а именно:Когда нужно обернуть методы поля объекта или передать сам объект?

public class Foo { 

    private HashMap <String, Integer> fooMap; 

    //other foo methods 

} 

Когда инкапсулирования fooMap, каковы обстоятельства, по которым fooMap должны его методы, завернутые, как показано ниже:

public class Foo { 

    private HashMap<String, Integer> fooMap; 

    //other foo methods 

    public int getFoo(String s) { 

     return fooMap.get(s); 

    } 

    //other wrapper methods 

} 

или иметь fooMap вернулся сам:

public class Foo { 

    private HashMap<String, Integer> fooMap; 

    //other foo methods 

    public HashMap<String, Integer> getFooMap() { 

     return fooMap; 

    } 

} 

ответ

0

в целом это плохая идея, чтобы выставить свои поля, и я хотел бы предложить, чтобы вернуть копию вашей карты() инст ead реального reference.As ваш код растет, вы не всегда можете следовать за всем пути, который поток может принять какой-либо другой объект может принять вашу карту объекта Foo передать его на какой-то другой объект, который будет добавлять значения, и потребуется несколько дней отладки, чтобы понять что пошло не так. Вот некоторые ссылки, которые я нашел по этим темам http://javarevisited.blogspot.co.il/2012/03/private-in-java-why-should-you-always.html и Why encapsulation is an important feature of OOP languages?