Mam tak o:
abstract class Page {
final PageContent content;
final int id;
public Page (PageContent content, int id) {
this.content = content;
this.id = id;
}
abstract Post getPost(int id);
}
class Page4programmers extends Page {
public Page4programmers (PageContent content, int id) {
super(content, id);
}
@Override
Post getPost(int id) {
PostFactory factory = new PostFactory4programmers();
factory.createPosts(content).get(id - 1);
}
}
działa, ale chciałbym dokonać dependency inversion i żeby PostFactory
był zapodawany z zewnątrz i jednocześnie, żeby ten PostFactory
był finalny. Musiałbym go dodać to do konstruktora, ale nie mogę tego dać przed `super(content, id), bo super musi być pierwsze
class Page4programmers {
final PostFactory factory;
public Page4programmers (PageContent content, int id, PostFactory factory) {
this.factory = factory;
super(content, id);
}
//...
}
a jak dam po to nic się nie stanie
class Page4programmers {
final PostFactory factory;
public Page4programmers (PageContent content, int id, PostFactory factory) {
super(content, id);
this.factory = factory;
}
//...
}
Załóżmy, że nie chcę dodawać tego do abstrakcyjnej klasy Page
. Jak to zrobić najprościej?