Как определить метод Java является фабричным методом с помощью простого сопоставления с образцом? - PullRequest
2 голосов
/ 13 июля 2011

Я пытаюсь использовать простой анализ сопоставления с образцом, чтобы найти все фабричные методы в программе? В настоящее время я просто установил несколько простых условий для метода m: 1. тип возвращаемого значения m не является нулевым, а также не является основным типом; 2. оператор возврата m дает значение, которое получает новое выражение в этом методе.

Используя вышеприведенные условия, я мог бы получить много возможных методов для Factory Method. Но очевидно, что условий недостаточно. Любое другое условие может быть добавлено, чтобы получить более точные фабричные методы.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Это звучит как невыполнимая задача для меня. Например, даже ваши текущие критерии неверны, ИМХО. Метод фабрики возвращает экземпляр некоторого класса, но

  • нет необходимости создавать экземпляр (он может использовать кеш, как, например, Integer.valueOf),
  • это может создать экземпляр, использующий что-то отличное от new оператора
  • он может делегировать другому методу или другому классу для создания экземпляра

Вы можете искать часто используемые имена, такие как «createXxx», «newXxx» или «valueOf», но это, конечно, вернет потенциальные фабричные методы и пропустит многие.

Заводской шаблон - это просто шаблон. Это не что-то настолько жесткое, что вы можете идентифицировать это автоматически, ИМХО.

1 голос
/ 13 июля 2011

Я думаю, что это невозможно сделать, потому что это будет включать решение проблемы остановки . Ограничение себя на сопоставление с образцом (я полагаю, в Strings) только усложняет задачу.

...