У меня есть метод, который содержит следующий код:Используя конечный объект в анонимных результатах внутреннего класса в нуле
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()
вызываются из конструктора MyRepository
. MyDao.someMethod()
называется от MyRepository.doSomethingWithDao()
.
Однако MyDao().someMethod()
возвращает null
вместо Любая идея expectedDto
почему это?
Для уточнения, некоторые реальные рабочий код:
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());
}
}
Это приводит к:
Error
Dao :0
дополнительная информация: В настоящее время я (должен) работать с Java 1.4. Моей средой разработки является Rational Application Developer 7.
Дополнение к данному (и принятому ответу). Для кода ниже я сделал метод 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());
}
возвращения:
Error
Dao :0
Dao :8
Я предполагаю, что это опечатка - должно быть общедоступным MyDto somemethod() .. – Bozho
Исправлено, спасибо. – dstibbe
. Очень маленький код для продолжения - возможно, было скрыто то, что мы не можем видеть, так как не весь исходный код предоставлен - что, если вы уменьшите его до минималистского кода (который компилируется) и разместите его здесь? – Chii