Создание иерархии подклассов JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Создание иерархии подклассов Java

Сообщение Anonymous »

Я пытаюсь настроить иерархию мест в Java. Место может быть большим или маленьким, а более крупные места включают в себя меньшие подлокации. Итак, мир содержит страны, страны содержат города и так далее, вплоть до зданий и комнат.

Я создал абстрактный класс под названием Place, который является родительским для всех этих классов. типы. Каждое место содержит график подлокаций, родительское местоположение и возможность получения родительских подлокаций (то есть соседей)

Основная проблема, с которой я сталкиваюсь, заключается в том, что родительское местоположение подлокации должны быть экземплярами своего класса, но нет возможности указать это с помощью Java.

Я рассматривал возможность жесткого кодирования всех типов, чтобы getParent города возвращал Country и getSublocations возвращают график построения, но это создает некоторые проблемы с изменением функциональности классов или добавлением новых классов, а также требует ужасающего количества копирования кода. Есть ли другие способы решить эту проблему?

РЕДАКТИРОВАТЬ:

Спасибо за все ответы. Это то, что у меня есть до сих пор. Это не идеально, но и не так уж плохо. Единственный код, который мне пришлось скопировать, — это реализация getNeighbors(). Раньше это было реализовано непосредственно в абстрактном классе (this.getParent().getSublocations().getEdges(this) ), но это была всего лишь одна строка кода.

import java.util.HashSet;
public abstract class Place {
//World, Region, City, Building, Room
public enum Direction {
East, Northeast, North, Northwest, West, Southwest, South, Southeast, Invalid;
public static Direction fromInt(int i) {
switch (i) {
case 0: return East;
case 1: return Northeast;
case 2: return North;
case 3: return Northwest;
case 4: return West;
case 5: return Southwest;
case 6: return South;
case 7: return Southeast;
default: return Invalid;
}
}
public static Direction fromAngle(double angle) {
return fromInt((int) (angle+22.5)/45);
}
}

protected final int locked = Integer.MAX_VALUE;
protected int x, y; //longitude and latitude
public abstract String getName();
public abstract Graph getSublocations();
public abstract T getParent();
public abstract HashSet getNeighbors();

public final Direction getDirection(Place otherPlace) {
if (otherPlace == null) {
return Direction.Invalid;
} else if (this.getClass() == otherPlace.getClass()) {
return Direction.fromAngle(Math.atan2(otherPlace.y-y, otherPlace.x-x));
} else {
return Direction.Invalid;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/466 ... subclasses
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»