2016-12-30 3 views
-1

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)私は列挙型に切り替える必要がもうありませんが、返された値を考えると思います。

どうしたのですか?私は何が欠けていますか?この問題を解決するにはどうすればよいですか?

+0

の名前-方法との混同を避けるために、最初のプロパティラベルの名前? – Olayinka

+0

@Olayinka最初のものは私がリストにアクセスできないということです値= RoomTipologyEnum.getRandomRoomTipology();方法 – AndreaNobili

答えて

0
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; 
    } 

} 
+0

少し裸である、あなたは削除されたコメントを追加する必要があります – Turo

0

ご質問Olayinkaは、最初に述べたものをgetRandomRoomTipologyValue()、に書いたように列挙型であなたの目的球は、あります。

私はEnumにいくつかのプロパティを与えることでスイッチの問題に対処しました。 私は正確にエラーや問題がある何の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; 

    } 

} 
関連する問題