- PR -

Serializableについて

1
投稿者投稿内容
zutto
会議室デビュー日: 2003/09/25
投稿数: 4
投稿日時: 2007-06-27 08:14
お世話になります。

次のようなBaseEntityクラスがあります。
コード:
package work;

import java.io.Serializable;

public class BaseEntity implements Serializable {

	private static final long serialVersionUID = 1L;

	private Long version;
	
	public BaseEntity() {}
	
	// getter, setter
	......

}



これを継承したクラスで"implements Serializable"を指定した場合と
しない場合とで機能的に違うケースはありますか?
コード:
public class Item extends BaseEntity implements Serializable {


コード:
public class Item extends BaseEntity {


どちらもSerializableであり機能的な違いはないが、
「"implements Serializable"と書くのは
スーパークラスを見なくてもそのクラスがSerializableだと一目でわかる」
という理由からではないかと推測しているのですが、
どうなのでしょうか?

どうぞよろしくお願いします。

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-06-27 09:20
3年半前のことですが、私も同じ疑問を持ちました。
「件名:java.util.Collection のメソッドがサブインターフェースの List にもあるのはなぜ?」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7753&forum=12

昔からの慣習でそうなっているだけなんじゃないでしょうか?オブジェクトブラウザーのような類のツールがない時代は、ソースコードをテキストエディターでぱっと見ただけでは、Serializable なのかどうか分からないから付けているだけのような気がします。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-06-27 09:30
基本クラス側もSerializableを実装しているなら同じ意味です。

BaseEntityはSerializableを実装しておらず、
ItemのみがSerializableを実装しているなら意味が変わり、
この場合はBaseEntityのフィールドが全てtransientとなります。

引用:

zuttoさんの書き込み (2007-06-27 08:14) より:
どちらもSerializableであり機能的な違いはないが、
「"implements Serializable"と書くのは
スーパークラスを見なくてもそのクラスがSerializableだと一目でわかる」
という理由からではないかと推測しているのですが、
どうなのでしょうか?


私はそう解釈しています。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2007-06-27 09:39
まったく無意味な実装です。
むしろ見る人が見ると冗長だ、という話になります。

明確でわかりやすい、なんていう人もいますが
ぶっちゃけ
if (flag == true) {
と大差ないと思っています。
つまり、
if (flag) {
でいいじゃない、ということで。
zutto
会議室デビュー日: 2003/09/25
投稿数: 4
投稿日時: 2007-06-27 09:51
こんにちは。

返信ありがとうございます。
みなさんのご意見を聞いて、納得することができました。

引用:

「件名:java.util.Collection のメソッドがサブインターフェースの List にもあるのはなぜ?」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7753&forum=12


この件も気になっていたので勉強になりました。
どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)