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

PredictorA и PredictorB тоже.

package predor.version1 классы Предсказатель, ПредвестникA, ПредсказательB.

пакет predictor.version2 классы Предиктор, PredictorA, PredictorB

Другой класс называется Результат с несколькими методами.

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

Я хочу, чтобы иметь возможность использовать предсказатель пакет predictor.version1 и предсказатель пакет predictor.version2 в классе результате и прогнозирование метода Withour 2 класса Result.

+0

То, что вы хотите, является основным полиморфизм. Пусть оба класса Predictor (и, возможно, оба PredictorA и оба класса PredictorB) наследуются от общего интерфейса или суперкласса. – VGR

+0

Я не могу этого сделать. Я не могу изменить классы (они не совсем одинаковы, и они генерируются с помощью JAXB, они мне нужны, и они находятся внутри других классов, таких как Predictor). – 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