2010-03-10 5 views
2

Java에서 선언을 어떻게 전달합니까?Java : 네임 스페이스의 클래스 선언 전달

두 개의 클래스가 있는데, 각각 다른 클래스에서 하나의 메소드를 호출해야하며 두 클래스는 서로 다른 네임 스페이스 내에 있습니다. 예를 들어 ...

package one; 

class A { 
    public void foo() { 
     B b = new B(); 
     b.bah(); 
    } 
} 

package two; 

class B { 
    public void bah() { 
     A a = new A(); 
     a.foo(); 
    } 
} 

UPDATE

이 코드는 컴파일시 에러가 사이클은 빌드 경로에서 발견 된 "던질 것이다 발생 이클립스에서

. .. ".

+0

나는 이것이 당신이주고있는 예제이며 그것이 StackOverflowError를 일으킬 것이라는 것을 알고 있다고 가정한다. – DaveJohnston

+2

또한 일반적으로 디자인에 몇 가지 문제가 있음을 나타냅니다. 종속성은 일반적으로 한 방향으로 만 있어야합니다. –

답변

3

그냥 가져 오십시오. 자바는 C++보다 훨씬 더 똑똑합니다.

package one; 

import two.B; 

class A { 
    public void foo() { 
     new B().bah(); 
    } 
} 

또는 전체 이름을 사용합니다 :

package one; 

class A { 
    public void foo() { 
     new two.B().bah(); 
    } 
} 

을하지만, 불필요한 말을하는, 예외가 (적어도에 슬로우됩니다

+0

Java에서 가져 오기 순서가 중요하지 않습니다. 순환 참조는 추가 코드없이 가능합니다. –

0

글쎄, 당신은 클래스를 가져 당신이 올린 스 니펫 ...).

+0

내 스 니펫은 내가 아는 쓰레기지만, 그 점을 가로 지른다! ;) –

+0

@ 벤, 예, 당신이 알고 있다고 생각했지만, 확실히 말하고 싶었습니다. –

0

여기에 의견이 있으면 (예 : 컴파일러가 처리 할 수있는 명시 적 전달 선언을 할 필요가 없음) Eclipse 오류를 경고로 다운 그레이드하고이를 무시해야합니다.

은>

창> 환경 설정> 자바> 컴파일러> 건물 ...이 이동 할이 코드는 컴파일 시간 오류는 것이다 발견 될 때 경로 문제> 원형 의존성

이클립스에서
+0

이 코드를 실행하면 Eclipse에서 StackOverflowError가 발생한다고 경고합니다. 아니면 실제 코드에 연속주기를 멈추게하는 일종의 브레이크 아웃 조건이 있습니까? – DaveJohnston

+0

이것은 '실제 코드'가 아니며, 제 문제를 설명하는 코드의 예일뿐입니다. –

1

를 구축하려면 "사이클이 빌드 경로에서 발견되었습니다 ...".

작업 공간의 다른 Eclipse 프로젝트에있는 클래스간에 순환 의존성이 있으므로 Eclipse가 불만 스럽다고 생각합니다. Eclipse는 선형 순서로 프로젝트를 빌드 할 수 있기를 원합니다.

상호 의존적 인 클래스를 같은 프로젝트에 넣으면 Eclipse가 만족 스러울 것입니다.

관련 문제