ファクトリメソッドに頼らずに、pococapsuleのmethod-argsとして列挙値を提供する方法はありますか?
コンストラクターで列挙値をとるクラスがあるとしましょう
class A
{
A(myEnum val);
}
Pococapsule xml構成の使用:次のように表現したいと思います。
<bean id="A" class="A">
<method-arg type="MyEnum" value="MyEnum::Value1" />
</bean>
ただし、pococapsuleの基本タイプには、short、charなどの組み込みタイプしか含まれていないため、これは不可能です。
pococapsuleを使用してクラスAをインスタンス化するにはどうすればよいですか?
私は次のようなファクトリメソッドを使用することに頼ることができます:
MyEnum GetMyEnumValue1()
{
return MyEnum::Value1;
}
<bean id="A" class="A">
<method-arg factory-method="GetMyEnumValue1" />
</bean>
これはあまり実用的ではありません。使用するすべての列挙型のすべての可能な値に対して、新しいファクトリメソッドを実装する必要があります。
enum:sは、クラスが多くのことを行っていることを示しているため、コンストラクターやセッターメソッドに渡すべきではないと主張する人もいます。はい私は同意する。ただし、このスタイルを使用するサードパーティのコードやC ++フレームワークはたくさんあるので、これを実行できるようにする必要があります。
編集:この問題はPococapsuleのディスカッションフォーラムで解決されました。この特定の場合の回避策は、ファクトリメソッドに目的のアクションを実行させることでした。xml-configファイルでenum-useを宣言するほど柔軟ではありませんが、プロジェクトを前進させました。助けてくれてありがとうKe。