0

プライベート メッセージ システムを実装しようとしています。これが悪い設計であるかどうか教えてください。しかし、私には と の 2 つのクラスがUserありRecipientます。RecipientですUserので継承しUserます。、、Recipientなどの追加のプロパティがあります。messageIdreadDatekeepMessage

私のコードは次のとおりです。

//This line gives me ClassCastException
recipient = (Recipient) user;

.

 //GET id of user to send message to
String receiverId = request.getParameter("id");

//GET title of message
String title = request.getParameter("title");

//Get content of message
String content = request.getParameter("content");

//Retrieve logged in user from session
HttpSession session = request.getSession();     
User sender = (User) session.getAttribute("user");

//Instantiate a new User to hold receiver
User user = new User();
//Retrieve object of user to send message to
UserService userService = new UserService();
user = userService.getUserById(Integer.valueOf(receiverId));

//Instantiate a new Recipient (extends User)
Recipient recipient = new Recipient();
//Cast User as a Recipient
recipient = (Recipient) user;

//Instantiate a message
Message message = new Message();
//message related stuff here....

//Pass the message content and Recipient to messageService
MessageService messageService = new MessageService();
messageService.sendPrivateMessage(message, recipient);
4

5 に答える 5

0

キャストではできません。あなたの最善の策は、引数Recipientをとるコンストラクターを追加することです。Userそれからあなたはすることができます

Recipient recipient = new Recipient(user);

それか、 の代わりにsendPrivateMessage()を受け入れるように変更します。UserRecipient

于 2012-04-13T19:05:45.937 に答える
0

ダウンキャストはよくないと思いますので、クラス階層を確認してください。そのオブジェクトが実際に子オブジェクトである場合は、dynamic_cast を使用できます

于 2012-04-13T19:19:04.290 に答える
0

スーパー クラスを派生クラスにキャストすることはできません。追加のサブクラス データはどこから取得する必要がありますか?

于 2012-04-13T18:56:20.297 に答える
0

別の問題であるクラス階層は別として、複数の構文の問題があります。指摘したように、2 つの異なるクラスで受信者変数を 2 回定義しています。また、ユーザーを受信者にキャストしようとしているようですが、失敗します - 受信者はユーザーですが、ユーザーは必ずしも受信者ではありません

于 2012-04-13T18:48:21.953 に答える
0

Java では実際にそれを行うことはできません。上記の内容に基づいて、受信者をユーザーにキャストすることはできません。あなたは本当にこれを行う必要がありますか?上記の例では、受信者としてインスタンス化するだけでよいようです。

于 2012-04-13T18:52:19.823 に答える