私はこの方法を持っています:
private Message getMessage(DataInputStream in) throws IOException {
CommandEnum caption = CommandEnum.valueOf(in.readUTF());
BasicMessage inputMessage;
if (caption.equals(CommandEnum.BEGIN) || caption.equals(CommandEnum.FILEADDRESS)
|| caption.equals(CommandEnum.CONTAINNAMESERVER))
inputMessage = new AddressMessage(caption,in.readUTF(),in.readInt());
if (caption.equals(CommandEnum.CONTAINFILE) || caption.equals(CommandEnum.DONTCONTAINFILE)
|| caption.equals(CommandEnum.WANTFILE))
inputMessage = new FileMessage(caption,in.readUTF());
else
inputMessage = new BasicMessage(caption);
in.readUTF();
return inputMessage;
}
署名は、メソッドMessage
が私が作成したオブジェクトである を返すことを示しています。AddressMessage
場合によっては、 を拡張する私の別のオブジェクトを返すことに注意してくださいMessage
。
私の問題-新しいものを返す場合AddressMessage(arguments)
、後でAddressMessage
オブジェクトにダウンキャストすることはできません[書き込み(AddressMessage) object
]