为什么我在这个使用枚举的随机值来构建我的实例的工厂 class 中出现这些错误?
Why I have these error in this factory class that use random values of an enum to build my instance?
我在尝试在 Java 中实现一个工厂 class 时遇到了一些困难,该工厂构建了一个 RoomTipology 对象,从 [=35] 中选择一个随机值=]枚举。所以我有以下情况:
public class RoomTipologyMockFactory {
private RoomTipology roomTipology;
private static enum RoomTipologyEnum {
MATRIMONIALE,
MATRIMONILAE_SUPERIOR,
QUADRUPLA,
TRIPLA,
SINGOLA;
private static final List<RoomTipologyEnum> VALUES = Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
public static RoomTipologyEnum getRandomRoomTipologyValue() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
}
public static RoomTipology getRandomRoomTipology() {
List<Object> value = RoomTipologyEnum.getRandomRoomTipology();
RoomTipology result = new RoomTipology();
switch (roomTipology) {
case MATRIMONIALE:
result.setName("Matrimoniale");
result.setDescription("Camera matrimoniale con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.");
result.setMaxPeople(2);
result.setTimeStamp(new Date());
break;
case MATRIMONILAE_SUPERIOR:
result.setName("Matrimoniale Superior");
result.setDescription("Camera con bagno dotata di piccolo angolo soggiorno completo di divano e " +
"scrivania, molto luminosa, pavimenti in parquet, riscaldamento e aria condizionata, " +
"armadio/guardaroba, TV a schermo piatto dotata di canali satellitari, connessione Wi-Fi " +
"gratuita, bollitore e selezione di tè e tisane.");
result.setMaxPeople(2);
result.setTimeStamp(new Date());
break;
case QUADRUPLA:
result.setName("Camera Quadruola");
result.setDescription("Camera per quattro persone con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.");
result.setMaxPeople(4);
result.setTimeStamp(new Date());
break;
case TRIPLA:
result.setName("Camera Tripla");
result.setDescription("Camera per tre persone con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.");
result.setMaxPeople(3);
result.setTimeStamp(new Date());
break;
case SINGOLA:
result.setName("Camera Singola");
result.setDescription("Camera singola persona con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.");
result.setMaxPeople(1);
result.setTimeStamp(new Date());
break;
}
return result;
}
}
正如您在前面的代码中看到的,我有一个外部 RoomTipologyMockFactory 用于创建 RoomTipology class.
每次调用 getRandomRoomTipology() 方法时,都必须选择 RoomTipologyEnum 枚举的随机可能值,因此它用它来构建 RoomTipology class.
的特定模拟
因此,在枚举定义中,我创建了 getRandomRoomTipologyValue() 方法,该方法 return 是枚举
中的一个随机值
public static RoomTipologyEnum getRandomRoomTipologyValue() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
我必须将此值用于 getRandomRoomTipology 到 return 特定的 RoomTipology 模拟实例。
我有两个问题:
1) 我已将此枚举声明为 private static(因此它是 class 级别,理论上我不必使用 new() 构建它因为我从当前的 RoomTipologyMockFactory 实例中获取它。但是我做不到:
List<Object> value = RoomTipologyEnum.getRandomRoomTipology();
似乎无法解析为 getRandomRoomTipology() 方法。
2) 我没有更多要打开枚举但我认为 returned 值。
怎么了?我错过了什么?我该如何解决这个问题?
public class RoomTipologyMockFactory {
private enum RoomTipologyEnum {
MATRIMONIALE,
MATRIMONILAE_SUPERIOR,
QUADRUPLA,
TRIPLA,
SINGOLA;
private static final List<RoomTipologyEnum> VALUES = Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
private static List<Object> randomRoomTipology;
public static RoomTipologyEnum getRandomRoomTipologyValue() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
}
public static RoomTipology getRandomRoomTipology() {
RoomTipologyEnum roomTipologyEnum = RoomTipologyEnum.getRandomRoomTipologyValue();
RoomTipology result = new RoomTipology();
switch (roomTipologyEnum) {
case MATRIMONIALE:
break;
case MATRIMONILAE_SUPERIOR:
break;
case QUADRUPLA:
break;
case TRIPLA:
break;
case SINGOLA:
break;
}
return result;
}
}
正如您在问题 getRandomRoomTipologyValue() 中所写,您在枚举中的功能是 Olayinka 首先陈述的内容。
我还通过为枚举提供一些属性解决了开关问题。
我将第一个属性标签命名为避免与名称-Method of Enum
混淆
public class RoomTipologyMockFactory {
private RoomTipology roomTipology;
private static enum RoomTipologyEnum {
MATRIMONIALE("Matrimoniale","Camera matrimoniale con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.",2),
MATRIMONILAE_SUPERIOR(...),
QUADRUPLA(...),
TRIPLA(...),
SINGOLA(...);
private String label;
private String description;
private int maxPeople;
private static final List<RoomTipologyEnum> VALUES = Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
public static RoomTipologyEnum getRandomRoomTipologyValue() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
private RoomTipologyEnum(String label, String description, int maxPeople) {
this.label = label;
this.description = description;
this.maxPeople = maxPeople;
}
public String getLabel() {
return label;
}
public String getDescription() {
return description;
}
public int getMaxPeople() {
return maxPeople;
}
}
public static RoomTipology getRandomRoomTipology() {
RoomTipologyEnum value = RoomTipologyEnum.getRandomRoomTipologyValue();
RoomTipology result = new RoomTipology();
result.setName(value.getLabel());
result.setDescription(value.getDescription());
result.setMaxPeople(value.getMaxPeople());
result.setTimeStamp(new Date());
return result;
}
}
我在尝试在 Java 中实现一个工厂 class 时遇到了一些困难,该工厂构建了一个 RoomTipology 对象,从 [=35] 中选择一个随机值=]枚举。所以我有以下情况:
public class RoomTipologyMockFactory {
private RoomTipology roomTipology;
private static enum RoomTipologyEnum {
MATRIMONIALE,
MATRIMONILAE_SUPERIOR,
QUADRUPLA,
TRIPLA,
SINGOLA;
private static final List<RoomTipologyEnum> VALUES = Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
public static RoomTipologyEnum getRandomRoomTipologyValue() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
}
public static RoomTipology getRandomRoomTipology() {
List<Object> value = RoomTipologyEnum.getRandomRoomTipology();
RoomTipology result = new RoomTipology();
switch (roomTipology) {
case MATRIMONIALE:
result.setName("Matrimoniale");
result.setDescription("Camera matrimoniale con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.");
result.setMaxPeople(2);
result.setTimeStamp(new Date());
break;
case MATRIMONILAE_SUPERIOR:
result.setName("Matrimoniale Superior");
result.setDescription("Camera con bagno dotata di piccolo angolo soggiorno completo di divano e " +
"scrivania, molto luminosa, pavimenti in parquet, riscaldamento e aria condizionata, " +
"armadio/guardaroba, TV a schermo piatto dotata di canali satellitari, connessione Wi-Fi " +
"gratuita, bollitore e selezione di tè e tisane.");
result.setMaxPeople(2);
result.setTimeStamp(new Date());
break;
case QUADRUPLA:
result.setName("Camera Quadruola");
result.setDescription("Camera per quattro persone con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.");
result.setMaxPeople(4);
result.setTimeStamp(new Date());
break;
case TRIPLA:
result.setName("Camera Tripla");
result.setDescription("Camera per tre persone con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.");
result.setMaxPeople(3);
result.setTimeStamp(new Date());
break;
case SINGOLA:
result.setName("Camera Singola");
result.setDescription("Camera singola persona con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.");
result.setMaxPeople(1);
result.setTimeStamp(new Date());
break;
}
return result;
}
}
正如您在前面的代码中看到的,我有一个外部 RoomTipologyMockFactory 用于创建 RoomTipology class.
每次调用 getRandomRoomTipology() 方法时,都必须选择 RoomTipologyEnum 枚举的随机可能值,因此它用它来构建 RoomTipology class.
的特定模拟因此,在枚举定义中,我创建了 getRandomRoomTipologyValue() 方法,该方法 return 是枚举
中的一个随机值public static RoomTipologyEnum getRandomRoomTipologyValue() { return VALUES.get(RANDOM.nextInt(SIZE)); }
我必须将此值用于 getRandomRoomTipology 到 return 特定的 RoomTipology 模拟实例。
我有两个问题:
1) 我已将此枚举声明为 private static(因此它是 class 级别,理论上我不必使用 new() 构建它因为我从当前的 RoomTipologyMockFactory 实例中获取它。但是我做不到:
List<Object> value = RoomTipologyEnum.getRandomRoomTipology();
似乎无法解析为 getRandomRoomTipology() 方法。
2) 我没有更多要打开枚举但我认为 returned 值。
怎么了?我错过了什么?我该如何解决这个问题?
public class RoomTipologyMockFactory {
private enum RoomTipologyEnum {
MATRIMONIALE,
MATRIMONILAE_SUPERIOR,
QUADRUPLA,
TRIPLA,
SINGOLA;
private static final List<RoomTipologyEnum> VALUES = Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
private static List<Object> randomRoomTipology;
public static RoomTipologyEnum getRandomRoomTipologyValue() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
}
public static RoomTipology getRandomRoomTipology() {
RoomTipologyEnum roomTipologyEnum = RoomTipologyEnum.getRandomRoomTipologyValue();
RoomTipology result = new RoomTipology();
switch (roomTipologyEnum) {
case MATRIMONIALE:
break;
case MATRIMONILAE_SUPERIOR:
break;
case QUADRUPLA:
break;
case TRIPLA:
break;
case SINGOLA:
break;
}
return result;
}
}
正如您在问题 getRandomRoomTipologyValue() 中所写,您在枚举中的功能是 Olayinka 首先陈述的内容。
我还通过为枚举提供一些属性解决了开关问题。 我将第一个属性标签命名为避免与名称-Method of Enum
混淆public class RoomTipologyMockFactory {
private RoomTipology roomTipology;
private static enum RoomTipologyEnum {
MATRIMONIALE("Matrimoniale","Camera matrimoniale con bagno interno, Lorem ipsum dolor sit amet, consectetuer " +
"adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus " +
"et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, " +
"pellentesque eu, pretium quis, sem.",2),
MATRIMONILAE_SUPERIOR(...),
QUADRUPLA(...),
TRIPLA(...),
SINGOLA(...);
private String label;
private String description;
private int maxPeople;
private static final List<RoomTipologyEnum> VALUES = Collections.unmodifiableList(Arrays.asList(values()));
private static final int SIZE = VALUES.size();
private static final Random RANDOM = new Random();
public static RoomTipologyEnum getRandomRoomTipologyValue() {
return VALUES.get(RANDOM.nextInt(SIZE));
}
private RoomTipologyEnum(String label, String description, int maxPeople) {
this.label = label;
this.description = description;
this.maxPeople = maxPeople;
}
public String getLabel() {
return label;
}
public String getDescription() {
return description;
}
public int getMaxPeople() {
return maxPeople;
}
}
public static RoomTipology getRandomRoomTipology() {
RoomTipologyEnum value = RoomTipologyEnum.getRandomRoomTipologyValue();
RoomTipology result = new RoomTipology();
result.setName(value.getLabel());
result.setDescription(value.getDescription());
result.setMaxPeople(value.getMaxPeople());
result.setTimeStamp(new Date());
return result;
}
}