2016-02-07 22 views
-1
public class Office { 
private char building; 
private int floor; 
private int roomnumber;} 

public class Employee { 
private String firstname; 
private String lastname; 
private String mail; 
private String phone; 
private Office office;} 

我正在用Java製作Office,並且每個員工只能限制一個辦公室,這意味着Office的每個實例只能由一個員工使用。辦公室由辦公室組成,幷包含在員工分類中。有沒有人有任何建議如何做到這一點?對構造函數的限制

+3

什麼是與現有代碼的問題? – user2004685

+0

我目前能夠將同一個辦公室添加到幾個不同的員工。我想把有限的人數限制在1人以上,有多少員工可以使用同一間辦公室。 – HRS

+0

如果是這種情況,您應該在Office類中添加'Employee'屬性,並在Employee類中刪除'Office' –

回答

1

下面是做到這一點的一種方法:

  1. 創建Set<String>並開始把物體與building_floor_roomnumber爲重點。
  2. 在初始化Office檢查之前,如果building_floor_roomnumber已經存在於Set中。

這裏是一個小片段進行論證:

public static void main (String[] args) 
{ 
    /* You can also make it global; depending on your needs */ 
    Set<String> office = new HashSet<>(); 
    String key = "A12-London_F6_R121"; 

    if(office.contains(key)) { 
     System.out.println("Already Taken!"); 
    } else { 
     office.add(key); 

     /* Create New Office Object & Initialize it */ 
     Office off = new Office(); 
     off.setBuilding("A12-London"); 
     off.setFloor("F6"); 
     off.setRoom("R121"); 

     /* Set it back to Employee Object */ 
     /* I'm assuming you have some Employee Object named emp */ 
     emp.setOffice(off); 

     System.out.println("Added Successfully!"); 
    } 
} 
+0

在Office類上實現'.equals'和'.hashCode'不是更好嗎?有了這個解決方案,您可以在2個地方維護「Office」邏輯。 –

+0

對不起,如果我誤解了你,但是,你會如何比較任何辦公室對象與所有其他辦公室對象已分配給各自的員工? – user2004685

+0

而不是使用'Set '它會變成'Set ',你必須在if語句之前填寫office對象。優點是,如果一個獨特的「辦公室」的要求發生變化,您必須將其保留在Office類中,而不是在分散的地方。 –

1

如果您的意思是您只希望創建一個Office對象,則需要執行以下操作: 您可以擁有一個布爾類型的靜態類變量,一旦第一個實例創建,您將變爲true。在創建新實例時,您將檢查該布爾值是否爲true,如果是,則可以拋出異常等。
例子:

private static boolean hasBeenInstanciated = false; 

public Constructor(){ 
    if(hasBeenInstanciated){ 
     throw new IllegalStateException("This class has already been instanciated once!"); 
    }else hasBeenInstanciated = true; 
//The rest of your constructor code goes here. 
}