J'ai une méthode qui contient le code suivant:L'utilisation objet final dans les résultats de classe internes anonymes null
public void myMethod(){
final MyDto expectedtDto = new MyDto();
MyRepository reposWithMock = new MyRepository(){
protected MyDao createDao(){
return new MyDao() {
public MyDto someMethod(){
return expectedtDto;
}
};
}
};
reposWithMock.doSomethingWithDao();
}
MyRepository.createDao()
est appelé à partir du constructeur de MyRepository
. MyDao.someMethod()
est appelée à partir de MyRepository.doSomethingWithDao()
.
Cependant, les rendements MyDao().someMethod()
null
au lieu de expectedDto
Toute idée pourquoi est-ce?
Pour plus de précisions, un code de travail réel:
package nl.tests;
public class TestAnon {
static class MyDao {
private int value;
public MyDao(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
static class Repository {
private MyDao dao;
public Repository() {
dao = createDao();
}
protected MyDao createDao(){
return new MyDao(4);
}
public MyDao getDao(){
return dao;
}
}
public static void main(String[] args) {
final MyDao testDao = new MyDao(8);
Repository repos = new Repository() {
protected MyDao createDao() {
if (testDao == null) {
System.out.println("Error ");
return new MyDao(0);
}
return testDao;
}
};
System.out.println("Dao :" + repos.getDao().getValue());
}
}
Il en résulte en:
Error
Dao :0
Quelques informations supplémentaires: Je actuellement (dois) travailler avec Java 1.4. Mon environnement de développement est Rational Application Developer 7.
Addendum, à la réponse donnée (et acceptée). Pour le code ci-dessous, je l'ai fait la méthode publique createDao():
public static void main(final String[] args) {
final MyDao testDao = new MyDao(8);
Repository repos = new Repository() {
public MyDao createDao() {
if (testDao == null) {
System.out.println("Error ");
return new MyDao(0);
}
return testDao;
}
};
System.out.println("Dao :" + repos.getDao().getValue());
System.out.println("Dao :" + repos.createDao().getValue());
}
Retours:
Error
Dao :0
Dao :8
Je suppose que c'est une faute de frappe - devrait être public MyDto somemethod() .. – Bozho
Correction, merci. – dstibbe
theres très peu de code pour continuer - il pourrait potentiellement avoir été ombrage que nous ne pouvons pas voir puisque tout le code source n'est pas fourni - et si vous le réduisiez au code minimaliste (qui compile) et le publiez ici? – Chii