0

このような宣言があります

TransactionItemDto itemDto = getTransactionItemMessage().getTransactionItemDto();

次に、次のコードがあります。

if (itemDto instanceof ChangeTransactionItemDto) {
            inputItem.setSiteCode(itemDto.getSiteCode()));
            inputItem.setBinLocation(itemDto.getBinLocation()));

        }

今、私は変数 ' department' のみに属してChangeTransactionItemDtoいます。しかし、現在、上記の if ブロック内でこれを行うことはできません。inputItem.setDepartment(itemDto.getDepartment()));

これは、 itemDto が型TransactionItemDto ではなく型で宣言されているためChangeTransactionItemDtoです。

itemDto.getDepartment()内部的にはサブクラス型であるため、デバッグプロセス中に値を確認できます。しかし、ステートメントはエラーを出します。ChangeTransactionItemDtoでサブクラスに属する部門を設定するにはどうすればよいinputItemですか?

4

2 に答える 2

0

itemDtoがインスタンスであるかどうかを確認したのでChangeTransactionItemDto、いつでも呼び出すことができますinputItem.setDepartment(((ChangeTransactionItemDto)itemDto).getDepartment())

于 2013-09-20T05:14:21.757 に答える
0

スーパークラスがサブクラス固有のフィールドにアクセスする必要がある場合、それは設計上の臭いです。

回避策の 1 つは、getter/setter を「何もしない」実装でスーパー クラスにプルアップし、それを使用するサブクラスが「何かを実行する」実装でそれをオーバーライドすることです。

このようにして、クラス階層に特別な処理が必要なクラスはありません。それらはすべて同じ方法で処理できます。

于 2013-09-20T05:22:07.377 に答える