2011-07-13 1 views
2

単純なパターンマッチング解析を使用して、プログラム内のすべてのファクトリメソッドを検索しようとしていますか? 現在、メソッドmのいくつかの単純な条件を設定しています。 1. mの戻り値の型はnullではなく、主型でもありません。 2. mのreturn文は、このメソッドで新しい式を取得する値を返します。Javaメソッドを識別する方法は、単純なパターンマッチングによるファクトリメソッドですか?

上記の条件を使用して、ファクトリメソッドの候補メソッドを多数取得できました。しかし明らかに、条件は十分ではありません。より正確なファクトリメソッドを得るために、他の条件を追加することができます。

ありがとうございました。

答えて

3

これは私にとって不可能な仕事のように聞こえる。たとえば、あなたの現在の基準でも、IMHOは間違っています。ファクトリメソッドは、いくつかのクラスのインスタンスを返しますが、

  • 、それは他のものを使用してインスタンスを作成することができます
  • 、(Integer.valueOfは、例えば、同じようにそれは、キャッシュを使用する場合があります)のインスタンスを作成して必要ありませんnewオペレータ
  • よりも、それはあなたが「て、createXXX」、「newXxx」または「のvalueOf」のような一般的に使用される名前を検索できますが、これは、のだろうインスタンス

を作成するために、別の方法または別のクラスに委任するかもしれませんコース帰りの可能性のある事実オーリーの方法であり、多くを逃してしまいます。

工場パターンは単なるパターンです。それはあなたがそれを自動的に識別することができるほど固いものではありません、IMHO。

+0

あなたの答えをありがとう。 パターンマッチングを使用してソリューション全体を期待していません。小さなプログラムでは、コードを読んでファクトリメソッドを見つけることができました。しかし、大規模なプログラムの場合、私はちょうど候補メソッドを見つけるためにいくつかの分析を使用することを望む。 完了する必要はありません。候補メソッドの数を減らすことができれば問題ありません。ところで、私はJavaのソースコードを解析し、各メソッドのタイプとデータフローを取得できる静的なJava解析ツールを実装しています。 – Lei

1

これはできないと思います。そうするには、halting problemを解決する必要があります。パターンマッチング(文字列については、私が前提とする)に制限することは難しくなります。

+0

単純なパターンマッチングを使用して完全な解決策は必要ありません。 私はちょうどファクトリメソッドである可能性があるいくつかの候補を得ることができる簡単な分析をしたいです。 – Lei

+0

次に、JB Nizetが推奨する典型的な名前を探していると思います。 – Waldheinz

関連する問題