Я пытался выяснить, почему методы Java с аннотациями не сохраняют свои аннотации при переопределении в дочерних классах или при реализации интерфейсов. И я наткнулся на кое-что весьма интересное: если вы создаете абстрактный класс с абстрактным методом, имеющим аннотацию, то при реализации этого метода аннотация наследуется.
Этот код работает успешно.
public abstract class SpringFxController {
@PostConstruct
public abstract void springInitialize();
}
public class MainController extends SpringFxController {
@Override
public void springInitialize() {
System.out.println("Worked!");
}
}
public interface SpringFxController {
@PostConstruct
public void springInitialize();
}
public class MainController implements SpringFxController {
@Override
public void springInitialize() {
System.out.println("Not worked!");
}
}
public class SpringFxController {
@PostConstruct
public void springInitialize()
{
return;
}
}
public class MainController extends SpringFxController {
@Override
public void springInitialize() {
System.out.println("Not worked!");
}
}
Я пытался выяснить, почему методы Java с аннотациями не сохраняют свои аннотации при переопределении в дочерних классах или при реализации интерфейсов. И я наткнулся на кое-что весьма интересное: если вы создаете абстрактный класс с абстрактным методом, имеющим аннотацию, то при реализации этого метода аннотация наследуется. Этот код работает успешно. [code]public abstract class SpringFxController { @PostConstruct public abstract void springInitialize(); }
public class MainController extends SpringFxController { @Override public void springInitialize() { System.out.println("Worked!"); } } [/code] Но это не работает [code]public interface SpringFxController { @PostConstruct public void springInitialize(); }
public class MainController implements SpringFxController { @Override public void springInitialize() { System.out.println("Not worked!"); } } [/code] Это тоже не работает [code]public class SpringFxController { @PostConstruct public void springInitialize() { return; } }
public class MainController extends SpringFxController { @Override public void springInitialize() { System.out.println("Not worked!"); } } [/code] [b]Может кто-нибудь объяснить, почему это так?[/b]