Взгляните на этот код (из здесь )
abstract class EntityA {
AssocA myA;
abstract void meet();
}
abstract class AssocA {
int something;
abstract void greet();
}
class AssocAConcrete extends AssocA {
void greet() {
System.out.println("hello");
}
void salute() {
System.out.println("I am saluting.")
}
}
class EntityAConcrete extends EntityA {
void meet() {
System.out.println("I am about to meet someone");
((AssocAConcrete)myA).salute();
}
}
Есть два параллельных дерева наследования, для родительского класса и ассоциированного класса. Проблема в строке 23:
((AssocAConcrete) myA) .salute ();
Это неприятно, и у меня такие вещи есть по всему моему коду. Несмотря на то, что эта строка является частью конкретной реализации Entity, мне нужно напомнить ей, что я хочу использовать конкретную реализацию AssocA, AssocAConcrete.
Есть ли какая-то аннотация для объявления этой связи? Или есть лучший, более разговорный способ Java выразить этот замысел? Спасибо!
Это ответ на @Dave, потому что я хочу вставить код ...
Интересно! Таким образом, вызов будет выглядеть примерно так:
AssocAConcrete myAssoc = new Assoca();
EnitityA myEntity = new EntityA();
myEntity.setAssoc(myAssoc);
myAssoc.salute();
Да? Это действительно круто. Думаю воспользуюсь!