2016-07-18 3 views
0

동일한 이름을 가진 2 개의 클래스.같은 이름의 클래스 가져 오기

public class Predictor() 
{ 
    String name; 
    PredictorA predictorA; 
    PredictorB predictorB; 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public PredictorA getPredictorA() { 
     return predictorA; 
    } 
    public void setPredictorA (PredictorA predictorA) { 
     this.predictorA = predictorA; 
    } 
    public PredictorB getPredictorB() { 
     return predictorB; 
    } 
    public void setPredictorB(PredictorB predictorB) { 
     this.predictorB = predictorB; 
    } 
} 

예측기 A와 예측기 B도 마찬가지입니다.

패키지 predictor.version1 클래스 Predictor, PredictorA, PredictorB.

패키지 predictor.version2 여러 가지 방법과 결과라는 클래스 예측기, PredictorA, PredictorB

다른 클래스입니다.

import XX 
public class Result() 
{ 
    public void prediction(Predictor predictor) 
    { 
    ... 
    predictor.getPredictorA().getName(); 
    ... 
    } 
} 

나는이 수업 결과 withour 클래스 결과에서 패키지 predictor.version2 및 방법 예측의 패키지 predictor.version1의 예측 인자 및 예측기를 사용할 수 있어야합니다.

+0

당신이 원하는 것은 기본 다형성이다. Predictor 클래스 (및 PredictorA 클래스와 PredictorB 클래스 모두)가 공통 인터페이스 또는 수퍼 클래스에서 상속 받도록하십시오. – VGR

+0

그럴 수 없습니다. 클래스를 변경할 수 없습니다 (정확히 동일하지 않으며 JAXB로 생성됩니다. 필요하며 예측 자와 같은 다른 클래스 안에 있습니다). – Regular

답변

2

같은 이름의 두 클래스를 가져온 다음 사용하려고하면 컴파일러에서 두 클래스 중 어느 것을 의미하는지 모를 수 있기 때문에 작동하지 않습니다. 가져 오기 대신 클래스 중 하나 이상의 정규화 된 이름을 사용해야합니다. 예를 들어

:

package whatever; 

import predictor.version1.Predictor; 

public class Result { 
    // Uses the Predictor from package predictor.version1 which was imported 
    public void prediction(Predictor p) { 
     // ... 
    } 

    // Use fully-qualified class name to indicate that Predictor 
    // from package predictor.version2 should be used 
    public void prediction(predictor.version2.Predictor p) { 
     // ... 
    } 
} 
+0

하지만 같은 코드를 두 번 가지고 있습니다. 그렇지 않습니까? – Regular

+0

두 클래스에 공통 수퍼 클래스가없는 경우이를 피할 방법이 없습니다. 두 개의 무관 한 클래스에서 작동하는 하나의 메소드를 작성하는 방법은 없습니다 (물론, 리플렉션을 사용하는 것이 좋지만 실제로는 못 생기고 성가 시며 형식이 안전하지 않을 수 있습니다). – Jesper

관련 문제