Java - как создать свой собственный тип? - PullRequest
2 голосов
/ 18 июня 2010

Возможно ли создать собственный Java-тип, похожий на расширяемый enum?

Например, у меня есть пользовательские роли, которые использует определенный модуль, а затем подпакет предоставляет дополнительные роли.

Что может быть связано с JDK?

Ответы [ 5 ]

4 голосов
/ 18 июня 2010

Поскольку Enums не могут быть расширены, вы должны подделать его.

Создать класс с защищенным конструктором.

Затем вы можете создать public static final FakeEnum экземпляров в вашем классе.

public class FakeEnum {

    private String name;
    private Object something;

    protected FakeEnum(String name, Object otherParam) {
        this.name = name;
        this.something = otherParam;
    }

    // public getters

    public static final FakeEnum ONE = new FakeEnum("one", null);
    public static final FakeEnum TWO = new FakeEnum("two", null);
    public static final FakeEnum THRE = new FakeEnum("thre", null);
}

А затем вы можете расширить его и добавить к нему еще несколько вещей, например:

public class ExtendedFakeEnum extends FakeEnum {

    public static final FakeEnum EXTENDED_ONE = new FakeEnum("extended_one", null);
    public static final FakeEnum EXTENDED_TWO = new FakeEnum("extended_two", null);

}
1 голос
/ 18 июня 2010

Хорошо,

Что я сделаю, это напишу интерфейс, а затем несколько реализаций для того, чтобы найти пользователей для уведомления в определенном событии Правильная реализация будет внедрена во время выполнения, а затем она сделает все необходимое, чтобы найти правильных пользователей. Эта реализация может просто принимать аргументы для настройки имени группы для поиска, а затем возвращать список пользователей.

Я учусь использовать интерфейсы / дизайн по контракту больше. Большинство моих разработок в прошлом имели только одну реализацию, поэтому я посчитал это спорным вопросом и забыл об этом инструменте / средстве.

Спасибо

Walter

0 голосов
/ 18 июня 2010

Если вам нужно «расширяемое перечисление», возможно, вам лучше подойдет словарь, посмотрите на java.util.Dictionary<K,V>, где K - это имя ключа (как вы будете ссылаться на конкретное значение, а V - это значение / объект, которыйдолжен быть возвращен указанным ключом.

Я думаю, это самое близкое, что я когда-либо приходил к расширяемому Enum.

Кроме того, посмотрите на этот вопрос по SO , это тоже может решить эту проблему.

0 голосов
/ 18 июня 2010

Разработка собственного типа в Java невозможна.Все, что вам нужно сделать, может быть сделано с использованием различных шаблонов дизайна.

0 голосов
/ 18 июня 2010

Понятие расширяемого перечисления не имеет смысла.Перечисление используется для статического объявления всего набора экземпляров, которые когда-либо будут создаваться для его собственного типа.Разрешение на его продление сделало бы это невозможным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...