Большой Воронежский Форум
» Программирование>Java. мелкие вопросы
vuster 12:29 26.12.2010
подскажите, если не трудно, одну вещь из Явы:

есть класс, допустим А, в нём создан объект safe типа HashMap<String, Currency>, где класс Currency описан со всеми сетами, гетами, всё как надо.

теперь я хочу в другом классе (назовём B) вызвать встроенный хешмеповский метод для safe:
safe.get(название ключа)

отладчик ругается, поскольку класс другой и ни о каком safe он ничего не знает. Вопрос, как сослаться на А, чтобы класс B нормально воспринял эту строчку? [Ответ]
manifest 12:36 26.12.2010
class B extends A {} ?

если вопрос не о наследовании, код в студию. [Ответ]
vuster 15:23 26.12.2010
наследование здесь вроде бы не при чём

class Depository {
HashMap<String, Currency> safe =
new HashMap<String, Currency>();

public Depository() {
super();
}
}

Currency не привожу, там просто 3 поля и методы get,set

import java.util.HashMap;

public class Bank {

private Depository depInstance;

public final Depository getDepository() {
return depInstance;
}

public Bank(Depository depInstance) {
this.depInstance = depInstance;
}

public void addCurrency(Currency c) {
safe.put(c.getName(),c);
}
}

и вот здесь ошибка: safe -неизвестный объект. Если его описать как объект класса Depositiory, тогда будет проблема с методом put, ведь он не описан в Depository, а является встроенным методом HashMap [Ответ]
manifest 16:04 26.12.2010
1) тут либо свойcтво safe класса Depository должно быть публичным
class Depository {
public HashMap<String, String> safe = new HashMap<String, String>();
...
}

и тогда можно сделать так:
class Bank {
public void addCurrency(String c) {
depInstance.safe.put("key", c);
}
...
}

2) либо отказаться от свойства safe вовсе и унаследовать твой класс от HashMap
class Depository extends HashMap<String, String> {}

тогда можно будет сделать так:
class Bank {
public void addCurrency(String c) {
depInstance.put("key", c);
}
...
}

Какой подход использовать, зависит только от тебя и твоей задачи, но:
1) делать свойства публичными плохой стиль, хороший - завернуть в методы get/set
2) по Страуструпу, наследования нужно избегать везде где можно обойтись свойством.

* в моих примерах, вместо твоего Currency используется String [Ответ]
Shoroh 10:44 08.02.2011
если работаете без объявления классов, то тот класс, метод которого вызываете должен быть статичесим. [Ответ]
Вверх