[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/13 07:04 / Filesize : 160 KB / Number-of Response : 657
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

★★Java質問・相談スレッド162★★



1 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 20:27:10.93 ]
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    pc11.2ch.net/hp/
Webプログラミング pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
★★Java質問・相談スレッド161★★
toro.2ch.net/test/read.cgi/tech/1364006637/

237 名前:デフォルトの名無しさん mailto:sage [2013/06/20(木) 23:41:21.10 ]
JAXBでテストデータを出力したいのですが、
XMLのルートに当たるTestDataクラスが出力したいUserクラスを持つ構造で
Userのプロパティを属性にマッピングするにはどうしたら良いでしょうか。
ただしUserクラスそのものには@XmlAttributeを注釈しないようにしたいです。

238 名前:デフォルトの名無しさん mailto:sage [2013/06/21(金) 00:03:40.19 ]
>>237
UserクラスにJAXBアノテーションを付けたくないという解釈で良いのかな?

239 名前:デフォルトの名無しさん mailto:sage [2013/06/21(金) 00:34:17.46 ]
>>238
はい、おっしゃるとおりです

240 名前:デフォルトの名無しさん mailto:sage [2013/06/21(金) 02:43:53.97 ]
>>216
専用サーバを借りる予定です
鯖のコスト減らして貧乏臭く開発するような内容は今まで散々やってきたので、
今度は大きいサービスを作ってみたいと思いました
レンタルサーバで実際にpollingがwebsocketを使ったアプリを試したいです

241 名前:デフォルトの名無しさん mailto:sage [2013/06/21(金) 05:34:23.24 ]
>>237
あんまりかっちょええ方法は思いつかないねぇ。

<testData usersProp1="..." usersProp2="..." ...>

みたいにUserクラスのプロパティを親、この場合はTestDataに対応するXML要素の
属性にしたいのであれば、user自体は@XmlTransientにして、代わりにuserの属性
を読み書きするセッターゲッターをTestDataクラスに追加して@XmlAttributeを
つける。

<testData ...>
 <user prop1="..." prop2="..." />

みたいにtestDataの下にuser要素を配置してuserのプロパティをこの要素の属性に
したい場合はプロキシクラスUserProxyを作って必要な@XmlAttribute等をつける。
UserとUserProxyの相互変換をするためのXmlAdapterを実装する。
最後にTestDataのプロパティuserに@XmlJavaTypeAdapterをつけてUserとUserProxy
の間の変換に使うXmlAdapterを教えてあげる。

242 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 00:02:45.60 ]
JDK 6 Update 11のインストールexeを実行すると、
「有効なwin32アプリケーションではありません」てメッセージが出るんだけど
どうすればインストールできる?

OSはWindows7 Pro SP1 64bit
BTOでセットアップされたPCが今日届いたばかりだから古いJDKは残ってない。

243 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 02:33:42.17 ]
>>242
ダウンロード時に回線障害起こしたとかでJDKが破損してるんだろう
再ダウンロードして実行し直せばいい

244 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 02:56:11.85 ]
>>243
ほんとだ。。。
ファイルサイズ見たら全然想定より少なかった。
ありがとう!

245 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 03:05:02.27 ]
板違いな気がするけどJavaの使用に関する質問もここでいいの?
違ってたら誘導して頂けると有り難いです



246 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 03:10:04.34 ]
>>245
プログラミングとは関係のない話題は↓が適切

Java Runtime Environment Part3
anago.2ch.net/test/read.cgi/software/1351670907/

247 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 03:38:45.47 ]
>>246
ありがとうございます

248 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 06:46:02.07 ]
private List<String> strList = new ArrayList<String>();

public void addString(String str) {
strList.add(str);
}

public String getString(int num) {
if(strList.size() < num+1) return null;
return strList.get(num);
}

のような、StringのListを管理するがそのList自体は返さないようなManagerクラスがある場合、
getString(int num)メソッドの一行目に書いたようにnullを返してもいいのかな?
でもこれって上で書いたようにNullPointerExceptionでエラー出すか、この一行は書かずにArrayIndexOutOfBoundsException出すかの違いでしかないのか・・・。
こういう時に何を基準に判断していくべきなのかがもう一つわからないです。
加えて、このnullチェックはメソッドを呼ぶ側ですべきなのかこのクラスでするべきなのかの判断基準もわかり辛いです。
JavaのSDKみるに、基本放置でエラー吐かせて、必要ならば呼ぶ側でする感じかなとは思いますが。

249 名前:248 mailto:sage [2013/06/24(月) 06:49:19.61 ]
あぁ、String型でやったのは大きなミスだ。
これじゃヌルポはでないか。

250 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 06:49:33.15 ]
>こういう時に何を基準に判断していくべき
このプログラムについてのお前の設計思想
>JavaのSDKみるに、基本放置でエラー吐かせて
んなこたーない

251 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 06:57:53.65 ]
>>250
だから設計思想を形作る判断材料のどこに重点をおくべきなのかがわからないの。
お前の設計思想なんていいだしたらメモリさえ食わなきゃ何でもokみたいな言語に成り下がるわけで。
null checkもお前の設計思想では片付かない相当大きな論争がありますよね?

252 名前:250 mailto:sage [2013/06/24(月) 07:27:37.24 ]
>お前の設計思想なんていいだしたらメモリさえ食わなきゃ何でもok
そうだよ。
プログラミングが目的じゃなくてコンピューターに
やらせたいことがあるんだからプログラミング言語がある。
生産性・保守性・拡張性・再利用性の様々な観点で
今回の自分の目的に叶っていれば問題なし。
プログラミング自体が目的のアホな論争など
どうでもいい

253 名前:デフォルトの名無しさん [2013/06/24(月) 08:13:55.37 ]
>>252
結局何も言ってないのと同じこと

254 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 08:24:23.76 ]
いや、俺は>>250に一票。
結局のところ、プログラム全体としてのエラーや例外のポリシーを決めないとどうすべきか
なんて言えないよ。

255 名前:デフォルトの名無しさん [2013/06/24(月) 08:43:53.04 ]
>>254
じゃあ黙ってろよ



256 名前:デフォルトの名無しさん [2013/06/24(月) 08:45:57.24 ]
お前らわからないくせに偉そうにぐだぐだ言いやがるよな

257 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 10:23:06.32 ]
わかるわからないの問題かこれ?

258 名前:デフォルトの名無しさん [2013/06/24(月) 10:57:22.99 ]
>>257
わからないくせに偉そうにぐだぐだ言うなって言ってんだよ。
>>252なんだよこれ。バカが。

259 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 11:21:32.05 ]
>>258
よくわかんないからもう少し丁寧に説明してくれよ

260 名前:デフォルトの名無しさん [2013/06/24(月) 11:22:38.82 ]
粘着しだした

261 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 11:25:21.21 ]
>>248
「自分的にこうあるのがベター」って考えがとくに無いなら、
とりあえずJavaの標準ライブラリに合わせりゃいいじゃん。

小難しいこと考えずに、
   public String getString(int num) { return strList.get(num); }
だけで、標準ライブラリの設計と合致するっしょ。

設計思想無しにヘタに、
   if (0 <= num && num < strList.size()) return null;
とか書いて例外な状況を握りつぶすのは最悪。

本当はnumの範囲外が原因なのに、
戻り値を最初に使った場所でヌルポが出るとか、原因見つけるの大変だろ。

262 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 12:05:53.67 ]
>>248
例えばOracleが公式で出してるJNIについての設計文書を読んでみるとわかる。

docs.oracle.com/javase/jp/1.5.0/guide/jni/spec/design.html
> JNI は、null ポインタまたは不正な引数型の受け渡しのようなプログラミングエラーについてチェックを行いません。
> JNI は、次のような理由からこれらの プログラミングエラーについてのチェックを行いません。
>  ・JNI 関数に起こり得るすべてのエラー条件についてチェックするよう強制すると、
>   通常の (正常な) ネイティブメソッドのパフォーマンスが低下する
>  ・多くの場合、このようなチェックを実行できるほど十分な実行時の情報がない

-1やnullなどのエラーコードを返か、例外を投げるかについても言及されてる

> JNI 配列アクセス関数の一部には、エラーコードを返さないが、
> ArrayIndexOutOfBoundsException または ArrayStoreException をスローするものがある

この文章からわかるのは、
ライブラリがエラーチェックをどこまで行うのかは「ライブラリの目的によって変わる」ということ。
JNIは引用文に書かれている理由でエラーチェックを行っていないが、
もちろんこれがあらゆるライブラリに当てはまるわけではない。

263 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 12:17:59.16 ]
>>261
getStringでnullが返ってくることが例外なのか意図された状況なのかも>>248のコード片だけじゃわからないからね

例えば配列は用意した分にしかアクセスできないけど、
用意しなかった分には任意の初期値を用意した無限のインデックスでアクセスできる配列クラスを作りたいとか
そういう場合に初期値としてnullを用意したという状況ならば、getStringでnullが返ってくることは例外ではなく正当な結果だし

>>248がそういうライブラリなのか、そうじゃないライブラリなのか絞り込むための材料は用意されていない
よって回答者のレスが抽象的・一般的になってしまうのは、そもそも用意されてるコード片が抽象的すぎて何も言えないからなんだよ

264 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 12:30:33.95 ]
> JNI は、null ポインタまたは不正な引数型の受け渡しのようなプログラミングエラーについてチェックを行いません。
これは意味が違うだろ。
JNIというフレームワークとしては自動チェック機能を提供しないだけで、
JNIのCプログラムがnullチェックしなかったら確実に死ぬ

265 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 12:49:58.68 ]
>>248のダメな点

・return nullだと、strListの中に入っている正当な値としてのnullが返って来たのか、
 numがインデックスの範囲外であることを示すためにnullが返って来たのか区別することができない

・addStringにおいてnullチェックが行われていないため、
 Listの値としてnullを受け入れるのが正当な仕様であるように見える(これでいいのか?)



これらを総合すると、任意のインデックスを受け取って値を返し
初期化されてないインデックスが指定されたら初期値としてのnullを返すようなListを作ってるようにしか見えないが
これでいいのか?



266 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 13:14:57.75 ]
>>263
>>248のコードをよくよく読み直したら、だんだん解らなくなってきた…

>>265に加えて、
・strListは参照が可変でいいの?
・負の引数はエラー、正はOK、ただしInteger.MAX_VALUEはエラー

たぶん、
「初心者は難しいこと考えずに、まずは教科書よく読んで、
  しっかりコード書いて1歩ずつ理解していくと良いよ」
ってのが>>248にとって一番しっくりくる回答だと思う。

267 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 13:53:06.36 ]
>>266は無視しておk
こいつ、レスつけてる連中の中で一番腕が悪い、もしくは馬鹿。
論点を無視した指摘に、意味のないアドバイス。
なんでこんな奴がドヤ顔でレスしてんの?

268 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 15:42:05.39 ]
人を馬鹿呼ばわりすると中傷と言われますよ。
こういうときは
 × >>267は馬鹿
 ○ >>267のレスは馬鹿な内容だ
と言うものです。

269 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 16:40:23.09 ]
twitter botを作成しようとしてます gomyownway.hatenablog.com/entry/2012/08/05/151936
このページを参照して一応必要なキーなどな入れているのですが
Exception in thread "main" java.lang.NoClassDefFoundError: test/TweetTest のエラーがでて実行できませんどうすればいいですか?

270 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 16:52:52.97 ]
>>269
ソースコードではなく実行環境の問題
どういう環境で実行してるのか書け

271 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 16:59:28.46 ]
>>270
実行環境はmacでeclipseです

272 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 17:02:27.39 ]
>>269
まず画面にtestと表示するだけのプログラムを
完成させて出直せ

273 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 17:04:18.55 ]
>>272
それはもうやりました

274 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 17:09:41.01 ]
>>273
プロジェクトの設定をどこかおかしくしたのが原因
だから空のプロジェクト作り直して順番に確認していけ

275 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 17:32:01.23 ]
>>274
ありがとうございます
言われた通りに最初からやったらうまくいきました



276 名前:248 mailto:sage [2013/06/24(月) 22:02:44.02 ]
return null;
の部分を
throw new NullPointerException();
にするなんていうのはなし?

277 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 22:33:14.84 ]
上の回答見てまだそんなこと言うか

278 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 07:58:37.22 ]
ヌルポを自分でスローするとか
どんだけお前はアホなんだよ
呼び出し側のパラメーター異常は
IllegalArgumentExceptionだろ

279 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 08:00:21.97 ]
途中で送信したoops!
ノーチェックかチェックしてIllegalArgumentException
スローするかどちらかにしろ

280 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 10:09:07.50 ]
そうか
なぜかreturn null前提で考えてた

281 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 14:58:19.28 ]
質問:変数paramがユーザー指定の文字列の場合、これってコードインジェクションされる可能性あります?

String base = "ping ";
int ret = Runtime.getRuntime().exec(base + param).waitFor();

ぱっと見た目やばそうなんだけど・・・

282 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 15:15:08.63 ]
うん。

283 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 15:22:35.69 ]
ですよねぇ・・・
実際セミコロンつけてコマンド連ねてみても動かないから、証明出来なくて困ってる
なにまちがえてんだろ

284 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 15:27:35.39 ]
コマンドインジェクションはむずいんじゃないのかな。
JavaのRuntime.execはシェルを呼ばない。単純に文字列をトークンに分割して
最初のトークンで指定されたコマンドに以降のトークンを引数としてわたすだけ。

なので;や|、&といったシェルが解釈する文字列は機能しないと思う。

285 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 15:36:04.27 ]
最近Java更新しようとするとウィルス対策ソフト入れようとするんだけど



286 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 16:29:27.50 ]
>>284
なるほど、サンクスです。適当に付け足してもうごかないわけだ
しかし、チェック処理がないのがきもちわるい
作った本人が分かってたのか、分かってなかったのか、わからんな・・・

287 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 16:50:16.66 ]
RuntimeやめてProcessBuilder使えって通達、最近来てなかったっけ?

288 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 17:04:47.01 ]
既存のソースにコレがあったので、直した方がよくね?って話に持っていこうかと。
このためだけに触りたがらないヤツがいるので、危険度を証明したかったんだが
証明できんw
という夢を見た

289 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 23:00:45.63 ]
abstractクラスをうまく使えるようになるとかなりソース綺麗になりますねぇ
Javaは設計が上手くいったときがスカっとして個人的に一番楽しい

290 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 23:05:01.54 ]
スカはちょっと・・・

291 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 01:57:41.23 ]
abstractとか失敗設計の典型例だろ

292 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 03:55:18.95 ]
?

293 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 04:02:32.31 ]
>>291
これはひどい

294 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 05:40:01.92 ]
そもそもオーバーライドはバグの温床なのに必ずオーバーライドしなきゃダメな時点でアウト

295 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 06:53:39.61 ]
オーバーライド以上にコードのコピペがバグの温床。

いつの日か出会うかもしれない変な継承によるバグにおびえるヒマがあったら
今目の前にあるコードから継承や抽象クラスやコンポジションを使ってコードの
反復を一つでも減らした方がまだ生産的。



296 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 07:13:47.54 ]
>>295
オーバーライドではない→コピペ

まずこの発想がキチガイ的でヤバイ

297 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 07:24:24.63 ]
オーバーライドはスーパークラスの呼び出しをJavaDocで指示するケースが一番ヤバイな
protectedなメソッドを空実装しといてオプショナルにしとくのなら安全で使いやすいが

298 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 07:29:01.28 ]
> オーバーライドではない→コピペ

こういう解釈にいたる時点で日本語読解力がヤバい。

バグの温床としてオーバーライド < コピペだとは書いたけど、
オーバーライド無し -> コピペとは一言も書いていない。

299 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 12:39:13.32 ]
コンストラクタで必ずsuper()を呼び出さないとアカンやつ大杉や!

300 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 14:45:51.34 ]
オーバーライドがバグの温床なんていうのはいいすぎじゃないかな
依存関係からいっているのかな、だけど普通abstractクラスはそれを分散させないために使うんじゃない?

例えば描画と更新が必要なGUI開発やゲーム開発とかで
ArrayList<MyObject> objects = new ArrayList<MyObject>();
public void update() {
for(MyObject mo : objects) mo.update();
}
public void render() {
for(MyObject mo : objects) mo.render();
}

のように描画する対象物がどんな形でどんな役割であろうと同一化したほうがスッキリする場合、
abstract class MyObjectにして座標等のフィールドはprotectedにする。
で、update()メソッドもabstractにしてrender()に関しては場合による。

以降はMyObjectクラスを継承したMOBoxクラス、MOBarクラス、MOMenuクラス、
ゲームならMOPlayer、MOEnemy・・・
といったように本来の役割が違ってもかなり深く抽象化できて扱いやすいことは多いよ。(SwingのJComponentクラスがまさにこれだよね)
Decoratorパターンも導入しやすいですし。

301 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 20:09:38.19 ]
たとえ具体クラスが一つしかなくたって、
ふくれあがった唯一神クラスを分割記述するためだけに
abstract使ってもいいのよ?

302 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 20:13:28.83 ]
そもそも、目的にあった道具を使うもんじゃないかな。

勝手な想像だが、 >>291 は、道具の使い方や、使う場面を間違えてるんじゃないかと思う
カラフルな絵を書くのが目的のときに、
「黒しか出ないってなんだよ、エンピツつかえねぇ!」

「エンピツ使うとか失敗するにきまってるだろ」
って言ってるように聞こえる。

303 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 21:07:21.54 ]
インターフェースを定義した後にロジック実装の骨格を提供するのにも使うな > abstract

単にabstractを使う機会が無かっただけじゃない?

304 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:19:30.43 ]
>ふくれあがった唯一神クラスを分割記述するためだけに
>abstract使ってもいい
意味や機能でなく
処理でクラスやメソッドを分けるのは
JAVAドカタの得意技だね

305 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:35:34.39 ]
ロジック実装して初めてインターフェースは見えてくるもの
それがわかってないからたいてい抽象化が無意味になって失敗する

だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない
・引数にするか、メンバーにするか
・使うのはここだけか、何度も使うことになるか
・・・



306 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:39:41.25 ]
>>305
>ロジック実装して初めてインターフェースは見えてくるもの
それはお前がドカタだから。
設計のできる人はそんなこと無いから。

307 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:51:51.03 ]
処理によってクラスやメソッドを分けるのは当たり前じゃ?
それに違和感を感じるのはクラス分けると書けないいわゆるオブジェクト指向になれてない人か、
デザインパターンすら認めない?生きた化石じゃないか?
仕事を割り振ることを考えたらabstractが設計失敗なんてありえないと思うよ。趣味でやってるレベルでもわかる。

>>305
>だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない
同意だけど、abstract等で縛っていかないから抽象化が失敗するんだと思う。

>ロジック実装して初めてインターフェースは見えてくるもの
これを念頭に置くのは大反対。
抽象化しすぎると将来どうなるかわからないからpublicにしとけ的な設計が一番ダメに感じる。
見えてこないのはまさに修飾子を正しく把握していない、もしくは縛って自由を獲得する設計に慣れていないだけ。

308 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:56:42.35 ]
>処理によってクラスやメソッドを分けるのは当たり前じゃ?

いやー、JAVAドカタって
ほんっっとにどうしようもないな

309 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:57:04.78 ]
「このクラスについて詳しく見たわけじゃないけどこのクラスもあのメソッド使えそうだな」

これ、誰でもAPIで経験してるはず。
設計さんに感謝やで。
継承がバグの温床なんていったらバチあたるでほんま。

310 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 23:23:04.49 ]
抽象クラスがなかったらコールバック関数に渡す無名インナークラスとかどうするんだよ

311 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 00:40:03.70 ]
うむ。RCP息してない。

312 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 01:40:13.43 ]
>>286
そういやそのへんの挙動、最近のupdateで何か変わってなかったっけ。
記憶違いかも知れんが。

313 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 01:40:54.77 ]
処理によってクラス分ける利点は静的に扱うときに一番あらわれる気がする
動詞をクラス名にしたりね。

314 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 01:43:54.45 ]
List<Object> list = new ArrayList<Object>();
みたいな書き方って海外の人あまりしないよね?なぜ日本ではこれが推奨されているの?

315 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 01:56:34.66 ]
Javaのジェネリクスは保守的でコードレベルでタイプセーフにするだけだからな
Java8だかでインタフェースのメソッドがステートレスに実装可能になるらしいから驚き



316 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:17:56.80 ]
>>314
海外ではどんな書き方なん?

317 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:27:14.62 ]
>>316
普通に
ArrayList<Object> list = new ArrayList<Object>();
って書く人が多いように思う。

自分もそう書いていたんだけど
List<Object> list = new ArrayList<Object>();
のほうがいいよ的な意見もよく聞く。

だけどそういう人でも
JComponent button = new JButton();
ってのは書かずに
JButton button = new JButton();
と書く人が多い。

なぜArrayListのときはそういう書き方をするのか教えて欲しい。

318 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:38:07.98 ]
>>317
意味論的にそれが有効だからとしか。
ArrayListはランダムアクセス可能なList
JButtonはSwingのボタンUIとして確固たる知名度と意味を持つ
てかJComponentは抽象度が高すぎるしね

319 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:40:12.03 ]
そもそも前と後ろ同じじゃないとなんか感覚的に見た目気持ち悪いんだがどうなん

320 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:45:07.10 ]
宣言側はアプリケーションで必要とされている意味論的に適切な抽象度で宣言する
生成側はパフォーマンス特性に合わせて無難または最適な物を生成する

321 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:46:01.29 ]
>>314
こういうのってキャストとかしなくて大丈夫なん?

322 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:48:56.11 ]
ArrayList (Java Platform SE 7)
docs.oracle.com/javase/jp/7/api/java/util/ArrayList.html

通常、リストの同期をとるには、リストを自然にカプセル化するオブジェクトで同期をとります。
そのようなオブジェクトが存在しない場合は、Collections.synchronizedList メソッドを使用してリストを「ラップ」する必要があります。
これは、リストへの偶発的な非同期アクセスを防ぐために、作成時に行うのが最適です。

List list = Collections.synchronizedList(new ArrayList(...));

323 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 03:07:49.08 ]
>>322
マルチスレッドでadd()等の処理をするときに同期どれよというのはわかってけど
まるで答えになってないよね?

324 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 03:15:37.97 ]
The List Interface (The Java? Tutorials > Collections > Interfaces)
docs.oracle.com/javase/tutorial/collections/interfaces/list.html

Here's a nondestructive form of this idiom, which produces a third List consisting of the second list appended to the first.

List<Type> list3 = new ArrayList<Type>(list1);
list3.addAll(list2);

325 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 03:20:07.47 ]
>>321
オブジェクト指向言語で抽象度の高い方向(スーパーセット)にキャストするのは問題ない
ここら辺は個別に疑問を持つより基本を一通り知ってから考えた方がいいよ



326 名前:314 mailto:sage [2013/06/27(木) 03:41:15.24 ]
>>324
そこじゃなくない?外国人が使っているよということを言いたいの?何が言いたいの?

リンク先で、
同じオーダー中に同じ要素を含んだ二つのListが等しくなるってのはわかった。
で、equals書くならhashCodeも一緒に書けよっていう某本にも書いてるその辺にも強いことがわかった。
これが答え?

327 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 06:21:34.84 ]
外国・・・そうかなぁ? 個人的には>>320に同意。

例えば適切な抽象度のインターフェイスが別にあるのにArrayListとかHashMapと
いった実装クラスを引数として要求したり返値として返したりする公開メソッド
を持つクラスに出会った場合は、とりあえずその品質を疑ってかかる。
いわゆる「臭う」コードのよくあるパターンだと思う。

内部変数にしても例えばArrayList使って抽象度を下げるとListのような抽象度の
高い引数を受けにくくなるので、こちらも普通はListを使うかな。
ある場所での型の抽象度の低さはコード中の他の場所に伝染するんだよね。

328 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 06:40:22.65 ]
>>318
その理屈はおかしい
JavaのListはランダムアクセスが効率的に行えることを保証しないので、
ランダムアクセスしたいならArrayListで受けなければならないということになってしまう
いや意識してそういう理由でArrayListならそれでいいと思うけどね
ジェネリクスでList,RandomAccessとする手もあるけど
内部でnewする変数にそこまでするのは現実的じゃないわな

329 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 06:56:02.07 ]
>>325
ただしそれはオーバーライドがない時の話な
オーバーライドされたメソッドがある場合は派生クラスが厳密に規約を守っているか確認しなければ規定クラスとして使ってはいけない
オーバーライドしているとたやすくis aの関係が破壊される
規約を作れば良いというがその規約にバグがないことも規約が守られてることも保証することは難しく人の注意力に頼るしかない
だからバグが量産される


330 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 07:06:20.79 ]
ListってまともにListIteratorで操作されてることは滅多にないよね
ランダムアクセスのためのインターフェースとしなかったのはJavaの大失敗の一つ

331 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 12:01:34.71 ]
List をランダムアクセスにしたら LinkedList が List じゃなくなるじゃないですか
名前的に紛らわしい

332 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 13:37:26.26 ]
予期せぬListの実装が引数に渡されたらどうなっちゃうの?

333 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 14:51:40.48 ]
java.util.RandomAccessに代入可能かどうかで判定するのが
業界の慣習。一応。

334 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 15:20:23.50 ]
String戻せば済むところをCharSequence返すメソッドは考えすぎだと思う。

メソッド引数としてはアリ

335 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 21:25:21.75 ]
>>334
Androidの真似して
かっこいいと勘違いしたんだろ



336 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 23:59:50.59 ]
StringBuilder返すところでホントはAppendable返したいのだが
IOExceptionがじゃまなの…

337 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 01:16:49.31 ]
>>331
.NETはまさにそうなってるね
名前的には残念なことになってるが設計としてはアレが正解だわ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<160KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef