0

ファクトリメソッドに頼らずに、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。

4

2 に答える 2

0

C / C ++では、列挙型は暗黙的にintとして渡すことができるため、次のようにするだけで済みます。

DSM機能を使用して、特定の列挙型をサポートする独自の拡張スキーマを定義することもできます(DSMを使用してユーザー定義のマップタイプをタイプセーフにサポートするexamples / basic-ioc / ext-schemaのユーザー例と同様である必要があります)。

-ケ

于 2010-01-08T19:22:45.413 に答える
0

(XMLコードは以前の返信で除外されたため、再投稿してください)

C / C ++では、列挙型は暗黙的にintとして渡すことができるため、method-arg要素にtype="long"を含めることができます。

DSM機能を使用して、特定の列挙型をサポートする独自の拡張スキーマを定義することもできます(DSMを使用してユーザー定義のマップタイプをタイプセーフにサポートするexamples / basic-ioc / ext-schemaのユーザー例と同様である必要があります)。

-ケ

于 2010-01-08T19:26:15.360 に答える