Я в ситуации, когда мне нужны все мои дочерние классы для реализации общего абстрактного метода родительского класса ... static. Но, по-видимому, Java не допускает абстрактных статических методов ...Альтернатива статических абстрактных методов в Java
Итак, что такое альтернативный дизайн такой реализации на Java? Ниже приведен код, который описывает ситуацию, я нахожусь в:
Родитель класса
public abstract class ParentFactory {
/**
* This is a factory class that provides static init method
**/
public abstract static void init();
}
класса Child
public class ChildFactory extends ParentFactory {
@Override
public static void init() {
// each child factory has own implementation of init
}
}
EDIT
FYI, я не спрашиваю, почему это недействительно в Java, я понимаю концепцию статического метода, я знаю, почему это запрещено в Java.
Вместо этого я обращаюсь за помощью к альтернативному шаблону относительно моего подхода выше. Благодаря!
Возможно, это будет лучше, если вы сделаете 'init()' virtual и будете использовать 'Factory' как singleton? Виртуальный метод по-прежнему может получить доступ к статическим членам. –
Привет @KenBekov, не могли бы вы подробнее рассказать о своей идее? (возможно, как ответ?) Мне бы очень хотелось услышать отличные мнения о вашем предлагаемом дизайне. –
Я не понимаю, с какой целью вы статируете 'init()'. Наверное, для инициализации каких-то статических членов. Но виртуальный метод тоже может это сделать. Обычно статический метод играет роль фабричного метода. Но ваш метод ничего не возвращает. Таким образом, информации недостаточно, чтобы предложить что-то конкретное. –