2017-04-15 4 views
0

도시 및 상태 필드가 포함 된 위치 클래스를 만들었습니다. 그런 다음 다른 주소 필드와 전화 번호가 포함 된 호텔 클래스를 만들었습니다. 최종 목표는 단일 위치에 여러 호텔을 추가 할 수 있도록하는 것입니다. 호텔 생성자를 통해 만든 위치 인스턴스를 전달하고 싶습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까?생성자에서 객체의 특정 인스턴스 전달

package reservations; 

public class Test { 
    public static void main(String [] Args){ 

     addLocations(); 
     addHotels(); 
     ReservationDisplay check = ReservationDisplay.getInstance(); 
     check.getUserInfo(); 

    } 

    public static void addLocations(){ 
     Location dc = new Location("Washington", "DC"); 
     Location cali = new Location("San Francisco", "CA"); 
     Location ny = new Location("Ney York", "NY"); 
     Location vegas = new Location("Las Vegas", "NV"); 
     Location miami = new Location("Miami", "FL"); 
    } 

    public static void addHotels(){ 

     Hotel mgm = new Hotel("Blah", "1234 Blvd", "55555", "(999)-999-9999", vegas); 
    } 
} 
+0

디자인에 동의하지 않습니다. 두 개의 다른 호텔은 같은 _exact_ 주소에 있지 않을 가능성이 큽니다. 데이터베이스 테이블을 모델링하는 경우, 주소에 대해 별도의 테이블을 유지하지 않을 수도 있습니다. –

+0

@TimBiegeleisen '위치'는 실제로 도시/주를 보유하고 있기 때문에 '도시'에 대한 잘못된 이름입니다. 같은 도시에있는 2 개의 호텔은 논리적입니다. Location 클래스의 이름은 오해의 소지가 있습니다. – twain249

답변

0

위치를 취하는 호텔 클래스에서 생성자를 만듭니다. 이

public Hotel(Location l, <other fields>) 
{ 
    // Set other fields 
    this.location = l; 
    l.addHotel(this); 
} 

이 같은

뭔가 필드가 위치와 위치의 호텔로 보유 할 위치 클래스의 addHotel(Hotel h) 방법의 보유 호텔 클래스가 있다고 가정합니다. 당신이 당신의 호텔을 만들 때

그럼 당신은 같이 그들을 부를 것이다 ::

Hotel h = new Hotel(ny, <otherfields>); 

을 당신은 당신의 호텔을 만들 때 생성 한 위치에 대한 참조를해야합니다.

편집 :

당신이 그들에게 필드 변수를 만들 필요가 당신이 함수의 addLocations() 눈에 보이는 외부에서 생성 한 위치 확인 (직접 하나 또는 모두를 저장하는 목록 /지도 작성)

뭔가를하려면 다음과 같이 만들 수 있습니다 :

public class Test { 
    private static Map<String, Location> locations = new HashMap<String, Location>(); 
    // Or list or straight variables or other way of holding the locations 
    // Some structure to hold the hotels will be necessary too 


    public static void addLocations() 
    { 
     locations.put("Washington", new Location("Washington", "DC")); 
     // Same line for other locations 
    } 


    public static void addHotels() 
    { 
     Hotel h = new Hotel(locations.get("Washington"), <other fields>); 
     // Add the hotel to the list/map whatever of hotels to use it elsewhere 
    } 
+0

이것은 기본적으로 내가 시도한 것이지만 "vegas는 변수로 해결할 수 없다"는 말을 들었습니다. addLocations 블록에서 vegas를 선언했기 때문에 변수가 범위를 벗어 났으므로 확신 할 수 있지만이를 해결하는 방법을 알지 못합니다. – oznomal

+0

@oznomal 합리적인 것으로 들립니다. 필요한 것은 location addLocations 메소드 외부에서 위치를 볼 수있게하는 것입니다. 나는 그것을 보여주기 위해 나의 대답을 편집 할 것이다. – twain249

0

나는 당신의 예제에서 당신이하는 방식이 괜찮은 것 같아요. db로 모델링했다면 호텔 테이블에 우편 번호 만 남기고 우편 번호를 도시 이름에 매핑하는 또 다른 테이블이 있습니다. 나는 이것을 당신의 물건에 맵 할 수있는 좋은 방법이라고 말하고 싶습니다.

관련 문제