может быть, есть более чистый способ сделать это через шаблон стратегии , хотя я не знаю, как моделируется остальная часть вашего приложения и данных, но кажется, что он может соответствовать.
Так или иначе, я столкнулся с подобной проблемой. У вас может быть эвристика, которая решает, какую стратегию использовать в зависимости от данных, которые нужно обработать.
Опять же, у меня недостаточно информации о вашем конкретном использовании, чтобы увидеть, является ли это излишним или нет. Однако я бы воздержался от изменения сигнатуры класса для такой специфической оптимизации. Обычно, когда я чувствую побуждение идти против течения, я воспринимаю это как пение, что я не предвидел углового случая, когда я проектировал вещь, и что я должен реорганизовать ее в более чистое и всеобъемлющее решение.
однако будьте осторожны, такой рефакторинг, когда он выполняется исключительно на основании оптимизации, почти неизбежно приводит к катастрофе. Если это так, я бы использовал рефлексивный подход, предложенный выше. Он не изменяет договор о наследовании, и при правильном выполнении его необходимо выполнить один раз только для подкласса, который требует его для жизненного цикла приложения.