Я хочу создать экземпляр объекта для перечисления. Например:
public enum Type {
TYPE1("type_name_1", new TypeObj1()),
TYPE2("type_name_2", new TypeObj2());
TypeInterface typeObj;
String value;
}
public class TypeObj1 implements TypeInterface {
...
}
public class TypeObj2 implements TypeInterface {
...
}
Это правильный способ сделать это? Я хочу, чтобы к перечислению был прикреплен один объект TypeInterface. Пожалуйста, предложите альтернативы.
Очень неясно, чего вы пытаетесь достичь. Помогает ли этот вопрос об использовании дженериков с перечислением? stackoverflow.com/a/11490505/721855
@davidalayachew нет, TYPE1 будет иметь только TypeObj1
@aled Я хотел знать, правильный ли подход, который я использую, или нет. Я хотел бы создать экземпляр объекта класса, реализующего TypeInterface в конструкторе Enum. Это правильная практика?
Тогда мой следующий вопрос, вы сказали, что TYPE1 может взаимодействовать только с TypeObj1. Это то, что вы хотите применить компилятором? Или вы просто хотите отобразить отношения и посмотреть, есть ли лучший способ сделать это?




Создайте конструктор для вашего enum, который соответствует аргументам, которые вы указываете.
Нет модификатора доступа; и private является избыточным.
Типы Enum (Учебные руководства по Java™ > Изучение языка Java > Классы и объекты).
public enum Type {
TYPE1("type_name_1", new TypeObj1()),
TYPE2("type_name_2", new TypeObj2());
final TypeInterface typeObj;
final String value;
Type(String value, TypeInterface typeObj) {
this.value = value;
this.typeObj = typeObj;
}
}
Да, вы движетесь в правильном направлении.
Вам понадобится конструктор для назначения переданных объектов вашим полям-членам.
Сделайте свои поля-члены final, чтобы предотвратить их переназначение другой ссылке на объект.
public enum Type {
// Enum objects.
TYPE1("type_name_1", new TypeObj1()),
TYPE2("type_name_2", new TypeObj2());
// Member fields.
final TypeInterface typeObj;
final String value;
// Constructor.
Type( final String value , final TypeInterface typeInterface ) {
this.typeObj = typeInterface ;
this.value = value ;
}
}
Совет: Этот вид мыслительного упражнения будет более ясным и продуктивным, если вы придумаете простой, но полуреалистичный сценарий, а не свои аморфные «TypeInterface» и «значение».
public enum Pet {
// Enum objects.
FLUFFY( "tuxedo" , new Cat() ),
ROVER( "chocolate Lab" , new Dog() );
// Member fields.
final Animal animal;
final String description;
// Constructor.
Type( final String desc , final Animal animal ) {
this.animal = animal ;
this.description = desc ;
}
}
Что вы подразумеваете под привязанным к перечислению? Может ли
TYPE1иметьTypeObj2, например?