RoomTipologyオブジェクトを作成して、enumからランダムな値を選択する、Javaでファクトリクラスを実装しようとすると、いくつかの困難があります。前のコードで見ることができるようにインスタンスを構築するためにenumのランダムな値を使用する、このファクトリクラスでこれらのエラーが発生するのはなぜですか?
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;
}
}
は私がRoomTipologyクラスのモックのインスタンスを作成するために使用されている外部RoomTipologyMockFactoryを持っています。だから私は、次のような状況があります。
THT getRandomRoomTipology()メソッドはRoomTipologyEnum列挙型のランダムな可能な値を選択したので、それがRoomTipologyクラスの特定のモックを構築するためにそれを使用する必要が呼ばれるたびに。
したがって、列挙型定義の内部に、私は、ランダムな値が
パブリック静的RoomTipologyEnum getRandomRoomTipologyValue(){ リターンVALUES.get(にRandom.nextInt(列挙を形成返しgetRandomRoomTipologyValue()メソッドを作成しましたサイズ)); }
I特定RoomTipologyモックインスタンスを戻すためにgetRandomRoomTipologyにこの値を使用しなければなりません。
私は2つの問題を抱えて:
1)私はそれを取るので、私はプライベート静的(そう、それはクラスレベルであると、理論的には私は(新しいとそれを構築するために持っていない)としてこの列挙を宣言しました現在RoomTipologyMockFactoryインスタンスからしかし、私は行うことはできません:。
List<Object> value = RoomTipologyEnum.getRandomRoomTipology();
それはgetRandomRoomTipology()メソッドに解決できないようです
。2)私は列挙型に切り替える必要がもうありませんが、返された値を考えると思います。
どうしたのですか?私は何が欠けていますか?この問題を解決するにはどうすればよいですか?
の名前-方法との混同を避けるために、最初のプロパティラベルの名前? – Olayinka
@Olayinka最初のものは私がリストにアクセスできないということです