[表示 : 全て 最新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/

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はまさにそうなってるね
名前的には残念なことになってるが設計としてはアレが正解だわ

338 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 01:20:26.99 ]
>>329
その話、アップキャスト関係なくね?

339 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 03:30:45.63 ]
private int a;
private int b;
private int c;

public Constructor(int a, int b) {

this.a = a;
this.b = b;

// 引数a, bできまるcはこう書くべきなのか
c = a+ b;

// こう書くべきなのか、どっちがいいですか?
c = this.a + this.b;

// やはり前者?
}

340 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 03:40:28.29 ]
>>339
前者にすべき。マルチスレッドに対応させる際に後者だと都合が悪い

341 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 04:03:42.53 ]
>>340
把握しました

342 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 04:14:49.32 ]
横レスだけど
後者だとどう都合が悪いの?

343 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 07:05:24.68 ]
問題ないよ

344 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 07:30:16.62 ]
>>340
最悪な回答だな

345 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 07:33:43.35 ]
どっちでもいいだろ
コンストラクターが完了するまでは
オブジェクトの構築が終わってないんだから
他のメソッドに合わせてthisを使う必要はない



346 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 08:59:23.11 ]
>>342-345
マルチスレッドにした場合は初期化中のオブジェクトにアクセスされる可能性がある。つまり

this.a = a;
this.b = b;
// ここでthis.aやthis.bの値が別スレッドから更新される可能性もある
c = a+ b;

その結果「引数a, bできまるc」という仕様が満たされないことになる
c = a+ b;なら別スレッドから何かされても仕様は満たされるが、
c = this.a + this.b;にした場合は、初期化中のオブジェクトが外部に公開されて
this.aやthis.bが変更される危険がないかConstructorクラス全体を調べなければならない

どちらの方が安全にコーディングできるか考えれば答えは明らかだよね

347 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:30:31.07 ]
>>346
Java言語仕様読み直せ

348 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:36:23.41 ]
>>339
コメントに沿った実装という意味では前者だな。
意味的にも前者のほうがいいんじゃなかろうか、そのコード片だけでは判断できんけど。
結果はどっちも変わらん。

349 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:41:16.57 ]
cが引数a,bから決まるのでなくメンバのa,bから決まる値の場合は・・?

350 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:48:00.80 ]
どこで>>346みたいな知識を仕入れたのか気になるんですが...
検証の仕方も思い浮かびません...

351 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:50:51.90 ]
コンストラクタってスレッドセーフじゃないん?

352 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:51:08.41 ]
>>349
その場合はそりゃ後者だろう。

353 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:52:26.29 ]
The Java? Tutorials
docs.oracle.com/javase/tutorial/

JAVA覚えようぜ

354 名前:デフォルトの名無しさん [2013/06/28(金) 11:37:29.87 ]
>>346の謎解きをするスレはここですか?
>初期化中のオブジェクトが外部に公開

コンストラクタで外部にthis参照が逸出するときのことを言ってるんだろう。
ふつう、コンストラクタはthis参照を外部に公開しないように実装するものなんで、
そういう状況になること事態が実装上の不備だと思う。拙者そう思う。

355 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 12:26:37.11 ]
コンストラクターがマルチスレッドって
ただのコーディングミスだろ



356 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 12:43:30.30 ]
>>354
でもそれだとマルチスレッド関係ないよな...

357 名前:354 [2013/06/28(金) 12:50:39.56 ]
>>356
俺はマルチスレッドの話をしたつもりだったんだが、お前はなんで俺の話がマルチスレッドと関係ないと思うの?

358 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 13:15:22.64 ]
double checked locking 問題ではコード読んだ時の直感に反して
コンストラクタ完了前に参照漏洩してたりしたからなぁ。

あの手の問題あるとチェックしきれん。

359 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 14:28:50.08 ]
>>357
シングルスレッドでも逸出させられる

360 名前:デフォルトの名無しさん [2013/06/28(金) 14:38:54.68 ]
B木を実現するjavaプログラム、難しいけどわかる人いますか?

361 名前:桃白白 ◆9Jro6YFwm650 [2013/06/28(金) 14:45:17.44 ]
>>360
桃白白わかるよ。

362 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:01:04.41 ]
スレッドAが生成した新オブジェクトを
ロック無しで確実にスレッドBに届ける方法は無く、

スレッドAがロックすれば確実に初期化された新オブジェクトが
全スレッド間で共有されてしまうので

正直 ど う で も い い

363 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:04:35.49 ]
自分も前者がいいな。10文字少ないので。

364 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:06:40.22 ]
>>361
すみません、教えてください。

365 名前:桃白白 ◆9Jro6YFwm650 [2013/06/28(金) 15:09:21.89 ]
>>364
B木のなにを知りたい?アルゴリズム?インプリメンテーション?
値を追加するところ?値を削除するところ?値を検索するところ?
どのあたり?



366 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:15:09.70 ]
>>350-351
TSM01-J. オブジェクトの構築時にthis参照を逸出させない
https://www.jpcert.or.jp/java-rules/tsm01-j.html

367 名前:デフォルトの名無しさん [2013/06/28(金) 15:16:16.75 ]
>>365
値の追加、検索、削除が出来ればOKです
初めに任意で最大の子の数を入力する所から始めたいです






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

前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