У меня проблема с HashMap. Эта проблема такая же для любых других дженериков (LinkedList и т. Д.). Скажем, у меня есть 2 classess:Java HashMap для хранения различных объектов
Класс A:
public class A {
public void aMethod() {
System.out.println("A");
}
Класс B, удлиняет:
public class B extends A {
public void bMethod() {
System.out.println("B");
}
Теперь в классе с основным методом, который я делаю HashMap для хранения экземпляры этого 2 classess:
import java.util.HashMap;
public class TestList {
public static void main(String[] args) {
//I'm making 2 objects representing A and B class:
A objA = new A();
B objB = new B();
// I'm making a HasMap storing A class objects, where I can
// also store B objects, because B is subclass of A
HashMap<String, A> myObjects = new HashMap<String, A>();
myObjects.put("objA", objA);
myObjects.put("objB", objB);
// using a method from class A is working fine on objA:
myObjects.get("objA").aMethod();
// but if I want to use a method from B class on objB
// I need to cast:
((B) myObjects.get("objB")).bMethod();
}
}
есть ли способ сохранить объект из разных classess в одном HashMap, который не требует литья для использования других (расширенных) методов?
Я хотел бы использовать:
myObjects.get("objB")).bMethod();
Без литья. Спасибо.
Без кастинга и вызова произвольных методов? Конечно нет. Это точка Java, чтобы явно не знать, с чем вы работаете. –
Если вам нужно часто бросать, возможно, это означает, что вы можете улучшить дизайн своих классов 'A' и' B'. – ericbn