トップページ⇒tech
1001コメント311KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2013/06/09(日) 20:27:10.93
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://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★★
http://toro.2ch.net/test/read.cgi/tech/1364006637/
0002デフォルトの名無しさん2013/06/09(日) 21:20:32.65
Javaが理解できない万年雇われ3流PGの老害は見苦しいからもう沸いてくんなよ
0003デフォルトの名無しさん2013/06/09(日) 21:24:53.90
細かいことだが、老害というのは
老いたことが害なのではなく、
老いた者が量産され社会のバランスを
欠いている様が害という考えだ
0004デフォルトの名無しさん2013/06/09(日) 21:25:42.23
クソスレ発見
0005デフォルトの名無しさん2013/06/09(日) 21:32:42.98
Javaは三日で習得した
だが次の三日で見限った
0006前スレの9912013/06/09(日) 21:32:53.13
前スレの
>>995さん
>>996さん
C的というよりC++的なコードありがとうございます。
ちょっと最近C/C++やって無かったので思い出しながらコード見たんですが
で、>>996さんのコード見て
Zow *dive(Zow * zow2) {
  zow2=new Zow();
}
Zow * const zow=new Zow();
dive(zow);
をちょっと改変して
Zow *dive(Zow ** zow2) {
  *zow2=new Zow();
}
Zow * const zow=new Zow();
dive(&zow);
っていう動作(C++ならコンパイルエラー)をJAVAで実装するのは
無理って事ですか?
0007デフォルトの名無しさん2013/06/09(日) 21:33:16.14
はい無理です
0008KUSO KOTE2013/06/09(日) 21:38:36.37
>>6
Javaには参照渡しが無いので直接的には無理。
代わりに要素数1の配列を使うのがよくあるうんこコード。
Zow[] zow = new Zow[]{new Zow()};
0009KUSO KOTE2013/06/09(日) 21:42:08.64
間違えた。わすれて。
>C++ならコンパイルエラー)をJAVAで実装
0010デフォルトの名無しさん2013/06/09(日) 22:04:36.22
>>6
こんなかんじ?
http://ideone.com/9g1M3D
0011前スレの9912013/06/09(日) 23:10:00.47
>>10
わざわざありがとうございます。
一応 setZow(Zow z)が抜けてたので補完して・・・
まぁ、質問しまくって、俺みたいな馬鹿で中途半端な知識量でも
private finalの部分は一応わかっていました。
(たぶん、私にわかりやすくと思い書いて頂いたと存じます)
自分の疑問だったのは、static finalのインスタンスをメソッドが
なぜ変更されないのかが疑問だったので。
前スレの>>987さんの説明の参照の値渡し。
っていう説明とC++で書いた例のソースを見してもらって理解しました。
0012デフォルトの名無しさん2013/06/10(月) 10:49:48.70
Oracle、Java向けタイムゾーン更新ツールの無償提供を打ち切る
ttp://developers.slashdot.jp/story/13/06/09/0635243/
0013デフォルトの名無しさん2013/06/10(月) 11:09:46.69
グローバルワイドな一流人材はUTCしか使わないから無問題。

どうしてこう、政治家は歴制度をいじりたがるかね
0014デフォルトの名無しさん2013/06/10(月) 13:19:08.13
UTCでしか業務しないエンドユーザーは
世界の一握りしかいないのだが、
その限られた顧客しか相手にしない>>13は
無問題なのだろう
0015デフォルトの名無しさん2013/06/10(月) 16:07:52.19
>>13=キチガイ
0016デフォルトの名無しさん2013/06/10(月) 20:38:21.34
>>1-15 =クソスレ住人
0017デフォルトの名無しさん2013/06/10(月) 21:03:38.04
ム板のどのレス見ても井の中の蛙大海を知らず的なレスばかり
この世のどのプログラマも自分が携わった分野しか知らないんだから
業界全体を知った風なこと言う奴ってどうかしてるわ
>>13とか>>14のことね
0018142013/06/10(月) 21:06:58.37
>>17お前だけには言われたくないわ
0019デフォルトの名無しさん2013/06/10(月) 21:22:26.57
おまえらみんな自分のしたレスをもっと冷静になって客観的に見るんだ!自分がいかに恥ずかしいレスをしているか!
0020デフォルトの名無しさん2013/06/10(月) 21:24:34.79
他人事のようにというふうにあなたはおっしゃったけれども、私は自分自身を客観的に見ることはできるんです。あなたとは違うんです。そういうことも併せ考えていただきたい
0021桃白白 ◆9Jro6YFwm650 2013/06/11(火) 01:49:56.40
>>20
福田さんだ、この人ぜったい福田さんだ。
0022デフォルトの名無しさん2013/06/11(火) 05:56:22.68
>>17
自己紹介乙
0023デフォルトの名無しさん2013/06/11(火) 10:17:04.90
教えてください。
java.lang.Threadクラスのsleepで使っている、システムタイマーと
java.util.Timerで使っているシステムタイマーは同じものですか?
0024デフォルトの名無しさん2013/06/11(火) 11:17:32.73
違うんじゃね?java.lang.Thread#sleep()は、たぶんタイムゾーンもうるう秒もシカトする
0025232013/06/11(火) 11:23:07.16
>>24
java.util.Timerでシステム時刻を変更すると処理がとまる可能性がある
という記事を見つけて、対策をしないといけないのですが、そうなると
Thread.sleepはどうなんだろうとおもって。
0026デフォルトの名無しさん2013/06/11(火) 12:15:19.31
猪瀬のせいで、多摩川超えると処理が止まるとか、それはやだなぁ
0027デフォルトの名無しさん2013/06/11(火) 18:49:21.32
>猪瀬のせいで
は?
0028デフォルトの名無しさん2013/06/11(火) 20:11:09.31
>>25
API 仕様からはそのような挙動は
許されないように想えるんだけど、
バグなの?
0029デフォルトの名無しさん2013/06/11(火) 21:39:40.47
イマドキのOSをネットに繋いで普通に運用していたら、
システム時刻なんてしょっちゅう変更されているはずなのだけれど?
0030デフォルトの名無しさん2013/06/11(火) 21:49:33.63
JavaSEがCookieやSSLを実装している以上、時計あわせはジャバラーの義務っ

カレンダで試用制限とかしてるアプリ職場に押しつけられると、
カレンダ偽装する奴が増えてトラブルになるんでやめろー
0031デフォルトの名無しさん2013/06/11(火) 22:27:30.64
>>29
どうせ時刻逆転のケースだろ
近代的オペレーティングシステムで
普通それはない
0032デフォルトの名無しさん2013/06/11(火) 23:40:51.41
関数の計算結果を自動的にグラフ作成し 画像として
ホームページなどに表示する手順などを解説している
サイトや著書などを知ってる方おりましたら

おすすめをお願いします。
0033デフォルトの名無しさん2013/06/12(水) 00:21:15.97
三角関数や対数程度でいいのなら「Processing」でアマゾンぐぐれー
0034デフォルトの名無しさん2013/06/12(水) 00:28:24.66
サーバーでgnuplotでも動かせばいいじゃない
Javaで調べるとまずアプレットが出てくると思うけどそれだけはやめとけ
0035デフォルトの名無しさん2013/06/12(水) 00:42:51.42
・HP掲載のJavaとJavaScriptを勘違いして質問している
・HP掲載のJavaAppletでの表示の話
・サーブレットの動的HPの作成の画像作成の話
0036デフォルトの名無しさん2013/06/12(水) 00:44:22.00
JAVAのGUIアプリでグラフ画像とHTML自動生成の話という可能性も微レ存
0037デフォルトの名無しさん2013/06/12(水) 01:18:33.60
グラフならd3かhighchartだな今なら。
0038デフォルトの名無しさん2013/06/12(水) 01:38:51.62
質問するところを間違ってしまったみたいで申し訳ないです
>>33 >>34 >>35 >>36 >>37
ありがとうございます

早速Amazonにあった本や論文などを学校の図書購入希望
やキャットで検索や閲覧希望ぶち込みました。
0039デフォルトの名無しさん2013/06/12(水) 04:18:35.20
Java Platform Standard Edition 7 ドキュメント
http://docs.oracle.com/javase/jp/7/

このドキュメントのダウンロードのzipとか無いの?昔は日本語ドキュメントをダウンロードできた気がしたんだけど
0040デフォルトの名無しさん2013/06/12(水) 04:23:23.32
そもそも何で日本語だけこんなに贔屓にするんだろう?日本顧客が結構金蔓なのか?
0041デフォルトの名無しさん2013/06/12(水) 04:24:07.53
まさか日本政府が要求してたり?
0042デフォルトの名無しさん2013/06/12(水) 05:36:13.30
IT後進国の馬鹿な日本ぐいしかもうJava使ってる国が無いんだろう
0043デフォルトの名無しさん2013/06/12(水) 06:22:38.99
日本GUI
0044デフォルトの名無しさん2013/06/12(水) 06:38:49.80
なぜオーバーライドをデフォルトにしたのですか?
継承先にこのメソッドを破壊された場合はどうしようなどと考えるとテスト項目を作るのが億劫です
0045デフォルトの名無しさん2013/06/12(水) 07:04:45.00
そういうOOPのノウハウの多くはそもそもJava開発で蓄積されたものだからだろ
例えば後付けで追加された@Overrideなんか明らかに設計失敗の証拠で、
本来なら後発のC#と同じくoverride修飾子を付けないとコンパイルエラーとするべきだった
昔は継承は既存コード再利用のための強力な仕組みだとか言ってたけど
Javaによって色々問題点が明らかになって今は大分考え方が変わったからな
0046デフォルトの名無しさん2013/06/12(水) 07:17:29.26
>OOPのノウハウの多くはそもそもJava開発で蓄積されたものだからだ
JAVA信者の基地外っぷりもここまでいくと
人としてやばい
0047デフォルトの名無しさん2013/06/12(水) 07:24:36.07
「継承先にこのメソッドを破壊された場合はどうしよう」などと悩むのはどんな
ケースだろう?

オーバーライドされたり派生クラスで実装が与えられたときの振る舞いを注意深く
扱うのはprotectedかabstractなメソッドぐらいであって、その他publicなメソッド
についてはあまり気にしないけれどもなぁ。
いくらオーバーライドを禁止したところでデコレーター使えばいくらでもpublic
メソッドの実装なんて差し替えられるわけだし。
0048デフォルトの名無しさん2013/06/12(水) 07:26:43.77
オーバライドって元々は、既存コードは変更しないというルールの下で
既存コードが変更できないなら上書きすればいいじゃないという考え方が基本だから
後から勝手に何でもかんでもオーバライドできたほうがいいわけ
今ではそういうやり方は糞と考えられてるが
0049デフォルトの名無しさん2013/06/12(水) 07:32:15.56
>>47
publicメソッドを同じクラス内から呼んでる場合があるだろ?
0050デフォルトの名無しさん2013/06/12(水) 08:10:24.00
とりあえずコンストラクタからpublicメソッド呼ぶのやめい
0051デフォルトの名無しさん2013/06/12(水) 11:55:50.72
なんで?
0052デフォルトの名無しさん2013/06/12(水) 12:17:51.42
親クラスプログラマにしてみれば、
コンストラクタぐらい目の行き届くとこでやって欲しいし、
子クラスプログラマにしてみれば、
自分のコンストラクタ始まる前にインスタンスメソッド呼ばれても困る

PMD使えばまとめて検出できるよ
0053デフォルトの名無しさん2013/06/12(水) 12:50:33.87
消えろじゃヴぁ
0054デフォルトの名無しさん2013/06/12(水) 13:16:22.61
仕事のない糞言語から目の敵にされる我らがJAVA様
0055デフォルトの名無しさん2013/06/12(水) 13:52:48.75
ピーターの法則:
組織において有能な人間は昇進しより高い能力を求められ、無能になったところで昇進が止まる
ゆえに組織のいたるところ無能な人間で満たされる

これを人間からソフトウエアに置き換える

たとえばWindows, たとえば C,Java
これらは有用と評価され普及度を高め、クソと評価されるあたりで普及が止まった

これらに対し、社会経験のない中二病、もとい、お子さまは
世の中はクソで満ちあふれている、俺が何とかしなければと情熱を燃やすのである

なお、それが非常にうまく行った場合、結局は上の行程を繰り返すのみ
0056デフォルトの名無しさん2013/06/12(水) 14:52:03.59
Windowsって普及止まったの?CEのこと?
0057デフォルトの名無しさん2013/06/12(水) 20:04:01.93
>>52
C++最高というわけですね
0058デフォルトの名無しさん2013/06/12(水) 20:11:05.29
真のプロフェッショナルはクラス利用者の勝手な継承を許さないようにコーディングする
どうしても継承したい場合はユーザーが自分でラッパーを書いてそれを継承しなければならないように作る
0059デフォルトの名無しさん2013/06/12(水) 23:57:31.36
初心者向けの本で、

> 継承の仕組みを利用した書き方を、『差分プログラミング』とも呼びます

なんて読んだことがあるけど…。
差分で済むから継承、なんてやってたら、is-a関係がとんでもないことになるよね…。

まずは全てのクラスをfinal & イミュータブルにするのが基本。
状態変化を持つクラスだけ、1つずつアクセス範囲を検討するのが良いんだろうな。
0060デフォルトの名無しさん2013/06/13(木) 00:10:46.99
なぜC系言語しかやってこなかった人は意味も無くpublicにするのだろうか
外から見える分得だと思ってるんだろうか
例え将来的にpublicに使うとしても、もしその瞬間には必要ないのなら時がくるまで閉じておけ。社会の窓を。
0061デフォルトの名無しさん2013/06/13(木) 00:18:52.52
>>55
Windows8は止まることなく退化を続けてるよ。
>>52
別に子クラスが仕様を満たしてなかろうと、親クラスが壊れるわけじゃないからいいだろ。親クラスのここを通って、ここのサブルーチンを…とか言ってる奴じゃないかぎり。
0062デフォルトの名無しさん2013/06/13(木) 00:25:46.46
昔ながらの品質保証部とかが
「外部から観測できない手続きは禁止」
とかいってprivateを毛嫌いしてるんじゃね?
0063デフォルトの名無しさん2013/06/13(木) 00:52:11.93
>>48のような考え方で作ろうとしたら必然的にprivateフィールド禁止になるぜ
親クラスは変更しない前提だからカプセル化する必要もない
実際、サブクラスの自由度のためにフィールドは全部protectedにするという
規約はそう珍しくないし
0064デフォルトの名無しさん2013/06/13(木) 05:37:23.14
protectedなフィールドが一番使用頻度が低いなぁ。

publicかprotectedなアクセサがあれば十分だと思うのだけど。フィールドを裸単騎で
子孫クラスに晒す必要性が殆ど無い。

privateでないフィールドはpublic static finalぐらいしか普段は作らない。
0065デフォルトの名無しさん2013/06/13(木) 05:49:06.23
老害はカプセル化の意味も知らないんだろうか
0066デフォルトの名無しさん2013/06/13(木) 06:38:24.62
アクセサさえ通してればカプセル化だと思ってる>>64みたいな奴は非常に多いよね
0067デフォルトの名無しさん2013/06/13(木) 06:56:19.19
必要条件と十分条件の区別も十分につかない>>66みたいな奴も非常に多いよね。
0068デフォルトの名無しさん2013/06/13(木) 07:12:53.36
既存クラスは変更せず、必要な変更はオーバライドによって行うという条件なら
フィールドはとりあえずサブクラスから好きに触れるようにしないと仕方ない
という話に対して、アクセサ使えばいいと言うのは的外れだろう
結局片っ端からアクセサで公開することになり問題の本質は変わらん
0069デフォルトの名無しさん2013/06/13(木) 07:27:31.01
派生でオーバーライドやり放題だと全部パブリックと大差ない
やろうと思えば基底を無視して全部上書きも出来るのだから
それでは基底を引数に受けとるメソッドはどうやってテストすればよいのか
膨大な量になるぞ
派生が作られるたびに今まで作って来た基底を引数に受けとるメソッドを追加でテストしなければならない
0070デフォルトの名無しさん2013/06/13(木) 07:33:48.09
>結局片っ端からアクセサで公開することになり

ならないよ。

子孫クラスに対して実装の詳細を隠すことも知らないのであれば、とりあえず
クラスの設計をする手を止めて既存の有名どころのライブラリやフレームワーク
のJavaDocでも色々読んだ方が良い。

protectedフィールドで内部状態を子孫にガンガン公開している実装なんて
どれほどあることやら。protectedはabstract methodと同様に継承によって機能
拡張できるポイントとして慎重に、かつ詳細なドキュメントと共に定義されて
いるのが殆どだと思うが。
0071デフォルトの名無しさん2013/06/13(木) 07:38:42.12
>>69
基底クラスのメソッドにこのメソッドは○○しなければならないと明記しておいて、
受け取る方のメソッドには引数として受け取ったインスタンスのメソッド××を呼び出すと明記しておく。

テストでは受け取る方のメソッドが××を実際に呼び出してるかどうかテストすりゃOK。
0072デフォルトの名無しさん2013/06/13(木) 10:15:53.42
メソッドのオーバーライドを出来ないようにしろで終わる話なのに
オーバーライド出来るケースの話を延々とするチンパンジー達
0073デフォルトの名無しさん2013/06/13(木) 10:46:11.91
カプセル化と継承による機能変更は両立するものではない
0074デフォルトの名無しさん2013/06/13(木) 13:54:02.01
アグリゲーションとコンポジットの違いがあるからには、private一点張りじゃなくて、protectedが必要なこともある。
0075デフォルトの名無しさん2013/06/13(木) 15:47:20.50
publicがオブジェクトの使用者向けのAPIであるようにprotectedはクラスの
開発者向けのAPIの一部だから。

finalでないpublicフィールドの公開がまずあり得ないようにfinalでない
protectedフィールドの公開もあまり無い。protectedフィールドを再代入
出来る形で子孫クラスに公開したところで、再代入したら何が起こるかは
詳細にドキュメントに書くか、あるいは親クラスのソースを遡って影響範囲
を検討する必要がある。大抵便利でも安全でもないので普通に避ける。
実装の詳細に関する知識を共有した見知った範囲の人間がコードを弄る際の
手抜き程度しか出番は無いと思う。

protected finalも、例えばハンドラ等のオブジェクトを子孫クラスに触ら
せる場合はフィールドよりゲッター使った方が色々便利なのであまり出番が。
使用者には公開しないプリミティブ型や文字列の不変値ぐらいか。
0076デフォルトの名無しさん2013/06/13(木) 16:27:36.93
どうして基地外ほど長文を書きたがるんだろう
0077デフォルトの名無しさん2013/06/13(木) 17:19:55.61
フィールド全部protectedとかprivate禁止とかありえんだろ。
0078デフォルトの名無しさん2013/06/13(木) 19:22:14.27
リスナーとかデザパタ実装するならオーバーライド便利やねん
てかそういうときだけしか使わんけどねん
0079デフォルトの名無しさん2013/06/13(木) 19:24:39.46
>デザパタ実装するなら
この考え方がまさにJAVAドカタ
0080デフォルトの名無しさん2013/06/13(木) 20:27:32.83
privateだと舐めるな!
こっちにはリフレクションがあるんだぞ!
0081デフォルトの名無しさん2013/06/14(金) 04:33:21.59
ドカタはリフレクション使えないから心配ない。
0082デフォルトの名無しさん2013/06/14(金) 05:03:36.73
リフレクションは設計崩壊の産物
ダイナミックキャスト並みに要らない
0083デフォルトの名無しさん2013/06/14(金) 05:34:38.03
ドカタがリフレクション使う必要は無いけれどもドカタでも使えるものを作るには
リフレクションも必要なんだよ。比較的真面目な話として。

フレームワークのAPIとしてはキャストやリフレクションが不要な綺麗な設計に
なっているのに対してフレームワークの実装中ではjava.reflectやCGLIBの類を
ガンガン使っているのは割と普通。
アノテーションとかも定義済みのを使っているうちはリフレクション不要だけど
自前で定義し始めると簡単なリフレクションを使う必要があるよね。
0084デフォルトの名無しさん2013/06/14(金) 06:05:24.94
フレームワーク実装したこともない奴がフレームワーク実装の話をするチンパンジースレ
難読化もできないしな
0085デフォルトの名無しさん2013/06/14(金) 19:34:43.32
Javaの基礎の本と、Eclipseの本でいいのがあったら教えてください
0086デフォルトの名無しさん2013/06/15(土) 00:59:36.75
プラグインありきのeclipseなのに、それ系の本買う奴ってマジで馬鹿だと思う
あんなもん直観的にわかるだろ。まぁ俺も昔1冊買ったことあるけど
0087デフォルトの名無しさん2013/06/15(土) 01:19:43.22
>>85
かっこいいやつ
タイトルは覚えてないが自分がこれから使うバージョンを解説したものを選べ

>>86
じっくり機能を把握したいじゃん♪
3000円越える本は図書館にリクエストを出すという手がある。
0088デフォルトの名無しさん2013/06/15(土) 01:39:47.29
if文の書き方なんですが、

if( !(src.equals(dst))) { 〜〜
というのと、
if( src.equals(dst) == false ) { 〜〜
というの、どちらが慣習的に普通なんですか?

不毛な質問でごめんなさい。
0089デフォルトの名無しさん2013/06/15(土) 02:04:17.88
慣習じゃなくてjavaでオブジェクトの比較を行うとき
その2つは判定方法が違うんですけどー(プリミティブ型は除く)

equalsはオブジェクトが同じなら真を返すけど
==は生成されたインスタンスが違えばオブジェクトの中身が同じでも偽になる
0090デフォルトの名無しさん2013/06/15(土) 02:49:28.95
>>88
boolean型なら、どっちでも動作は変わらないんだけどね。
前者が極めて一般的。

あえて後者を使っていた場合「すごく複雑な論理演算の結果、falseなんだぞ!」という強い意図を表してる。
コードの読み手は、そこに何かトリッキーな仕掛けがあるんじゃないかと疑うのよ。

だから、ごく普通のif文では if(xxx == false) とか if(xxx == true) は使わないな。
0091デフォルトの名無しさん2013/06/15(土) 02:52:24.79
!だと見落としのミスが増えそうな印象
(事実、俺はよく見落とす)
0092デフォルトの名無しさん2013/06/15(土) 03:53:50.62
一般的とかそういう感覚じゃねーから
0093デフォルトの名無しさん2013/06/15(土) 05:01:16.96
気持ち悪いならnot_equalsでも作れ
0094デフォルトの名無しさん2013/06/15(土) 07:11:23.97
javaの初心者です。
質問さして下さい。
オブジェクトの比較で
  == を使うときって、そのインスタンスのハッシュ値が同等の時だけtrueですか?
また、
eaualsを使うときは、そのインスタンスの中身さえ同じならばtrueですか?
どなたかご教示ください。
0095942013/06/15(土) 07:12:47.96
あ、88さんも同じ質問してたみたいですね。
すみません。
0096デフォルトの名無しさん2013/06/15(土) 07:19:25.24
質問さしてください。
javaをある程度学んで、NetBeensってやつで
メニューとJTextAreaをペタってはって、JFileChooserでファイルを選んで
File file = filechooser.getSelectedFile()で
Fileのインスタンスを得て、JTextAreaに表示するだけって事をしたいんですが
JTextAreaの変数(ここではtxtareaとします)
txtareaのどのメソッドを選んで、どういう処理をしていけばいいんでしょうか
しょうもない質問ですが、ご教示ください。
0097デフォルトの名無しさん2013/06/15(土) 08:27:38.96
>>94
>>89
0098デフォルトの名無しさん2013/06/15(土) 08:40:34.35
>>96
ttp://www.javadrive.jp/tutorial/jfilechooser/index5.html
0099デフォルトの名無しさん2013/06/15(土) 08:46:12.36
テキストエリアの一部の文字だけ文字色やフォントを変えることは出来る?
自分で文字位地と長さ調べて別のテキストエリア貼らなきゃダメかな
0100デフォルトの名無しさん2013/06/15(土) 08:49:26.88
質問する奴は名前欄に番号書けよ・・・
同じ奴なのか別人なのかわからん
0101942013/06/15(土) 10:57:25.36
すいません。
>>89を見たんですが
自分の書いた>>94の考え方でも良いのでしょうか
良ければ、良いと、違うなら、違うと
どなたか、答えてくれませんでしょうかお願いします。
0102桃白白 ◆9Jro6YFwm650 2013/06/15(土) 11:49:32.63
>>101
すこし違う。
==はReference Equality Operators。
つまり、参照同じ演算子。
同じオブジェクトを参照してたらtrue。

hashCodeはオブジェクトが異なるときはできるだけ違う整数を返すようにしましょうと
されてるものなんで、==がfalseのとき、hashCodeも違ってくるものなのだけれども、
hashCodeを参照して==の結果が決まってるわけじゃないっすよ。

equalsはequalsの実装しだいなのだけれども、Objectなんかは
参照が違ってたらequalsがfalseを返しちゃう。なので中身が同じならと
一概に言えるわけじゃない。
0103桃白白 ◆9Jro6YFwm650 2013/06/15(土) 11:53:32.16
>>102
>==がfalseのとき、hashCodeも違ってくるものなのだけれども、
equalsがfalseのとき、hashCodeも違ってくるものなのだけれども、
0104デフォルトの名無しさん2013/06/15(土) 11:54:20.70
基本情報を取らない弊害がまた出たな
基本情報をちゃんと取っていれば
値、参照、ハッシュ値の違いなどで悩む事はなかったのにね
0105桃白白 ◆9Jro6YFwm650 2013/06/15(土) 11:56:49.38
>>104
百済ねえやつ。百済からの回し者か?百済に帰れ。
0106942013/06/15(土) 13:03:57.66
>>102
なるほど、ありがとうございます。
それよりなにより
俺みたいな中途半端な質問でも
解かりやすく、詳しく説明してくれたことに
感謝感謝です。
0107デフォルトの名無しさん2013/06/15(土) 13:35:30.16
>>99
普通に<font>タグで変えられるよ。
本物のswingプログラマはjavax.swing.text.AttributeSetを使うが、ひたすら面倒
0108デフォルトの名無しさん2013/06/15(土) 13:48:42.31
オブジェクト間の==は同一インスタンスの時だけtrueで、
Object#equals()実装も同様。

それ以外は何でもありで、HashMapとかでトラブル起こしても、
それはequals()やhashCode()のオーバーライド仕様を明記できてない発注者に全責任がある。
0109デフォルトの名無しさん2013/06/15(土) 14:56:37.50
仕様に明記する暇にコードかけると思うんだが上流工程ってそんなに暇なのか?
新人の時にコード内容までキッチリすべて(ただし日本語で)書いてある仕様書みた時は自分の目を疑ったよ
そのうちエクセルコンパイラ作るやつが現れるんじゃないかと古株の先輩にジョークを飛ばしたら苦い顔をされたな
0110デフォルトの名無しさん2013/06/15(土) 15:02:43.34
ドメイン分析できてないと、ほどよく高速に散らばるハッシュ値実装は難しくね?
0111デフォルトの名無しさん2013/06/15(土) 15:40:17.69
なぁ、oracle のjava プログラマのSilverを取ろうと思って
対策本買って、一通り解けたけど
ホームページの例題で初期化ブロック使ったようなコードがあったり
するんだけど、どこまでの知識がいるの?
もうわかんねーよ。
0112デフォルトの名無しさん2013/06/15(土) 15:46:20.15
オブジェクトの論理等価性について事前の分析はきっちり必要だけれどもそれを実際に
equalsやhashCodeとして実装する際は無理に手作りせんでもEclipseでダイアログ開いて
フィールドぽちぽち選択してOKして自動生成させた方が大半のケースで安全確実だと思う。
比較の抜けや一般契約違反も無いし。
0113デフォルトの名無しさん2013/06/15(土) 16:40:52.44
>>111
初歩的な内容しか出ないよ
0114デフォルトの名無しさん2013/06/15(土) 19:25:04.46
Stringの#hashCode()と#equals()で、昔から疑問に思ってることがあるんだけどさ。

equals() の中で1文字ずつチェックする直前、
自身と他者のhashが0でないとき、
つまり両者のhashが確実に計算済みであると保証できるとき、
hashが一致しなければ中身を見るまでもなくfalseを返す。

って実装にすれば、もっと速くなるんじゃね? と思うんだけど。
何か問題でもあるのかね?
0115デフォルトの名無しさん2013/06/15(土) 19:44:50.78
問題はないだろう
0116デフォルトの名無しさん2013/06/15(土) 20:09:25.78
超基礎的な部分だから、移植性を考慮してシンプルな実装にしときたかったんじゃない?
マルチスレッドで気にすることが増えそう
今のJavaの仕様だと特に問題はないだろうけど
0117デフォルトの名無しさん2013/06/15(土) 20:51:06.38
ハッシュ値を計算するコストの問題だと思うよ。

実際ハッシュ値ってイミュータブルなオブジェクトを除いてhasnCode()が呼ばれたら
安直にその都度計算している実装が多い。そしてaとbがイコールであることを調べる
コストとaとbのハッシュをそれぞれ計算するコストは極端には違わない。
仮にaとbのハッシュ値が同じでも改めてイコールであることを確かめる必要があるので
ハッシュ値を使っても二度手間になるというかかえって遅くなりそう。

イミュータブルだったり賢いハッシュ値の更新管理をしているクラスであればその
equals内でハッシュを使うのは当然ありだけど、そういう最適化は各クラスの実装の
中で閉じているべきであって、それらをフィールド値として持つクラスは各クラスが
最適なequalsの実装をしていると信じて素直にequalsを呼ぶのが良いのでは。
0118デフォルトの名無しさん2013/06/15(土) 20:52:47.85
あ、ごめん、Stringの実装の話でしたか。読んでなかった。
確かにそれは変だよね。何でだろう。
0119デフォルトの名無しさん2013/06/15(土) 21:05:48.08
ほんと、バカほど長文がすきだね
0120デフォルトの名無しさん2013/06/15(土) 21:16:06.80
>>114
ハッシュ未計算のフラグにhash == 0使うのやめい。
1.7でもまだ直ってないのか

去年どこかで脆弱性レポート出たよな?
hash=0になるようなクエリばかり送りつけるDDoS攻撃が
01211142013/06/15(土) 21:16:07.32
>>118
うん、Stringとか、ハッシュ値をキャッシュできる/してるイミュータブルなオブジェクトの話。

// nullチェック、instanceofチェックは事前にやってる。
if (hash != 0 && other.hash != 0) return hash == other.hash;
増えるコストはこのif文。爆速っしょ。


>>115>>116
問題ないはずだよなぁ…。

BigInteger, BigDecimal, Locale, URI, Pattern, UUID, File
Java1.7でイミュータブルっぽいクラスを見てきたんだが、どのequalsもhashのキャッシュなんか使ってなかった。

Fileに至っては、return compareTo(other) == 0; とか。
hashには依存しないのに、compareToには依存するのかよ。

もしかして、なにか盛大に勘違いしてるのか?
0122デフォルトの名無しさん2013/06/15(土) 21:28:33.68
実装としては正しくても意味的に
素直じゃないからだろ
ついでに、文字列が長くて、先頭が同じで、
最後だけ違う文字列の比較でしか役に立たない
ウンコなコードは要らない

>if (hash != 0 && other.hash != 0)
> return hash == other.hash;
しかも間違ってるし
0123デフォルトの名無しさん2013/06/15(土) 21:49:48.32
爆速って試してみたってこと?それとも机上の推論?
Stringがどんな用途で使われることが多いか知らんけど
0124デフォルトの名無しさん2013/06/15(土) 22:09:09.19
机上の空論。しかもコード間違ってたし…
多くの環境では、比較命令の中でも0との比較は高速っていう印象だったんで。

確かに >122 の言う「ウンココード」を追加しなきゃいけない割には、
高速化できるシチュエーションは少ないかもしれない…。
0125デフォルトの名無しさん2013/06/15(土) 22:25:38.88
まあコンセプトとしてはいいんじゃね
ウンココードhere:
http://ideone.com/t4oYJq
0126デフォルトの名無しさん2013/06/15(土) 22:40:34.97
javaってほんとダメな言語だな
根本にあるコンセプトは悪くないんだが
0127デフォルトの名無しさん2013/06/15(土) 22:41:36.41
なんだいきなり
そう思った根拠ぐらいは書いた方がいいぞ
0128デフォルトの名無しさん2013/06/15(土) 22:43:38.66
>>127
スレの流れ読めばわかるが?
0129デフォルトの名無しさん2013/06/15(土) 22:44:29.02
覚えたばかりの言葉は使ってみたくなるのが人の道理

俺もそのコンセプトはよく分かるわー
0130デフォルトの名無しさん2013/06/15(土) 22:55:41.21
おれもコンセプトには世話になったよ
0131デフォルトの名無しさん2013/06/15(土) 23:04:13.40
>>125
わざわざ書いてくれたのか。
26万文字×1000回とか、まさに俺の思い描いていた理想のシチュエーションだわ(^q^)

>>126
ルートにあるコンセプトはブラウザプラグインとしてのエンバイロンメントフリーなリッチクライアントだから。
0132デフォルトの名無しさん2013/06/15(土) 23:17:18.83
>理想のシチュエーションだわ(^q^)
>エンバイロンメントフリー
もうやめて…
0133デフォルトの名無しさん2013/06/16(日) 00:39:10.04
ハッシュ比較のコードが入ってない場合の全比較はどれくらいなのよ
0134デフォルトの名無しさん2013/06/16(日) 08:04:43.56
ジェネリック使いにくい
0135デフォルトの名無しさん2013/06/16(日) 08:08:56.91
使いにくいなら使わなければいいじゃない
0136デフォルトの名無しさん2013/06/16(日) 08:24:12.14
インターフェイスにhashCodeメソッドなどを書いていないのに
そのインターフェイスを通じてhashCodeなどを呼び出せるのは何故なのでしょうか?

クラスがObjectを暗黙に継承していることは理解しています
しかしインターフェイスの親はインターフェイスでなければならないので
インターフェイスがObjectを継承するのはおかしな話です

なのにインターフェイスを通じてhashCodeを呼び出せてしまう……
わけがわかりません
混乱してあたまがおかしくなりそうです
0137デフォルトの名無しさん2013/06/16(日) 08:36:29.20
細かいことをすっ飛ばして説明すればInterfaceのメンバはObjectのパブリック
メソッドを含むと言語仕様で定義されているから。
0138882013/06/16(日) 08:51:21.21
booleanが戻り値の場合を想定していましたが、どちらにしろ前者が普通なんですね。
ありがとう御座いました。

大昔にExcelVBAしかやった事が無かったので、質問させて貰いました。
0139デフォルトの名無しさん2013/06/16(日) 11:36:08.63
89の説明は壊滅的に間違ってるが、結論は正しい。
90がいいな。どちらにせよ前者が普通。
0140デフォルトの名無しさん2013/06/16(日) 11:53:19.92
ドカタには否定の論理は難しいから
== false
と書かせるのが吉
0141デフォルトの名無しさん2013/06/16(日) 11:58:15.36
ドカタには論理型は難しいから
==false)==true
しかし、==trueの結果もまた論理型なので
==false)==true)==true
以下再帰的に続く
0142デフォルトの名無しさん2013/06/16(日) 12:02:27.03
これが後に言う越後屋事変である
0143デフォルトの名無しさん2013/06/16(日) 12:12:29.30
ところでおまいらelse句って知ってるのか?
0144デフォルトの名無しさん2013/06/16(日) 13:20:59.55
よし、if文使うのやめよう(関数型言語過激派)
0145デフォルトの名無しさん2013/06/16(日) 13:28:56.33
関数型は素晴らしい
設計書を書くのもテストするのも楽だ
日本のIT業界ではコードの日本語訳である設計書の作成とテストが実務の八割を費やしている
ここを短縮できれば大幅に仕事効率が改善される
0146デフォルトの名無しさん2013/06/16(日) 13:53:06.19
仕事効率もクソもその無駄な作業をして時間給を貰う仕事なのだから
効率なんて上げなくていいよ
0147デフォルトの名無しさん2013/06/16(日) 14:19:35.64
それもそうだな
効率が悪くて困るのは経営陣だけだし
傾いて来たら転職すりゃいいし
0148デフォルトの名無しさん2013/06/16(日) 14:42:11.88
何より素晴らしいのは
関数型ではこれはできませんやりませんで済ませられる点だ
0149デフォルトの名無しさん2013/06/16(日) 16:56:43.58
質問です。

ttp://d.hatena.ne.jp/seraphy/20100622 に "Apple Java Extensions" なるものについて書いてありますが、
これはどこで手に入るのでしょうか。

お願いします。
0150デフォルトの名無しさん2013/06/16(日) 17:10:43.15
いくら出せる?
0151デフォルトの名無しさん2013/06/16(日) 17:36:54.11
50円
0152デフォルトの名無しさん2013/06/16(日) 17:38:46.73
うまい棒五本じゃ晩飯にもならないよ
0153デフォルトの名無しさん2013/06/16(日) 17:46:11.70
5円チョコ10個買えるやんけ
01541492013/06/16(日) 18:16:14.28
>>150-153
有料なんですか?
"Apple Java Extensions" なるものがどういうものかよくわかってないのですが。
0155デフォルトの名無しさん2013/06/16(日) 22:13:07.50
>>149
stackoverflow.com/questions/15048220/
> They are included both in the Oracle distribution and in OpenJDK.
だとさ。Mac使ってないから知らんけど。
0156デフォルトの名無しさん2013/06/16(日) 23:07:29.34
>>136-137
気にしたこと無かったのでこの機会に自分でも調べてみた。

docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.2
> (前略)the interface implicitly declares a public abstract member method(中略) corresponding to each public instance method(中略) declared in Object(後略)
コンパイラがゴニョってんのか。

そういやJava8でinterfaceにデフォルト実装持てるようになるけど、hashCodeなんかは別扱い(デフォルト実装持てない)だな。
0157デフォルトの名無しさん2013/06/16(日) 23:34:42.37
質問です
ByteBuffer#get(byte[] dst)でdstへデータを読み込む際にバッファー内のデータがdst.lengthより小さいと例外が発生します
これは仕様のようなのですが、なぜ配列のサイズより小さいデータを入れるだけで例外とするのでしょうか。
これでは次に大きなデータを受けるときにわざわざbyte[]を作り直す手間が勿体無く感じるのですが
0158デフォルトの名無しさん2013/06/16(日) 23:46:49.70
>>157です
自己解決しました。スレ汚し失礼しました
01591492013/06/17(月) 00:03:31.64
>>155
なるほど。ありがとうございます。

しかしドキュメントが無さすぎて使い方がさっぱりわからない。
(>>149で挙げたブログ中のリンクもリンク切れ)
どなたか OS X のメニューのハンドリングについて情報持ってる方いませんか?
0160デフォルトの名無しさん2013/06/17(月) 15:57:21.83
>>141
いるんだよなこういうバカが
式の型がbooleanかどうかは関係なく
ドカタが認知しやすい形かどうかが重要
 if (!fuckReturnBoool()) ドカタ理解困難
 if (fuckReturnBool()==false) ドカタ理解容易
 if ((fuckReturnBool()==false)==true) ドカタ理解不能
0161デフォルトの名無しさん2013/06/17(月) 16:52:42.40
>>160
>> if ((fuckReturnBool()==false)==true) ドカタ理解不能
こんなコードを書くアホウはいないだろ(笑)
0162デフォルトの名無しさん2013/06/17(月) 16:59:24.21
>>160
>> if ((fuckReturnBool()==false)==true) ドカタ理解不能

書き方がトーシロー ってわかってるのか? >>160のアホ
ま、書いてる 意味がわからんだろうけどな(笑っちゃお)
0163デフォルトの名無しさん2013/06/17(月) 17:07:21.24
読みやすい、わかりやすいコードを書けるのがいいコーダーだと思うんだけど違うのか?
0164デフォルトの名無しさん2013/06/17(月) 17:13:05.77
そこまで親切なコード心がけるんだったら
isで始まるboolean型ローカル変数で評価してやれよ。
0165デフォルトの名無しさん2013/06/17(月) 17:15:13.81
質問失礼します。

SwingのJFrameの手前に描画されているものから順に処理していきたいです。
JFrameのZ値はどのようにして取得したら良いでしょうか?
分かる方、よろしくお願いします。
0166デフォルトの名無しさん2013/06/17(月) 17:28:44.05
つ java.awt.Container#getComponentZOrder()

手前から描くと、最奥のJFrame描くときに全部消されちゃうぞ?
01671652013/06/17(月) 17:36:34.38
>>166
すいません。
質問の書き方が間違っていました。

JFrame内のコンポーネントのZ値ではなく、JFrameそのもののZ値です。
JFrame(ウィンドウ)がデスクトップ上にいくつも表示されています。
手前に表示されているJFrameから順番に処理していきたいという意味です。

よろしくお願いします。
0168デフォルトの名無しさん2013/06/17(月) 18:22:14.44
>>if ((fuckReturnBool()==false)==true) 

これ見てなんとも思わないようなのはシロートレベルだと思うが?
今のプログラマはその程度なのか?
0169デフォルトの名無しさん2013/06/17(月) 20:16:45.14
そのレベルは>>141だけ
0170デフォルトの名無しさん2013/06/17(月) 20:53:21.07
16bit グレースケール tif を読めるライブラリってあります?
JAIでは読めませんでした。
0171デフォルトの名無しさん2013/06/17(月) 21:09:26.48
http://blog.goo.ne.jp/jn1inl/e/41671c99becc809610559faa2cd1c04a
0172デフォルトの名無しさん2013/06/17(月) 22:02:34.04
clsやclearのように標準出力に出力した文字をクリアする方法を教えて下さい
windowsXP,7依存でもいいのでお願いします
0173デフォルトの名無しさん2013/06/17(月) 23:50:54.23
標準出力に出力した文字はクリアできません
不可能です

ターミナル画面をクリアしたいという話なら
↓ が回答
0174デフォルトの名無しさん2013/06/18(火) 00:08:00.77
JNIでコンソール制御Win32 API
0175デフォルトの名無しさん2013/06/18(火) 00:19:45.43
はい次
0176デフォルトの名無しさん2013/06/18(火) 00:55:27.66
DOS窓の話ならまずANSI.SYSでググれ
0177デフォルトの名無しさん2013/06/18(火) 05:36:10.18
SWINGでクリックイベントやマウスイベントをスルーさせて、
後ろのウィンドウに処理させる事は可能でしょうか?
0178デフォルトの名無しさん2013/06/18(火) 10:35:28.50
当然プロセスをまたぎます(キリッ
とか言い出す予感
01791772013/06/18(火) 13:51:09.42
>>178
いえ、プロセスはまたぎません。
0180デフォルトの名無しさん2013/06/18(火) 16:08:45.43
javax.swing.SwingUtilities#convertMouseEvent()
でイベント変換できないかな。

スクリーン座標との変換はconvertPointFromScreen、convertPointToScreenあたりで

場合によってはgetDeepestComponentAtも必要?

SwingプログラマならSwingスレにいそうだが
0181デフォルトの名無しさん2013/06/18(火) 16:40:55.56
てst
01821772013/06/18(火) 18:54:43.16
>>180
ありがとうございます。

とりあえず全てのウィンドウを配列にして管理して、上から順に処理するようにしました。
ウィンドウの矩形にヒットしているかチェックして、ヒットしていたらdispatchEventでイベントを流し込みます。
技術的なノウハウが無いのでめんどくさい処理になってしまいました。。。
0183デフォルトの名無しさん2013/06/18(火) 23:10:50.80
System.in.readの戻り値がcharではなくint型なのは何故でしょうか
0184デフォルトの名無しさん2013/06/18(火) 23:14:16.70
APIリファレンスも読めない人に
理解することは難しい
0185デフォルトの名無しさん2013/06/18(火) 23:37:51.80
InputStreamのread()の戻り値もintなのが不思議
byte型だったらだめだったのかな?
0186デフォルトの名無しさん2013/06/18(火) 23:44:46.09
APIリファレンスも読めない>>183と>>185に
理解することは難しい
0187デフォルトの名無しさん2013/06/18(火) 23:56:08.83
Cの腐った設計を真似したから
としか言いようがない。
出来の悪い設計に論理性を求めてはいけない。
0188デフォルトの名無しさん2013/06/19(水) 00:22:41.18
javaに論理性とか合理性を求めたら負け
0189デフォルトの名無しさん2013/06/19(水) 00:34:44.40
C上がりはdocも読まないのか!?
0190デフォルトの名無しさん2013/06/19(水) 00:42:44.79
>>185
読み終わったら-1を返す仕様だから
byteだと符号付きなので値が変わってしまい扱いにくいから
パフォーマンス的な損も特にないから
0191デフォルトの名無しさん2013/06/19(水) 01:36:14.82
>byteだと符号付きなので値が変わってしまい
は?
0192デフォルトの名無しさん2013/06/19(水) 01:48:43.55
InputStream#readはByteを返すべきだった
0193デフォルトの名無しさん2013/06/19(水) 06:21:25.44
例外なげるのが正解
0194デフォルトの名無しさん2013/06/19(水) 06:44:53.12
Java SE 7update25キター
0195デフォルトの名無しさん2013/06/19(水) 06:48:45.70
byteがsignedで誰が得するの?
あれこそまさに愚かな一貫性というやつだよね
0196デフォルトの名無しさん2013/06/19(水) 06:52:50.34
>>195
MIDIファイルの読み書きする人
役に立つのはたぶん世の中でそれくらいだろう
0197デフォルトの名無しさん2013/06/19(水) 06:56:29.98
>>191
結果の型がbyteだと、結果をそのまま0xffと比較できないんだぜw
0198デフォルトの名無しさん2013/06/19(水) 06:59:19.06
>>197
で、「値が変わる」とは何のこと?
0199デフォルトの名無しさん2013/06/19(水) 07:24:35.68
読み終わったら0を返すでいけるとおもう
0200デフォルトの名無しさん2013/06/19(水) 07:49:56.10
>>199
戻り値が長さの場合の話じゃないよ
0201デフォルトの名無しさん2013/06/19(水) 08:49:30.95
>>193
try {
   buf.write(in.read());
} catch (Exception e) {}
0202デフォルトの名無しさん2013/06/19(水) 11:10:07.96
つまりJavaはbyte型の値「-1」を読みとったときに
int型の255に変換して返す統一性のない
ライブラリ仕様であるとふむふむ
0203デフォルトの名無しさん2013/06/19(水) 12:39:42.94
よそ様のライブラリでは

・0x00を読み込んだとき
・0xffを読み込んだとき
・入力の末端に到達したとき
・末端じゃ無いけどブロックせずに読めそうなデータだけ返すとき

をどう区別してるのか、産業でまとめてくれ。
0204デフォルトの名無しさん2013/06/19(水) 13:02:54.42
>0x00
JAVA言語上の概念であるint型(4バイト整数)の値を
読み込んだときの挙動とな?
0205デフォルトの名無しさん2013/06/19(水) 13:10:32.64
JAVAドカタには
受信データそのものと受信処理のステータスが
別であるという当たり前の発想は無いらしい
0206デフォルトの名無しさん2013/06/19(水) 13:40:49.52
C言語のfgetcとかと同じにしただけなんじゃね?
fgetcよりはエラー時に例外出るだけマシな感じ。
0207デフォルトの名無しさん2013/06/19(水) 14:21:42.17
>エラー時に例外出るだけマシ
まるでfgetcはエラー情報が取れないみたいな言い方だな
0208デフォルトの名無しさん2013/06/19(水) 15:56:23.88
ちがうだろw
0209デフォルトの名無しさん2013/06/19(水) 16:31:18.82
むしろこの際、java.text.CharacterIterator.DONE も廃止して、
int型の-1にするべきだとおもうんだが
0210デフォルトの名無しさん2013/06/19(水) 17:25:03.20
そういう仕様がJavaの利点だと気づいてない人が沢山いますねぇ。
だからJavaが速いことに気づかない
0211デフォルトの名無しさん2013/06/19(水) 18:48:06.52
JAVAドカタの>>209には
受信データそのものと受信処理のステータスが
別であるという当たり前の発想は無いらしい
0212デフォルトの名無しさん2013/06/19(水) 19:15:35.37
符号理論上では対等な事象をわざわざ分ける男の人って…
0213デフォルトの名無しさん2013/06/19(水) 21:05:36.28
どうでもいい
しゃぶれよ
0214デフォルトの名無しさん2013/06/19(水) 21:36:48.67
すみません、質問する場所がわからないのでここで質問します。
Javaが使えるレンタルサーバを借りるとして、サーバ代を打ち消す程度の収益を、
個人の趣味の範囲で望むのはどのくらい大変ですか?
また、比較的安いサーバではweb.xmlを弄らせてくれないようですが、こういうのは避けたほうがいいですか?
それとも<servlet>タグ等はかけるのでしょうか?
0215デフォルトの名無しさん2013/06/19(水) 21:41:34.51
マイJenkins立ち上げるのなら、サーバにメモリ1GBは欲しい
0216デフォルトの名無しさん2013/06/19(水) 22:52:30.18
>>214
VPSを借りろ。月1000円未満で借りられる。
VPSを管理するスキルが無いのなら板違いだ。
0217デフォルトの名無しさん2013/06/19(水) 22:54:00.34
JAVAドカタの>>212には
受信データそのものと受信処理のステータスの
区別がつかないらしい。
int値をシリアライズして伝送するライブラリを
書かせると糞なメソッド仕様になるんだろうな。
0218デフォルトの名無しさん2013/06/19(水) 23:01:07.24
二言目にはドカタの無職さんこんばんは。
0219デフォルトの名無しさん2013/06/19(水) 23:03:02.09
>>214
>サーバ代を打ち消す程度の収益を
どうみてもスレ違いです
0220デフォルトの名無しさん2013/06/20(木) 00:32:27.45
Windowsで動くならそのままAndroidでも動くんですか?
0221デフォルトの名無しさん2013/06/20(木) 00:35:57.39
>>220
GUIとファイルI/OとDBと通信を
使用してなくてjava.langの中だけなら
たぶんいける
0222デフォルトの名無しさん2013/06/20(木) 06:24:54.09
ライトワンスランエニウェアだから動くよ
動かないなら詐欺みたいなもんだ
0223デフォルトの名無しさん2013/06/20(木) 06:36:45.82
動かないよ
AndroidはJavaではないし
そもそもまっとうなJavaの中でも組み込み用のとかあるし
0224デフォルトの名無しさん2013/06/20(木) 06:38:43.97
動かないよ
AndroidはJavaではなく海賊版だし、
そもそも公式Javaの中でも組み込み用とかあるし
0225デフォルトの名無しさん2013/06/20(木) 07:13:15.40
なんだ詐欺だったのか?
一度書けばどこでも動きますよ!ぜひ導入してください!
なーんて謳い文句で営業してるのに、ほんの些細な変化でも動かなくなる
誇大広告もいいとこだな
0226デフォルトの名無しさん2013/06/20(木) 07:30:50.85
ドカタの使い回しが利くという意味だよ
0227デフォルトの名無しさん2013/06/20(木) 15:03:11.60
JavaSEのSとは何か?
>>225
それは昔の話
Javaというブランドをカネで貸して商売をするようになる前の
0228デフォルトの名無しさん2013/06/20(木) 18:29:08.10
>>225
詐欺と言えばそうかも知れない。
Javaは言語仕様と実行環境のセットからなる
基盤なのに、Googleは前者だけをパクって
紛らわしいものを出した。Googleは詐欺
0229デフォルトの名無しさん2013/06/20(木) 18:38:13.22
BufferedReaderの仕様について教えてほしいのですが、readLine()を使用して10行を
読み込んだとして、close()しなければ10行は残ったままになるのでしょうか?
で次データが来た場合、11行目から(1行目〜10行目は残したまま)書くのでしょうか?
0230デフォルトの名無しさん2013/06/20(木) 18:42:22.79
ちょい質問させて下さい

WindowsでJava以外のWindow上の色を定期的に判別して、黒が白になったら別の場所をクリックする

みたいな事をする場合

やっぱりクリップボードを介する&Robotがいいでしょうか?
0231デフォルトの名無しさん2013/06/20(木) 18:54:58.20
>>229
「10行は残ったまま」の意味が分からないけど、10行readLineしてしばらく待って次にreadLineしたら11行目が読み込まれる。
「11行目から(1行目〜10行目は残したまま)書く」って、BufferedReaderでは書き込めないよ。
BufferedReaderとは別にFileWriterとかで書き込みたいなら、BufferedReaderで何行読み込んだとか関係ないし。
File I/Oの基本が分かってないんじゃない?
02322292013/06/20(木) 19:08:50.34
>>231
ありがとうございます。
アプリ間を跨いで同じファイルを使用していて。こっちは読み込みのみで、
別アプリから書き込みが発生します。
0233デフォルトの名無しさん2013/06/20(木) 19:10:53.80
そういうのはファイルではやらないでください
みんな迷惑してるんですよ
0234デフォルトの名無しさん2013/06/20(木) 20:01:28.27
つ 「名前付きパイプ」
0235デフォルトの名無しさん2013/06/20(木) 20:11:48.04
つ「データベース」
0236デフォルトの名無しさん2013/06/20(木) 20:47:22.50
チャットみたいなのをしたいんだろ >>232

そういう感じのことしたいんなら
RandomAccessFileかFileChannelを覚えることをおすすめします
0237デフォルトの名無しさん2013/06/20(木) 23:41:21.10
JAXBでテストデータを出力したいのですが、
XMLのルートに当たるTestDataクラスが出力したいUserクラスを持つ構造で
Userのプロパティを属性にマッピングするにはどうしたら良いでしょうか。
ただしUserクラスそのものには@XmlAttributeを注釈しないようにしたいです。
0238デフォルトの名無しさん2013/06/21(金) 00:03:40.19
>>237
UserクラスにJAXBアノテーションを付けたくないという解釈で良いのかな?
0239デフォルトの名無しさん2013/06/21(金) 00:34:17.46
>>238
はい、おっしゃるとおりです
0240デフォルトの名無しさん2013/06/21(金) 02:43:53.97
>>216
専用サーバを借りる予定です
鯖のコスト減らして貧乏臭く開発するような内容は今まで散々やってきたので、
今度は大きいサービスを作ってみたいと思いました
レンタルサーバで実際にpollingがwebsocketを使ったアプリを試したいです
0241デフォルトの名無しさん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を教えてあげる。
0242デフォルトの名無しさん2013/06/24(月) 00:02:45.60
JDK 6 Update 11のインストールexeを実行すると、
「有効なwin32アプリケーションではありません」てメッセージが出るんだけど
どうすればインストールできる?

OSはWindows7 Pro SP1 64bit
BTOでセットアップされたPCが今日届いたばかりだから古いJDKは残ってない。
0243デフォルトの名無しさん2013/06/24(月) 02:33:42.17
>>242
ダウンロード時に回線障害起こしたとかでJDKが破損してるんだろう
再ダウンロードして実行し直せばいい
0244デフォルトの名無しさん2013/06/24(月) 02:56:11.85
>>243
ほんとだ。。。
ファイルサイズ見たら全然想定より少なかった。
ありがとう!
0245デフォルトの名無しさん2013/06/24(月) 03:05:02.27
板違いな気がするけどJavaの使用に関する質問もここでいいの?
違ってたら誘導して頂けると有り難いです
0246デフォルトの名無しさん2013/06/24(月) 03:10:04.34
>>245
プログラミングとは関係のない話題は↓が適切

Java Runtime Environment Part3
http://anago.2ch.net/test/read.cgi/software/1351670907/
0247デフォルトの名無しさん2013/06/24(月) 03:38:45.47
>>246
ありがとうございます
0248デフォルトの名無しさん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みるに、基本放置でエラー吐かせて、必要ならば呼ぶ側でする感じかなとは思いますが。
02492482013/06/24(月) 06:49:19.61
あぁ、String型でやったのは大きなミスだ。
これじゃヌルポはでないか。
0250デフォルトの名無しさん2013/06/24(月) 06:49:33.15
>こういう時に何を基準に判断していくべき
このプログラムについてのお前の設計思想
>JavaのSDKみるに、基本放置でエラー吐かせて
んなこたーない
0251デフォルトの名無しさん2013/06/24(月) 06:57:53.65
>>250
だから設計思想を形作る判断材料のどこに重点をおくべきなのかがわからないの。
お前の設計思想なんていいだしたらメモリさえ食わなきゃ何でもokみたいな言語に成り下がるわけで。
null checkもお前の設計思想では片付かない相当大きな論争がありますよね?
02522502013/06/24(月) 07:27:37.24
>お前の設計思想なんていいだしたらメモリさえ食わなきゃ何でもok
そうだよ。
プログラミングが目的じゃなくてコンピューターに
やらせたいことがあるんだからプログラミング言語がある。
生産性・保守性・拡張性・再利用性の様々な観点で
今回の自分の目的に叶っていれば問題なし。
プログラミング自体が目的のアホな論争など
どうでもいい
0253デフォルトの名無しさん2013/06/24(月) 08:13:55.37
>>252
結局何も言ってないのと同じこと
0254デフォルトの名無しさん2013/06/24(月) 08:24:23.76
いや、俺は>>250に一票。
結局のところ、プログラム全体としてのエラーや例外のポリシーを決めないとどうすべきか
なんて言えないよ。
0255デフォルトの名無しさん2013/06/24(月) 08:43:53.04
>>254
じゃあ黙ってろよ
0256デフォルトの名無しさん2013/06/24(月) 08:45:57.24
お前らわからないくせに偉そうにぐだぐだ言いやがるよな
0257デフォルトの名無しさん2013/06/24(月) 10:23:06.32
わかるわからないの問題かこれ?
0258デフォルトの名無しさん2013/06/24(月) 10:57:22.99
>>257
わからないくせに偉そうにぐだぐだ言うなって言ってんだよ。
>>252なんだよこれ。バカが。
0259デフォルトの名無しさん2013/06/24(月) 11:21:32.05
>>258
よくわかんないからもう少し丁寧に説明してくれよ
0260デフォルトの名無しさん2013/06/24(月) 11:22:38.82
粘着しだした
0261デフォルトの名無しさん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の範囲外が原因なのに、
戻り値を最初に使った場所でヌルポが出るとか、原因見つけるの大変だろ。
0262デフォルトの名無しさん2013/06/24(月) 12:05:53.67
>>248
例えばOracleが公式で出してるJNIについての設計文書を読んでみるとわかる。

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

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

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

この文章からわかるのは、
ライブラリがエラーチェックをどこまで行うのかは「ライブラリの目的によって変わる」ということ。
JNIは引用文に書かれている理由でエラーチェックを行っていないが、
もちろんこれがあらゆるライブラリに当てはまるわけではない。
0263デフォルトの名無しさん2013/06/24(月) 12:17:59.16
>>261
getStringでnullが返ってくることが例外なのか意図された状況なのかも>>248のコード片だけじゃわからないからね

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

>>248がそういうライブラリなのか、そうじゃないライブラリなのか絞り込むための材料は用意されていない
よって回答者のレスが抽象的・一般的になってしまうのは、そもそも用意されてるコード片が抽象的すぎて何も言えないからなんだよ
0264デフォルトの名無しさん2013/06/24(月) 12:30:33.95
> JNI は、null ポインタまたは不正な引数型の受け渡しのようなプログラミングエラーについてチェックを行いません。
これは意味が違うだろ。
JNIというフレームワークとしては自動チェック機能を提供しないだけで、
JNIのCプログラムがnullチェックしなかったら確実に死ぬ
0265デフォルトの名無しさん2013/06/24(月) 12:49:58.68
>>248のダメな点

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

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

↓

これらを総合すると、任意のインデックスを受け取って値を返し
初期化されてないインデックスが指定されたら初期値としてのnullを返すようなListを作ってるようにしか見えないが
これでいいのか?
0266デフォルトの名無しさん2013/06/24(月) 13:14:57.75
>>263
>>248のコードをよくよく読み直したら、だんだん解らなくなってきた…

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

たぶん、
「初心者は難しいこと考えずに、まずは教科書よく読んで、
  しっかりコード書いて1歩ずつ理解していくと良いよ」
ってのが>>248にとって一番しっくりくる回答だと思う。
0267デフォルトの名無しさん2013/06/24(月) 13:53:06.36
>>266は無視しておk
こいつ、レスつけてる連中の中で一番腕が悪い、もしくは馬鹿。
論点を無視した指摘に、意味のないアドバイス。
なんでこんな奴がドヤ顔でレスしてんの?
0268デフォルトの名無しさん2013/06/24(月) 15:42:05.39
人を馬鹿呼ばわりすると中傷と言われますよ。
こういうときは
 × >>267は馬鹿
 ○ >>267のレスは馬鹿な内容だ
と言うものです。
0269デフォルトの名無しさん2013/06/24(月) 16:40:23.09
twitter botを作成しようとしてます http://gomyownway.hatenablog.com/entry/2012/08/05/151936
このページを参照して一応必要なキーなどな入れているのですが
Exception in thread "main" java.lang.NoClassDefFoundError: test/TweetTest のエラーがでて実行できませんどうすればいいですか?
0270デフォルトの名無しさん2013/06/24(月) 16:52:52.97
>>269
ソースコードではなく実行環境の問題
どういう環境で実行してるのか書け
0271デフォルトの名無しさん2013/06/24(月) 16:59:28.46
>>270
実行環境はmacでeclipseです
0272デフォルトの名無しさん2013/06/24(月) 17:02:27.39
>>269
まず画面にtestと表示するだけのプログラムを
完成させて出直せ
0273デフォルトの名無しさん2013/06/24(月) 17:04:18.55
>>272
それはもうやりました
0274デフォルトの名無しさん2013/06/24(月) 17:09:41.01
>>273
プロジェクトの設定をどこかおかしくしたのが原因
だから空のプロジェクト作り直して順番に確認していけ
0275デフォルトの名無しさん2013/06/24(月) 17:32:01.23
>>274
ありがとうございます
言われた通りに最初からやったらうまくいきました
02762482013/06/24(月) 22:02:44.02
return null;
の部分を
throw new NullPointerException();
にするなんていうのはなし?
0277デフォルトの名無しさん2013/06/24(月) 22:33:14.84
上の回答見てまだそんなこと言うか
0278デフォルトの名無しさん2013/06/25(火) 07:58:37.22
ヌルポを自分でスローするとか
どんだけお前はアホなんだよ
呼び出し側のパラメーター異常は
IllegalArgumentExceptionだろ
0279デフォルトの名無しさん2013/06/25(火) 08:00:21.97
途中で送信したoops!
ノーチェックかチェックしてIllegalArgumentException
スローするかどちらかにしろ
0280デフォルトの名無しさん2013/06/25(火) 10:09:07.50
そうか
なぜかreturn null前提で考えてた
0281デフォルトの名無しさん2013/06/25(火) 14:58:19.28
質問:変数paramがユーザー指定の文字列の場合、これってコードインジェクションされる可能性あります?

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

ぱっと見た目やばそうなんだけど・・・
0282デフォルトの名無しさん2013/06/25(火) 15:15:08.63
うん。
0283デフォルトの名無しさん2013/06/25(火) 15:22:35.69
ですよねぇ・・・
実際セミコロンつけてコマンド連ねてみても動かないから、証明出来なくて困ってる
なにまちがえてんだろ
0284デフォルトの名無しさん2013/06/25(火) 15:27:35.39
コマンドインジェクションはむずいんじゃないのかな。
JavaのRuntime.execはシェルを呼ばない。単純に文字列をトークンに分割して
最初のトークンで指定されたコマンドに以降のトークンを引数としてわたすだけ。

なので;や|、&といったシェルが解釈する文字列は機能しないと思う。
0285デフォルトの名無しさん2013/06/25(火) 15:36:04.27
最近Java更新しようとするとウィルス対策ソフト入れようとするんだけど
0286デフォルトの名無しさん2013/06/25(火) 16:29:27.50
>>284
なるほど、サンクスです。適当に付け足してもうごかないわけだ
しかし、チェック処理がないのがきもちわるい
作った本人が分かってたのか、分かってなかったのか、わからんな・・・
0287デフォルトの名無しさん2013/06/25(火) 16:50:16.66
RuntimeやめてProcessBuilder使えって通達、最近来てなかったっけ?
0288デフォルトの名無しさん2013/06/25(火) 17:04:47.01
既存のソースにコレがあったので、直した方がよくね?って話に持っていこうかと。
このためだけに触りたがらないヤツがいるので、危険度を証明したかったんだが
証明できんw
という夢を見た
0289デフォルトの名無しさん2013/06/25(火) 23:00:45.63
abstractクラスをうまく使えるようになるとかなりソース綺麗になりますねぇ
Javaは設計が上手くいったときがスカっとして個人的に一番楽しい
0290デフォルトの名無しさん2013/06/25(火) 23:05:01.54
スカはちょっと・・・
0291デフォルトの名無しさん2013/06/26(水) 01:57:41.23
abstractとか失敗設計の典型例だろ
0292デフォルトの名無しさん2013/06/26(水) 03:55:18.95
?
0293デフォルトの名無しさん2013/06/26(水) 04:02:32.31
>>291
これはひどい
0294デフォルトの名無しさん2013/06/26(水) 05:40:01.92
そもそもオーバーライドはバグの温床なのに必ずオーバーライドしなきゃダメな時点でアウト
0295デフォルトの名無しさん2013/06/26(水) 06:53:39.61
オーバーライド以上にコードのコピペがバグの温床。

いつの日か出会うかもしれない変な継承によるバグにおびえるヒマがあったら
今目の前にあるコードから継承や抽象クラスやコンポジションを使ってコードの
反復を一つでも減らした方がまだ生産的。
0296デフォルトの名無しさん2013/06/26(水) 07:13:47.54
>>295
オーバーライドではない→コピペ

まずこの発想がキチガイ的でヤバイ
0297デフォルトの名無しさん2013/06/26(水) 07:24:24.63
オーバーライドはスーパークラスの呼び出しをJavaDocで指示するケースが一番ヤバイな
protectedなメソッドを空実装しといてオプショナルにしとくのなら安全で使いやすいが
0298デフォルトの名無しさん2013/06/26(水) 07:29:01.28
> オーバーライドではない→コピペ

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

バグの温床としてオーバーライド < コピペだとは書いたけど、
オーバーライド無し -> コピペとは一言も書いていない。
0299デフォルトの名無しさん2013/06/26(水) 12:39:13.32
コンストラクタで必ずsuper()を呼び出さないとアカンやつ大杉や!
0300デフォルトの名無しさん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パターンも導入しやすいですし。
0301デフォルトの名無しさん2013/06/26(水) 20:09:38.19
たとえ具体クラスが一つしかなくたって、
ふくれあがった唯一神クラスを分割記述するためだけに
abstract使ってもいいのよ?
0302デフォルトの名無しさん2013/06/26(水) 20:13:28.83
そもそも、目的にあった道具を使うもんじゃないかな。

勝手な想像だが、 >>291 は、道具の使い方や、使う場面を間違えてるんじゃないかと思う
カラフルな絵を書くのが目的のときに、
「黒しか出ないってなんだよ、エンピツつかえねぇ!」
↓
「エンピツ使うとか失敗するにきまってるだろ」
って言ってるように聞こえる。
0303デフォルトの名無しさん2013/06/26(水) 21:07:21.54
インターフェースを定義した後にロジック実装の骨格を提供するのにも使うな > abstract

単にabstractを使う機会が無かっただけじゃない?
0304デフォルトの名無しさん2013/06/26(水) 22:19:30.43
>ふくれあがった唯一神クラスを分割記述するためだけに
>abstract使ってもいい
意味や機能でなく
処理でクラスやメソッドを分けるのは
JAVAドカタの得意技だね
0305デフォルトの名無しさん2013/06/26(水) 22:35:34.39
ロジック実装して初めてインターフェースは見えてくるもの
それがわかってないからたいてい抽象化が無意味になって失敗する

だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない
・引数にするか、メンバーにするか
・使うのはここだけか、何度も使うことになるか
・・・
0306デフォルトの名無しさん2013/06/26(水) 22:39:41.25
>>305
>ロジック実装して初めてインターフェースは見えてくるもの
それはお前がドカタだから。
設計のできる人はそんなこと無いから。
0307デフォルトの名無しさん2013/06/26(水) 22:51:51.03
処理によってクラスやメソッドを分けるのは当たり前じゃ?
それに違和感を感じるのはクラス分けると書けないいわゆるオブジェクト指向になれてない人か、
デザインパターンすら認めない?生きた化石じゃないか?
仕事を割り振ることを考えたらabstractが設計失敗なんてありえないと思うよ。趣味でやってるレベルでもわかる。

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

>ロジック実装して初めてインターフェースは見えてくるもの
これを念頭に置くのは大反対。
抽象化しすぎると将来どうなるかわからないからpublicにしとけ的な設計が一番ダメに感じる。
見えてこないのはまさに修飾子を正しく把握していない、もしくは縛って自由を獲得する設計に慣れていないだけ。
0308デフォルトの名無しさん2013/06/26(水) 22:56:42.35
>処理によってクラスやメソッドを分けるのは当たり前じゃ?

いやー、JAVAドカタって
ほんっっとにどうしようもないな
0309デフォルトの名無しさん2013/06/26(水) 22:57:04.78
「このクラスについて詳しく見たわけじゃないけどこのクラスもあのメソッド使えそうだな」

これ、誰でもAPIで経験してるはず。
設計さんに感謝やで。
継承がバグの温床なんていったらバチあたるでほんま。
0310デフォルトの名無しさん2013/06/26(水) 23:23:04.49
抽象クラスがなかったらコールバック関数に渡す無名インナークラスとかどうするんだよ
0311デフォルトの名無しさん2013/06/27(木) 00:40:03.70
うむ。RCP息してない。
0312デフォルトの名無しさん2013/06/27(木) 01:40:13.43
>>286
そういやそのへんの挙動、最近のupdateで何か変わってなかったっけ。
記憶違いかも知れんが。
0313デフォルトの名無しさん2013/06/27(木) 01:40:54.77
処理によってクラス分ける利点は静的に扱うときに一番あらわれる気がする
動詞をクラス名にしたりね。
0314デフォルトの名無しさん2013/06/27(木) 01:43:54.45
List<Object> list = new ArrayList<Object>();
みたいな書き方って海外の人あまりしないよね?なぜ日本ではこれが推奨されているの?
0315デフォルトの名無しさん2013/06/27(木) 01:56:34.66
Javaのジェネリクスは保守的でコードレベルでタイプセーフにするだけだからな
Java8だかでインタフェースのメソッドがステートレスに実装可能になるらしいから驚き
0316デフォルトの名無しさん2013/06/27(木) 02:17:56.80
>>314
海外ではどんな書き方なん?
0317デフォルトの名無しさん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のときはそういう書き方をするのか教えて欲しい。
0318デフォルトの名無しさん2013/06/27(木) 02:38:07.98
>>317
意味論的にそれが有効だからとしか。
ArrayListはランダムアクセス可能なList
JButtonはSwingのボタンUIとして確固たる知名度と意味を持つ
てかJComponentは抽象度が高すぎるしね
0319デフォルトの名無しさん2013/06/27(木) 02:40:12.03
そもそも前と後ろ同じじゃないとなんか感覚的に見た目気持ち悪いんだがどうなん
0320デフォルトの名無しさん2013/06/27(木) 02:45:07.10
宣言側はアプリケーションで必要とされている意味論的に適切な抽象度で宣言する
生成側はパフォーマンス特性に合わせて無難または最適な物を生成する
0321デフォルトの名無しさん2013/06/27(木) 02:46:01.29
>>314
こういうのってキャストとかしなくて大丈夫なん?
0322デフォルトの名無しさん2013/06/27(木) 02:48:56.11
ArrayList (Java Platform SE 7)
http://docs.oracle.com/javase/jp/7/api/java/util/ArrayList.html

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

List list = Collections.synchronizedList(new ArrayList(...));
0323デフォルトの名無しさん2013/06/27(木) 03:07:49.08
>>322
マルチスレッドでadd()等の処理をするときに同期どれよというのはわかってけど
まるで答えになってないよね?
0324デフォルトの名無しさん2013/06/27(木) 03:15:37.97
The List Interface (The Java? Tutorials > Collections > Interfaces)
http://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);
0325デフォルトの名無しさん2013/06/27(木) 03:20:07.47
>>321
オブジェクト指向言語で抽象度の高い方向(スーパーセット)にキャストするのは問題ない
ここら辺は個別に疑問を持つより基本を一通り知ってから考えた方がいいよ
03263142013/06/27(木) 03:41:15.24
>>324
そこじゃなくない?外国人が使っているよということを言いたいの?何が言いたいの?

リンク先で、
同じオーダー中に同じ要素を含んだ二つのListが等しくなるってのはわかった。
で、equals書くならhashCodeも一緒に書けよっていう某本にも書いてるその辺にも強いことがわかった。
これが答え?
0327デフォルトの名無しさん2013/06/27(木) 06:21:34.84
外国・・・そうかなぁ? 個人的には>>320に同意。

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

内部変数にしても例えばArrayList使って抽象度を下げるとListのような抽象度の
高い引数を受けにくくなるので、こちらも普通はListを使うかな。
ある場所での型の抽象度の低さはコード中の他の場所に伝染するんだよね。
0328デフォルトの名無しさん2013/06/27(木) 06:40:22.65
>>318
その理屈はおかしい
JavaのListはランダムアクセスが効率的に行えることを保証しないので、
ランダムアクセスしたいならArrayListで受けなければならないということになってしまう
いや意識してそういう理由でArrayListならそれでいいと思うけどね
ジェネリクスでList,RandomAccessとする手もあるけど
内部でnewする変数にそこまでするのは現実的じゃないわな
0329デフォルトの名無しさん2013/06/27(木) 06:56:02.07
>>325
ただしそれはオーバーライドがない時の話な
オーバーライドされたメソッドがある場合は派生クラスが厳密に規約を守っているか確認しなければ規定クラスとして使ってはいけない
オーバーライドしているとたやすくis aの関係が破壊される
規約を作れば良いというがその規約にバグがないことも規約が守られてることも保証することは難しく人の注意力に頼るしかない
だからバグが量産される
た
0330デフォルトの名無しさん2013/06/27(木) 07:06:20.79
ListってまともにListIteratorで操作されてることは滅多にないよね
ランダムアクセスのためのインターフェースとしなかったのはJavaの大失敗の一つ
0331デフォルトの名無しさん2013/06/27(木) 12:01:34.71
List をランダムアクセスにしたら LinkedList が List じゃなくなるじゃないですか
名前的に紛らわしい
0332デフォルトの名無しさん2013/06/27(木) 13:37:26.26
予期せぬListの実装が引数に渡されたらどうなっちゃうの?
0333デフォルトの名無しさん2013/06/27(木) 14:51:40.48
java.util.RandomAccessに代入可能かどうかで判定するのが
業界の慣習。一応。
0334デフォルトの名無しさん2013/06/27(木) 15:20:23.50
String戻せば済むところをCharSequence返すメソッドは考えすぎだと思う。

メソッド引数としてはアリ
0335デフォルトの名無しさん2013/06/27(木) 21:25:21.75
>>334
Androidの真似して
かっこいいと勘違いしたんだろ
0336デフォルトの名無しさん2013/06/27(木) 23:59:50.59
StringBuilder返すところでホントはAppendable返したいのだが
IOExceptionがじゃまなの…
0337デフォルトの名無しさん2013/06/28(金) 01:16:49.31
>>331
.NETはまさにそうなってるね
名前的には残念なことになってるが設計としてはアレが正解だわ
0338デフォルトの名無しさん2013/06/28(金) 01:20:26.99
>>329
その話、アップキャスト関係なくね?
0339デフォルトの名無しさん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;

// やはり前者?
}
0340デフォルトの名無しさん2013/06/28(金) 03:40:28.29
>>339
前者にすべき。マルチスレッドに対応させる際に後者だと都合が悪い
0341デフォルトの名無しさん2013/06/28(金) 04:03:42.53
>>340
把握しました
0342デフォルトの名無しさん2013/06/28(金) 04:14:49.32
横レスだけど
後者だとどう都合が悪いの?
0343デフォルトの名無しさん2013/06/28(金) 07:05:24.68
問題ないよ
0344デフォルトの名無しさん2013/06/28(金) 07:30:16.62
>>340
最悪な回答だな
0345デフォルトの名無しさん2013/06/28(金) 07:33:43.35
どっちでもいいだろ
コンストラクターが完了するまでは
オブジェクトの構築が終わってないんだから
他のメソッドに合わせてthisを使う必要はない
0346デフォルトの名無しさん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クラス全体を調べなければならない

どちらの方が安全にコーディングできるか考えれば答えは明らかだよね
0347デフォルトの名無しさん2013/06/28(金) 10:30:31.07
>>346
Java言語仕様読み直せ
0348デフォルトの名無しさん2013/06/28(金) 10:36:23.41
>>339
コメントに沿った実装という意味では前者だな。
意味的にも前者のほうがいいんじゃなかろうか、そのコード片だけでは判断できんけど。
結果はどっちも変わらん。
0349デフォルトの名無しさん2013/06/28(金) 10:41:16.57
cが引数a,bから決まるのでなくメンバのa,bから決まる値の場合は・・?
0350デフォルトの名無しさん2013/06/28(金) 10:48:00.80
どこで>>346みたいな知識を仕入れたのか気になるんですが...
検証の仕方も思い浮かびません...
0351デフォルトの名無しさん2013/06/28(金) 10:50:51.90
コンストラクタってスレッドセーフじゃないん?
0352デフォルトの名無しさん2013/06/28(金) 10:51:08.41
>>349
その場合はそりゃ後者だろう。
0353デフォルトの名無しさん2013/06/28(金) 10:52:26.29
The Java? Tutorials
http://docs.oracle.com/javase/tutorial/

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

コンストラクタで外部にthis参照が逸出するときのことを言ってるんだろう。
ふつう、コンストラクタはthis参照を外部に公開しないように実装するものなんで、
そういう状況になること事態が実装上の不備だと思う。拙者そう思う。
0355デフォルトの名無しさん2013/06/28(金) 12:26:37.11
コンストラクターがマルチスレッドって
ただのコーディングミスだろ
0356デフォルトの名無しさん2013/06/28(金) 12:43:30.30
>>354
でもそれだとマルチスレッド関係ないよな...
03573542013/06/28(金) 12:50:39.56
>>356
俺はマルチスレッドの話をしたつもりだったんだが、お前はなんで俺の話がマルチスレッドと関係ないと思うの?
0358デフォルトの名無しさん2013/06/28(金) 13:15:22.64
double checked locking 問題ではコード読んだ時の直感に反して
コンストラクタ完了前に参照漏洩してたりしたからなぁ。

あの手の問題あるとチェックしきれん。
0359デフォルトの名無しさん2013/06/28(金) 14:28:50.08
>>357
シングルスレッドでも逸出させられる
0360デフォルトの名無しさん2013/06/28(金) 14:38:54.68
B木を実現するjavaプログラム、難しいけどわかる人いますか?
0361桃白白 ◆9Jro6YFwm650 2013/06/28(金) 14:45:17.44
>>360
桃白白わかるよ。
0362デフォルトの名無しさん2013/06/28(金) 15:01:04.41
スレッドAが生成した新オブジェクトを
ロック無しで確実にスレッドBに届ける方法は無く、

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

正直 ど う で も い い
0363デフォルトの名無しさん2013/06/28(金) 15:04:35.49
自分も前者がいいな。10文字少ないので。
0364デフォルトの名無しさん2013/06/28(金) 15:06:40.22
>>361
すみません、教えてください。
0365桃白白 ◆9Jro6YFwm650 2013/06/28(金) 15:09:21.89
>>364
B木のなにを知りたい?アルゴリズム?インプリメンテーション?
値を追加するところ?値を削除するところ?値を検索するところ?
どのあたり?
0366デフォルトの名無しさん2013/06/28(金) 15:15:09.70
>>350-351
TSM01-J. オブジェクトの構築時にthis参照を逸出させない
https://www.jpcert.or.jp/java-rules/tsm01-j.html
0367デフォルトの名無しさん2013/06/28(金) 15:16:16.75
>>365
値の追加、検索、削除が出来ればOKです
初めに任意で最大の子の数を入力する所から始めたいです
0368桃白白 ◆9Jro6YFwm650 2013/06/28(金) 15:34:04.09
>>367
コード欲しいってことね。
桃白白もいくつかコード眺めてみたけど、奥村さんのコードが一番きれいだと思う。

『Javaによるアルゴリズム事典』サポートページ
http://oku.edu.mie-u.ac.jp/~okumura/java-algo/
0369デフォルトの名無しさん2013/06/28(金) 15:50:38.71
>>368
ここに置いてあるzipファイルの中の「BTree.java」ですよね?
ありがとうございます!これを参考にします。
0370桃白白 ◆9Jro6YFwm650 2013/06/28(金) 15:55:43.37
>>369
はい、それです。
0371デフォルトの名無しさん2013/06/28(金) 20:15:07.51
JavaScriptは板違い
ローカルルール読んでこいよ異常者共
0372デフォルトの名無しさん2013/06/28(金) 20:39:57.59
自作クラスの感想などを頂きたいのですが、スレ違いでしょうか?
0373デフォルトの名無しさん2013/06/28(金) 20:42:02.65
相談のうちには入る…のかなあ
0374桃白白 ◆9Jro6YFwm650 2013/06/28(金) 20:49:48.68
>>372
いんじゃないの。書いちゃいなよ。
0375デフォルトの名無しさん2013/06/28(金) 21:26:55.04
>>374
自分のコードの感想言われたらファビョる奴が良く言うよ
03763722013/06/28(金) 21:27:03.75
ソースファイルが6つあるので、こちらにアップしていて遅くなりました。
ttp://sourceforge.jp/users/soremachi/pf/TokenTable/wiki/FrontPage/attach/tokenTable.zip
コーディングを補助する目的で作った文字列テーブルです。2ヶ月ほど前にJavaの勉強も兼ねて作りました。
(「TableTest.java」にとりあえずの使い方が書いてあります)
0377デフォルトの名無しさん2013/06/28(金) 21:32:12.78
おまいらIdeoneぐらい教えたれよ
0378デフォルトの名無しさん2013/06/28(金) 21:32:33.32
sourceforgeねぇ
0379デフォルトの名無しさん2013/06/28(金) 21:48:31.18
>>376
System.out.println( "Table file : ファイル名を指定してください" );
return false;
のようなものは
throw new IllegalArgumentException( "Table file : ファイル名を指定してください" );
のようにしておけ
false 返しても結局戻り値チェックしないんだし、エラーを無視して実行を続けるより死ぬ方がいい
特別に理由があって死にたくないときは try catch すればいい
03803722013/06/28(金) 22:04:25.51
Ideoneにも上げました。Sourceforgeの方は消したいと思います。
ttp://ideone.com/IKjued
ttp://ideone.com/1IQ5G5
ttp://ideone.com/zOJYVA
ttp://ideone.com/7TUxdz
ttp://ideone.com/1kuWqV
ttp://ideone.com/9MOKz4
ttp://ideone.com/4QEy30
0381デフォルトの名無しさん2013/06/28(金) 22:08:09.94
ideoneやcodepadは英語サイトだから利用規約や制限事項や禁止事項がわからないし、利用料金や支払い方法もわからん
03823722013/06/28(金) 22:32:42.03
>>379
わかりました。
引数のチェックでは throw new IllegalArgumentException を使うのが一般的なんですか?
0383デフォルトの名無しさん2013/06/28(金) 23:49:28.98
メソッドのコメントに
//- こういうの流行ってんの?
0384デフォルトの名無しさん2013/06/29(土) 01:37:41.96
一個目のファイルしかみてないけど、Javaな人はあれみて何も思わないの?
俺、すげー気持ち悪いんだけど。
setHead, setPrimary, set, file、全部キモい。
addとかappendとかkeyとかindexとかcolumnとかpush_backとかなんかそんな概念じゃないのか?
まあ、かろうじてinsertはありなのかもしれないが。
0385デフォルトの名無しさん2013/06/29(土) 01:42:53.74
あと、列データとかtokenとか、一体どこ経由でこのコードにたどり着いたんだ?
0386デフォルトの名無しさん2013/06/29(土) 02:51:57.69
突っ込みどころが多すぎる

列を追加してるのにsetHeadというメソッド addだろ
標準出力するだけのクラス tableを受け取るメソッドかtoStringに書けばいい
トリッキーなgetterとsetter 座標指定で十分
同一パッケージから直接変更し放題のフィールド 大事な値をうっかり壊しちゃうかもよ
何でもpublicメソッド エラーメッセージとか外から呼び出すの?
別のクラスに投げるだけなら直接呼び出せ
ファイルが閉じられない可能性がある
Exceptionでキャッチすんな
...
03873722013/06/29(土) 03:00:41.42
>>384-385
insertは、なぜありなんでしょうか?Javaというか、オブジェクト指向に触れて3ヶ月ほどなので、
その概念というのがちょっとわからないです・・・。メソッドの持つ役割とかですか?
列データやtokenなどは、いい加減に書いてしまいました。
ArrayListを入れ子にしているので、行列のフィールドに対するコメント文です。
0388デフォルトの名無しさん2013/06/29(土) 05:13:45.52
>>387
慣用的に使われる用語とその組み合わせというのがあって、大抵それは求めれば他のソフトウェア
技術や数学用語にちゃんと由来が見つかる。

例えばデータ構造として表(table)という名前を使うのであれば列(column)や属性(attribute)、
行(row)やタプル(tuple)という言葉と組で使うのが慣用的。これらの用語は関係データベースの
世界に由来の一端(全てではない)があって、この世界ではrelation・attribute・ tupleかtable・
column・rowの組で使う(厳密にはこの二つの組は異なる概念なので混ぜるのも良くない)。

あとPrimary、これも元々関係データベースから来た用語だけど、数ある候補キーの中から一つ
を選んで主キー(primary key)とするのであって、PrimaryKeyならともかくPrimaryだけでは
意味をなしていない。無難なのはKeyColumnかな。

操作に関してもtableにinsertとはおぉDB的だなぁと思ったらsetと出てきてずっこける。
DB的にupdateとするとややずっこけ感は少ない気がする。

setHeadは三重の意味で良くない。一つは上記の通りheadという名前。二つ目は列の「追加」
なのにsetという用語を使っていること。最後にsetHeadというメソッド名はJava Beansの
規約でtableのheadプロパティの値をセットするメソッドに使う必要があること。
0389デフォルトの名無しさん2013/06/29(土) 05:45:43.21
要約:クラス設計がレビューされていないような品質
03903842013/06/29(土) 07:41:48.98
>>388
あまりにアレ過ぎて言語化できなかったんだけど、すっきりしたよ。ありがとう。
俺、Javaは初心者なんだけど、Javaな世界ではあんな感じが普通なのかと思ったよ。
誰も何も言わないから。
0391デフォルトの名無しさん2013/06/29(土) 08:25:23.88
名付け規約に準ずるのは当然だが、
あまりにしつこい社会主義のようだと、せっかくの創造性がつぶれる
もともと日本人には発想性がある人が少ないのに、さらに減ってしまう

ジャワみたいにばかみたいに長い名前をつけるのもどうかと思うがな
コンパイル後も短いシンボルになってないので、実行時の翻訳にムダな時間がかかる処理系もあるだろう
0392デフォルトの名無しさん2013/06/29(土) 08:58:37.24
今のところコード品質に関する指摘は>>386だけだな
他は識別子の名前についてガヤガヤ言ってるだけで特に耳を傾ける必要はない
コーディング規約読めばそれで理解できる話だし
0393デフォルトの名無しさん2013/06/29(土) 12:47:46.80
包含関係がしっかりしていれば長い名前空間も苦にはならないが、そうなっていない
StringとStringBufferの区別は本当に必要なのか、とか
0394デフォルトの名無しさん2013/06/29(土) 12:52:19.11
なるほど、不変オブジェクトだけで十分、と。
0395デフォルトの名無しさん2013/06/29(土) 12:56:03.85
可変オブジェクトだけで十分、っていう意味かもしれないじゃない
0396デフォルトの名無しさん2013/06/29(土) 14:25:16.00
>>392
名前超大事
0397デフォルトの名無しさん2013/06/29(土) 15:39:30.97
>>396
チーム開発なのか個人開発なのか
ライブラリとして提供するのか

色々シーンあるだろ。個人開発なのに名付け規則に神経すり減らすのはエネルギーの無駄
0398デフォルトの名無しさん2013/06/29(土) 15:48:00.90
名前に神経すり減らすんじゃなくて
>>397みたいな奴が妥当な名前を付けられないってだけ
0399デフォルトの名無しさん2013/06/29(土) 16:56:30.39
会社の歯車がプログラムの歯車をつくるような環境って事か
それは自由がないわな かわいそうだな...
04003722013/06/29(土) 17:19:07.84
>>386
別のクラスに投げるだけなら、といのは、ファイル入出力や画面への出力は、
同じクラスにメソッドとして持たせるという意味合いで合ってますか?
それとも、ひとつのJavaファイル内に複数のクラスを書くということでしょうか?
何でもpublicメソッドなのは、正直、アクセス修飾子の使い方をわかっていませんでした。
04013722013/06/29(土) 17:58:10.67
>>388
知りませんでした。メソッド名は
(setHead -> add)、(setPrimary -> setKeyColumn)、(set -> update)、(get -> select)
こういう風にすればいいですか?
0402デフォルトの名無しさん2013/06/29(土) 17:59:31.16
> 正直、アクセス修飾子の使い方をわかっていませんでした

( ゚д゚ )
0403デフォルトの名無しさん2013/06/29(土) 18:52:47.47
そもそも、コンセプトとして、いわゆるDBのテーブルを想定しているのか、Excelのシート、つまり
二次元のデータの入れ物を想定しているのかがわからない。
そういう意図を表明するという意味で、名前重要。
0404デフォルトの名無しさん2013/06/29(土) 18:59:40.27
命名規則に話が集中しているのはそこがあまりにタコだと実装のレビューをしようにも読む方が
無駄な努力を強いられて嫌になるから。Tableクラスだけでもなかなかの忍耐が必要。

一人で書き捨てするコードならともかく、人に読んで貰うなら命名規則や慣用は要尊重。
無知を言い訳したオリジナリティーの発揮は単に有害。初心者こそ模倣から始めるべき。

・適切なクラス名やメソッド名が解らないのであれば既存のライブラリのAPIから似たような
 ことをしているクラスやメソッドの名前を探して真似をする。
・適切なコメントの付け方が解らないのであれば既存のライブラリのソースコードを調べて
 (クラス名に.javaとつけてググればいくらでもヒットする)真似をする。JavaにはJavaDoc
 形式というコメントの付け方が定義されていて、これ以外の独自コメント形式は単に迷惑。
・適切な変数名が解らなければ既存のライブラリのソースコードを調べて(以下略)

解らなければまず調べよう。
初学者ほど何故か調べない、真似をしない、コンパイル時のエラーメッセージも読まない不思議。
0405デフォルトの名無しさん2013/06/29(土) 19:03:01.06
クラス定義時の一般論として

・フィールドは基本private。さらにfinalに出来ないか検討する。Tableのtableなんかは
 finalに出来る。finalではないpublicは御法度。protectedも慎重に。
・フィールドの型は特別な事情が無い限りHashMapといった実装クラス名よりもMapと
 いうインターフェイスを用いた方が一般的に設計の抽象度が上がって実装に柔軟性が出る。
・データの重複はバグの温床なので避ける。例えばrow_no、row_sizeなんてフィールドが
 用意されているけれども、table.size()等で代用できないか検討する。パフォーマンス?
 それは素直で安全な実装で大敗してから考えるべき。
・特別な事情がない限りファイルIOは直接手作りしない。例えばTableクラスの場合は
 write(DataOutput out)、readFields(DataInput in)というDataInput、Outputを使って
 読み書きするメソッドを用意するのがお薦め。これだけでTableクラスをファイルに保存
 することも、ネット経由で投げることも、Hadoopでビックデータ解析(笑)にも使える。
 あるいはJAXBやJacksonを使ってXMLやJSONへマッピングする方法を検討する。

続く。
0406デフォルトの名無しさん2013/06/29(土) 19:05:40.12
Tableクラスに関するとりあえずのコメントとして

・カラムの型や名前をバラバラのMapで管理しているのはあまり良くない。素直にカラムの
 定義を扱うTableの内部クラスを用意して、
 public static class Column{public final int index; public final String name; public final String type;}

 これのリストをスキーマとして定義する。必要であればルックアップテーブルも。
 private final List<Column> schema = new ArrayList<Column>();
 private final Map<String, Column> nameToColumn = new HashMap ...

 スキーマ情報を提供する公開メソッドも用意すると親切だよね。
 public List<Column> getSchema() {return Collections.unmodifiableList(schema);}
 public List<Column> getColumn(int index) {return schema.get(index);}
 public List<Column> getColumn(String name) {return nameToColumn,get(name);}

・検索結果に一個結果を追加する度にサイズを+1した配列を生成して内容を全件コピーする
 凄いコードを見たような気がするのは気のせいだよね・・・素直に可変長であるList
 を使うべき。返値もListで良い。

・for(int i...)ではなく拡張for構文を使ってくれた方が読みやすい

・・・この調子で書いていくとどうなるのだろう・・・
0407デフォルトの名無しさん2013/06/29(土) 19:15:00.14
お前のレスを読むにもかなりの忍耐が必要
04083722013/06/29(土) 19:31:53.15
>>406
スキーマって何ですか?
0409デフォルトの名無しさん2013/06/29(土) 19:56:44.17
自分で調べてから質問しろ
0410デフォルトの名無しさん2013/06/29(土) 19:58:21.58
>>408
構造の定義のことでしょ。
>>406のコードでは列情報のことっすね。いまTableにはこの列がありまっせーていう情報。
0411デフォルトの名無しさん2013/06/29(土) 19:58:31.40
>>408
スキーマとは構造のこと。テーブルのスキーマはテーブルの構造のこと。
テーブルのスキーマは一般的には列の定義の集合で、個々の列は名前や型を持つ。

テーブルの構造をスキーマと呼ぶ一方で、具体的なデータが入ったテーブルその
ものはインスタンスと呼ぶ。スキーマとインスタンスもDBの世界で使われる言葉。

なのでDBの素養のある人であればtable.getSchema()がカラム定義のリストを返す
のは簡単に想像出来る。これが命名規約や慣用の強み。
ただschemaに関しては素直にcolumnList、getColumnListでも良いかもね。

というかこれ以上現状のコードをレビューをするのもしんどいので、一度自分で
色々調べ直して書き直したコードと共に出直してくれないかな。
0412デフォルトの名無しさん2013/06/29(土) 20:05:52.52
どんな勉強したらこんなに酷くなるの?
参考にしたものがどうしようもないゴミか、372が変な方向に理解しちゃったの?

ちょっとjavax.swing.table.DefaultTableModelを見てみなよ
0413デフォルトの名無しさん2013/06/29(土) 22:07:32.53
どんなレスを期待してコードを見てくれと言ってるのかわからないが、メソッド名を言われた通りに変えればOK
的なレベルに達してないから。
0414デフォルトの名無しさん2013/06/29(土) 22:20:15.32
詳細設計書なんていらんだろ派がこの板には多いと思うが、こういうコードを見れば
必要な場合もあるということがわかるはず。
0415デフォルトの名無しさん2013/06/29(土) 22:34:56.88
>>414
こういうコードを見ても設計何ソレ
なのがJAVAドカタの真髄
0416デフォルトの名無しさん2013/06/30(日) 00:49:17.69
Windowsで無料でJavaを勉強出来る開発環境を教えて下さい
0417デフォルトの名無しさん2013/06/30(日) 01:12:40.42
JDK + テキストエディタ
0418デフォルトの名無しさん2013/06/30(日) 01:23:16.55
いるんだよなこういうジジイ発想の奴が
Eclipseと答えるのがまっとうな人間
04193722013/06/30(日) 02:14:52.38
みなさまのアドバイスを参考に書き直してみました
ご指導よろしくお願いします

mainクラス http://ideone.com/paGek6
Tableクラス http://ideone.com/vLUKre
Columnクラス http://ideone.com/IdrclV
0420デフォルトの名無しさん2013/06/30(日) 02:20:15.16
>table.getAttribute(j)
これはKUSOコード
0421デフォルトの名無しさん2013/06/30(日) 02:37:58.18
クソと言うなら理由も書け
0422デフォルトの名無しさん2013/06/30(日) 02:49:23.64
ちゃんと差分を見てあげようよw 初めのに比べたら随分スッキリした。
その分随分機能も削られているけど。

・Columnがattributeを持つのは変。意味的にここはnameだと思う。
・せっかくColumnをimmutable(変更不可能)なオブジェクトとして定義しているのに
 tableにgetTypeやgetAttributeを用意しているのは勿体ない。getColumnで直接
 Columnオブジェクトを渡して無問題。table.getColumn(index).getType()みたい
 に使える。
・コンストラクタにColumnの配列を渡すようにしたのは好判断だと思う。
 後からColumnを追加出来ないようにするだけで他の部分のロジックが単純になる。
・ただ内部的にはColumnsは配列ではなくListで持っていた方が色々と具合が良い。
 Javaの配列はimmutableに出来ない。なので例えば現状のgetAllColumnsはこれを
 使って個々のColumnを差し替えることが出来るので安全ではない。
 さらにコンストラクタ引数に渡したColumnsの配列は防御的コピーをすべき。
 private final List<Column> columnsとして、コンストラクタで
 this.columns = Collections.unmodifiableList(new ArrayList<Column>(Arrays.asList(columns)));
 とでもしておくと良い。getAllColumnsでcolumnsをそのままreturnしても無問題。
・細かいことだけどコンストラクタはTable(Column... columns)の方が使い勝手が良い。
 new Table(new Column(...), new Column(...))も、現状通りColumn[] columns = ...
 としてnew Table(columns)とする使い方も両方使える。
・insertで入力値の型チェックも実装すると素敵だと思う。

この調子で行くとよいんじゃないのかな。
0423デフォルトの名無しさん2013/06/30(日) 02:57:42.08
最初のコードに比べたらだいぶマシになったな
入門以前レベルから初心者レベルまで話が進んだ
0424デフォルトの名無しさん2013/06/30(日) 03:03:45.80
> getAllRecords

Listの中身を全件配列にコピーする、そんな定番処理は手作りするまえにAPIと
して用意されていないか調べるべきだろうね。もちろん存在する。
ListのtoArrayメソッドの使い方を調べてみると良いと思う。
0425デフォルトの名無しさん2013/06/30(日) 03:09:50.58
> public final void insert(final Object... record) {
finalに出来ないか検討するっていうレスがあったけどここまでする必要ない
classにfinalついてるからメソッドのfinalは全部無意味
サブクラス作れないからオーバーライドできないもん
仮引数のfinalはあってもいいけど

> for (int i = 0; i < table.getAllRecords().length; i++){
繰り返しの度に時間がかかるメソッドが呼ばれるけどいいの?
04263722013/06/30(日) 03:31:24.30
>>403
DBへの問い合わせ文をメソッドに、データ構造をListにしてみよう、と思って最初は書いていました。
>>404-406,410,411
JavaDoc形式のコメント、クラス定義時の一般論や、DataOutput, DataInputのインタフェースやスキーマの利用方法、知りませんでした。
レビューを参考にして、色々調べ直してから出直します。コードをレビューして頂いて自分の無知がよくわかりました。ありがとうございます。
>>412
なにも参考にしないで、自分の欲しい機能を追加していきました。

あと、スレの流れ的に言いにくいのですが、>>408,>>419は、私ではありません。
このレスを書いていて発言する機会を失ってしまいました・・・。
0427デフォルトの名無しさん2013/06/30(日) 03:31:57.59
> getAllRecords

仕様をはっきりさせるべきだろうね。今のコードでは確かに新しいレコードの
追加は出来ないけれども、個々のレコードの中の値の書き換えは出来る。
シャローコピーだから。それが嫌ならディープコピーを実装するしかない。

ディープコピーまでは不要、書き換え可能は承知で単にレコードの集合を参照
可能にしたいだけなのであればやはり返値は配列ではなくListにして、
return Collections.unmodifiableList(records);とでもするのが実装も簡単
だし全件コピーに比べてオーバーヘッドも少ない。

mainの中のループもfor(Object[] record: table.getAllRecords()){ ...と
でもした方が読みやすい。
0428デフォルトの名無しさん2013/06/30(日) 03:36:18.89
なんだと〜
0429デフォルトの名無しさん2013/06/30(日) 06:11:06.80
>>427
ここまでくると異常者だな
04304202013/06/30(日) 07:39:46.72
>>421
getAttributeはテーブルクラスのメソッド名として不適切
100歩譲ってgetColumnAttributeなら可。
それにgetXxxx(index)はgetterと紛らわしい
0431デフォルトの名無しさん2013/06/30(日) 08:49:45.89
getColumnAttribute
冗長な名前使っていてイライラせん?
getColAttr じゃいけん?
0432デフォルトの名無しさん2013/06/30(日) 09:12:00.03
>>431
そういう省略は好まれない。人によって省略したりしかかったり、またどう省略するかがまちまちだと困る。
スペルアウトするのが原則。
0433デフォルトの名無しさん2013/06/30(日) 09:31:36.34
>>432
誰が好まん?
0434デフォルトの名無しさん2013/06/30(日) 09:45:57.18
>>433
コード読む人だろ。ColがColorなのかどうなのか定かじゃないだろ。
そんなとこでケチケチするちんけなやつのコードなんて見たくないってことだ。
0435デフォルトの名無しさん2013/06/30(日) 09:47:19.17
コンストラクタでIO使うのが常識なのか?
init(入力ストリーム)ってメソッド作ったら初期化はコンストラクタでやれ
コンストラクタで読み込むようににしろって先生に怒られた
0436デフォルトの名無しさん2013/06/30(日) 09:48:47.57
>>435
むしろ非常識でござろうな。IOExceptionをどう処理するつもりなんだ。
0437デフォルトの名無しさん2013/06/30(日) 09:51:53.93
>>434
>>そんなとこでケチケチするちんけなやつのコードなんて見たくないってことだ。
さすがジャバラー(笑) 冗長な名前はムダなんだけどなぁ
バイトコードを解析した事ある?(笑)
0438デフォルトの名無しさん2013/06/30(日) 10:05:05.10
>>432
>そういう省略は好まれない
ところでprintlnとconcatはどう思いますか?
0439デフォルトの名無しさん2013/06/30(日) 10:13:11.98
>>435
>init(入力ストリーム)ってメソッド作ったら
コンストラクターが終わるとオブジェクトは構築されたと見なされる。
initを呼び出す前の状態が、クラス名の概念を表すオブジェクトとして適切かどうかによる。

>>436
コンストラクターでIOExceptionが出ると困るとか
どれだけジャバドカタは低脳なんだ。
0440デフォルトの名無しさん2013/06/30(日) 10:35:01.08
>>439
>>initを呼び出す前の状態が、クラス名の概念を表すオブジェクトとして適切かどうかによる
どういう意味?
0441デフォルトの名無しさん2013/06/30(日) 10:46:01.05
例外処理を当たり前に使うような手合いにはIO例外は外で受ければいいので気にならないんだろう
C言語の感覚が強い人はエラーは戻り値で判断するようにしたくなる
例外は文脈が吹っ飛ぶのであまり論理的でないしな
コンストラクタ内例外はnewの失敗としては検出できないのでそりゃ躊躇したくもなるだろう
0442デフォルトの名無しさん2013/06/30(日) 10:55:32.68
>>438
組み込みメソッド名の中には、そういう歴史的な理由経緯の省略がある場合があるが、それはそういうものだと
理解するしかない。
そういうメソッド名を自分が作るクラスに使うのはOKだと思うが、複合名詞を自分のセンスで省略するのは
好まれない。特に、Javaの世界では、スペルアウトするのが好まれる。なぜそうなのかは知らないが、
Javaのネーミングの規範として、スペルアウトしろと言われるのを良く見かける。
04434402013/06/30(日) 10:59:52.32
>>441
例えば編集可能な文字列クラス(OreString)を自作したとする。
new直後は中身のデータも文字列の長さも未定義で、
initして初めて長さ0の文字列になるとする。
initする前は「文字列」の概念として不完全な存在だから
OreStringというオブジェクトは成り立っておらず、
この設計はおかしい。
この場合、OreStringContextとかOreStringDataとか
いうクラス名にするか、
コンストラクターでOreStringを適切な初期状態にする。
0444デフォルトの名無しさん2013/06/30(日) 11:00:32.03
Javaは常にTAB一段分のハンデがあるから長い名前は厳しいな
0445デフォルトの名無しさん2013/06/30(日) 11:02:43.78
>例外は文脈が吹っ飛ぶのであまり論理的でない
ジャバドカタは本当に頭が悪いな。
0446デフォルトの名無しさん2013/06/30(日) 11:06:29.48
ここで>>445に論理的な例外を説明する義務が発生しました
・逃げる
・説明する
・SAVE
0447デフォルトの名無しさん2013/06/30(日) 11:08:53.55
・ギムアップする
0448デフォルトの名無しさん2013/06/30(日) 11:25:27.19
>>446
例外は「やりたいことが最後まできちんとできた」か
「やるべきことが全うできなかった」の二つしかない。
後者はcatchハンドラでまとめてエラー処理する。
極めて論理的じゃないか。
0449デフォルトの名無しさん2013/06/30(日) 11:33:48.08
スペルアウトってなに?
スキルアウトの親戚?
0450デフォルトの名無しさん2013/06/30(日) 11:39:39.18
コンストラクタで例外はともかくIOは気持ち悪い
インスタンスの構築とデータの読み込みは論理的に別の処理だからコードの上でも分けて欲しい
0451デフォルトの名無しさん2013/06/30(日) 11:42:50.37
>インスタンスの構築とデータの読み込みは論理的に別の処理
それはクラスを「処理をするためのデータの集合」
としかとらえられない老害の発想だよ

>449
精液を放出することです
0452デフォルトの名無しさん2013/06/30(日) 11:54:24.81
>>448
try-catchで囲まれた処理が
( A, B, C, ......, J )
と構成されている
やりたいことが最後まできちんとできたなら、全てのA-Jは成功している

やるべきことが全うできなかった場合を
NOT( A, B, C, ......, J )
とすると、君ならA-Jのどれが問題となる処理なのかをどう決定するか
そしてそれをcatchに書くことに気持ち悪さはないのか

途中でやめ!で済まされるほど簡単な処理で構成されてるとは限らないんだよ
0453デフォルトの名無しさん2013/06/30(日) 12:03:53.36
>>452
>A-Jのどれが問題となる処理なのかをどう決定するか

別のエラー処理をしたいなら
A-Jごとにtry-catchすべき
0454デフォルトの名無しさん2013/06/30(日) 12:15:13.20
try-with-resource使ってライーしてれば
あんま場合分けはいらないけどね。
tryだけ書いてcatchは書かないとかよくやる。
0455デフォルトの名無しさん2013/06/30(日) 12:49:01.53
話が良く見えないが、コンストラクタの引数にストリームを渡すのじゃ駄目なのか?
0456デフォルトの名無しさん2013/06/30(日) 12:55:52.91
>>445
ドカタは例外を理解できないのでだめ。
↓ こんな感じ
X x = new X();
try {
 x.init(sutoriimu);
} catch (Exception ex) {//catchしないとコンパイルエラー
 log.error(ex);
}
0457デフォルトの名無しさん2013/06/30(日) 12:56:42.05
おっと>>455の誤りでした、すみません。
0458デフォルトの名無しさん2013/06/30(日) 13:10:00.67
コンストラクタにストリームは継承した時に不便かな
ファイルふたつに分けなきゃならんのはめんどくさい
0459デフォルトの名無しさん2013/06/30(日) 13:34:19.39
DI或いはそれに類する仕組みを使え
0460デフォルトの名無しさん2013/06/30(日) 15:37:48.80
IOExceptionが出るような処理を
static { } イニシャライザ内に書いて欲しくないよなー

リソース読み込みなら、まあ譲歩してもいいんだけどさー。
0461デフォルトの名無しさん2013/06/30(日) 18:29:51.29
>>437
インスタンス名、クラス名、メソッド名は簡略化して短くすることは推奨されていませんよ。
ましてや、インスタンス名はクラス名より短くする必要はないと公式に書いているよ。
もう少しよく使われているオープンソースであったりを読んだ方がいいと思います。

上げられたコードでもっというなれば、
getAllRecords()ではなくて
getRecordsAll()ですね〜。

確かに細かいことかもしれないけれど、デザイパターン等しっかり学んでいる人から見ると
「インスタンス名、クラス名、メソッド名等の暗黙の了解・空気」等を感じ取れていないコードは稚拙に見えるのではないかな。
そしてそんなに難しく考えなくても、英語の強みをいかせるように書けばすんなり型にはめられますよ。
例えば、「getAllRecords()」は動詞と目的語が遠いですよね?
今回はたった三つの語の組み合わせなので大したこと無いように感じますが、後ろから修飾していないことに違和感を感じる人は多いと思いますよ。
日本語は頭でっかちに書いた方が美しいですが、英語だと・・・?
0462デフォルトの名無しさん2013/06/30(日) 18:31:12.65
もちろん変数名等も。
連投失礼しました。
0463デフォルトの名無しさん2013/06/30(日) 19:47:32.41
"get all records"と"get records all"をぐぐると・・・
0464デフォルトの名無しさん2013/06/30(日) 19:48:40.12
ローカル変数までダラダラ長く書くやつは信用出来ない
経験的に数学出来ないタイプの人間が多い
04654612013/06/30(日) 19:52:11.80
ttp://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-tutorials-419421.html
ここで入手できるJavaSE6のtutorialの、
[Language Basics]→[Variables]→[Naming]では次のように書かれています。

"When choosing a name for your variables, use full words instead of cryptic abbreviations."

続けて読み進めると、
[Classes and Objects]→[Classes]→[Declaring Member Variables]→[Variable Names]では、

"All variables, whether they are fields, local variables, or parameters, follow the same naming rules ...(略)"

と、さらに念押ししてわざわざ最初で触れた[Naming]の項まで飛べるようにまでなっています。
次に、[Defining Methods]→[Naming a Method]では

"By convention, method names should be a verb in lowercase or a multi-word name that begins with a verb in lowercase, followed by adjectives, nouns, etc."

となっており、先ほどの「getRecordsAll()」に「おや?」っと感じた人はいるかも。
で、この辺りが読むべき空気であると思います。(ttp://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-tutorials-419421.html

あと、例えばA,B,Cのシーンクラスがあったとしたら、
SceneA
SceneB
SceneC
のようにA,B,Cを後ろに書くことでOS等がもつ名前順に並び替える機能を活かせます。
もっというと、それぞれがSceneクラスを継承したものであったら、名前順に並び替えるとsuperであるSceneクラスが一番上に来て最高です。
ソースコードが綺麗な人は当たり前のようにやっていたりいなかったり。。。

何はともあれ、ネーミングを短くしちゃう行為は公式で推奨されていませんよ。(しかも言語の基礎としてそれが書かれている・・。)

>>464 タイムリーなレスサンクス。勿論ローカル変数に関してもです。
0466デフォルトの名無しさん2013/06/30(日) 19:52:47.27
ググったけど、get records allとか言ってる奴皆無なんだけど。
ググり方が悪いのか?
0467デフォルトの名無しさん2013/06/30(日) 19:58:12.68
公式がいつも正しいとは限らない
特にjavaは各方面からボコボコに叩かれるぐらい洗練されてない言語
当然公式が間違えるのは前提として考えるべき
0468デフォルトの名無しさん2013/06/30(日) 19:59:36.87
もう名前の話はどうでもいいので Iterable 実装してください
0469デフォルトの名無しさん2013/06/30(日) 20:05:12.08
>>466
それは後ろにAll置くなら単数系のが合うからかと。証拠にググると皆無ではないよ。
それでも少ないのはプログラムの処理より普段使われている慣用句的に名付けてる人が多いから。
プログラムの意味的にはAllが後ろで単数系のほうがニュアンスとして正しいのでは?
0470デフォルトの名無しさん2013/06/30(日) 20:17:26.52
そういや一時期JFrameのgetContentPane()メソッドに疑問もってた
なぜJPanelはlまでしっかり書いてるのにgetContentPane()はlを省略しちゃったのさ!って

後ほどpane自体で別の意味があることを知りなるほどと思った
0471デフォルトの名無しさん2013/06/30(日) 20:25:02.10
>>470
そんなの考えるまでもなく一瞬で理解できるだろ…w
0472デフォルトの名無しさん2013/06/30(日) 20:44:30.18
冗長なシンボル使ってると 自分がバカになった気がする
0473デフォルトの名無しさん2013/06/30(日) 21:03:48.12
>>471
英単語自信あったのにpaneなんて単語にこれまで出会わなかった
eclipseかbeans使ってりゃ冗長でも苦だとは感じないかな
オートコンプリートあるし
WIN32APIのような引数なら長い方が俺はましに感じる
0474デフォルトの名無しさん2013/06/30(日) 21:06:13.45
英語に自信があると専門用語も詳しいとか
どれだけ自惚れが激しいんだ
0475デフォルトの名無しさん2013/06/30(日) 21:16:29.85
自分の好みを人に押し付けてると 自分がバカになった気がする
0476デフォルトの名無しさん2013/06/30(日) 21:25:13.97
スコープをちゃんと短くすれば変数の名前は頭文字や略称で十分
長い識別子かかなきゃわからないならそれは悪いコードになっている証拠
0477デフォルトの名無しさん2013/06/30(日) 21:48:50.90
人はそれをコミュ障コードと呼ぶ
名をごまかし人目を避けることで何やってるかわからないようにしてごまかす
昨今のオープンソースやJavaの特性とは真逆
反抗したい精神・素直になれない精神はもはや中二病の延長ですまされるかなあ
0478デフォルトの名無しさん2013/06/30(日) 22:09:39.61
カウンターはcountでなくcuntの4文字で
おながいします
0479デフォルトの名無しさん2013/06/30(日) 22:11:50.85
>>478
なじぇ?
0480デフォルトの名無しさん2013/06/30(日) 22:27:22.75
本当に下品
神聖なるJavaを汚すと罰があたるぞ!
0481デフォルトの名無しさん2013/06/30(日) 22:29:33.91
JAVAが神聖とか冗談でもキモい
だが1996年頃はそんな奴が結構居た
0482デフォルトの名無しさん2013/06/30(日) 22:45:55.23
Javaは、すみやかに普及した。その速度は、異常なくらいだった
0483デフォルトの名無しさん2013/06/30(日) 23:21:17.27
>>418
CLASSPATH理解してなかったりするやついるくらいだから、まずはIDE使わない方が勉強にはなるんじゃないか。Javaのどこを勉強するかにもよるけど。
0484デフォルトの名無しさん2013/06/30(日) 23:22:46.96
>>482
Java1.2くらいまでは、おもちゃ扱いじゃなかった?
0485デフォルトの名無しさん2013/06/30(日) 23:36:57.83
てことはやはりJVMあたりから?
0486デフォルトの名無しさん2013/06/30(日) 23:53:25.85
>>483
ドカタの過半数はclasspathを理解してないんだから
無問題
0487デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
>>478
cntじゃないんだ
0488デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
そこはJVMじゃなくてJITだろ
0489デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
>>486
ドカタ目指すなら勉強は不要だろ。
0490デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
単語省略するときは、まず母音から削るかな
0491デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
省略するときは、適当な1文字にしてしまう
0492デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
コントローラにSQLをコピペするだけの簡単な仕事です
0493デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
1文字変数が許されるのはIteratorとcatch節までだよねー
0494デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
>>493
そうだな、あとはv1,v2...と二文字にするべきだな。
0495デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
コントローラーにSQLってのがまさにドカタの発想だな
struts使ったまではいいが、MVCの分離が
理解できなかった典型例
0496デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
mp4をmp3に変換する方法ってありませんか?
ffmpegだと遅いのでこれ以外でお願いします
0497デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
まず、エンコスレに逝きます
0498デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
すみません文字列がsplitできるかできないかで判定するにはどうすればいいですか?
例えば

String line = "go kyoto";

String verb = line.split(" ")[0];
String place = line.split(" ")[1];

のような場合は問題ないと思いますが、lineがsplitできる保証がないときの判定法が知りたいです。
例えばもしline="go";だった場合、
ArrayIndexOutOfBoundsExceptionがでます。
(スペース" "は無いけれど[0]のsplitはできている?どちらにせよsplitできないと[1]を指定した時点で例外でますよね。)
0499デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
>>497
エンコすれ行ってきます
0500デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
>>498
splitが何を返すか見直してこい
0501デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
>>498
String [ ] result = line.split(" ");
してから
result.lengthで判定だ。
0502デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
コントローラーにガンガンなんでも入れちゃうのはむしろRailsでよくある症例だと思う。
ぶっちゃげRailsももはやドカタフレームワークだけど。
0503デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
>>498
StringTokenizerを使う

StringTokenizer st = new StringTokenizer(line, " ");
if (st.countTokens()>=2) {//分割できる
String verb = st.nextToken();
String place = st.nextToken();
}
0504デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
indexOfでええやん
いちいちオブジェクト作るなよ
0505デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
Javaドカは作業ファイルを多用するので、その程度のコストは全く問題になりません
0506デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
長大な文字列の極めて終端に近いところで最初の区切り文字が出てくる場合や最後まで区切り文字が出てこなかった場合
事前検索してからの分割はコスト的にどうなのだろうか
0507デフォルトの名無しさん2013/07/01(月) NY:AN:NY.AN
気にするな
パフォーマンスなんか土方には理解出来ない
cを使えるようになってからパフォーマンスとか気にすればおけ
0508デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
土方仕事の実行時間はほぼ全てIOが占めるからね
細かいことはどうでもいいのよ
0509デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
\x2022 Windows Internet Explorer
ブラウザを終了して続行しろと出て、全く先に進めません。
ブラウザは全部閉じています。
検索して調べたけど、「\x2022 Windows Internet Explorer」
について全然でてこなくてわかりません。
どうすればいいのですか?

環境はWIN7、IE10です。
05105092013/07/02(火) NY:AN:NY.AN
失礼しました。
アップデートが上手くいかないのです。
05115092013/07/02(火) NY:AN:NY.AN
再起動してから試しても、何度やっても途中「\x2022 Windows Internet Explorer 」
ブラウザを閉じろの繰返しだったのですが、先程すんなりと完了できました・・・。
設定など一切変更していないので、何が原因だったかわかりませんが
とりあえず完了できたので、お騒がせしてすみませんでした。
0512デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
何のアップデートなのかも書けないとは
残念な奴だな
0513デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
ごめんなさい、7 Update 21 から25へのアップデートでした。
0514デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
windows 7のうぷだてとな
0515デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
http://livedoor.blogimg.jp/news23vip/imgs/1/d/1dba13cc.jpg
何が悪いのこれ?
0516デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>515
Cジジイの頭が悪い
0517デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
と見せかけた関数型言語マニアなのかもしれない
0518デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
mp4とかの動画フォーマットからオーディオを抜き出せるライブラリってないですか?(mp4だけでもいいです)
ググってもフリーソフトしか見つかりません
0519デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
便利なオープンソースやAPIを使えてwebに強いほうが良いに決まってるのに。
そして初めての言語がオブジェクト指向な方が得に決まっている
0520デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>518
ffmpeg
0521デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>520
ちょっと見てみたけど遅いです
直接吸出しできるのってないですか?
0522デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>521
まず、直接吸い出せるツールを見つけてこい
0523デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
ICカードを扱う無料ライブラリありますか?
0524デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>523
まず正しく質問できるだけの知識をつけてこい
0525デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>522
ffmpegで設定変えたら速くなりました
ありがとうございました
0526デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>523
業務用で住民基本大腸カードを扱うなら
LASDECから入手が必用(C++)。
SuicaならたぶんC++向けAPIは提供されているだろう。
SmartOnなどの特定製品もSDKが販売されているだろう(たぶんc++)。
つまりお前のスキルでは無理。

それ以外のカードは無理ゲーに近いけど
意外とAndroidで探した方が行けるかも
0527デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
ICカードは個人には仕様公開しないから働かないと使えないよ
0528デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>527
何のICカードかにもよるが、個人で開発できるよ。
0529デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
ICカードにJVM移植した「JavaCard」って、あれからどうなったの…
0530デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
それはリバースエンジニアリングだろ
正式な仕様は非公開だよ
0531デフォルトの名無しさん2013/07/02(火) NY:AN:NY.AN
>>530
SDK買っても暗号化領域は読めないだろうし、そもそも書き込めない場合が多いだろう。
その意味では、法人でSDKを買っても仕様が全て公開されるわけではない。
逆に、個人でも見ることができる範囲でデータを読むことは出来る。
0532デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
質問を読めない回答者が多いね
「ICカードを扱う無料ライブラリありますか?」
って質問なんだから、仕様が公開とか非公開とか関係ない

ライブラリがあるのかないのか答えろよ
0533デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
>>532
ググれ馬鹿
0534デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
今すぐ手軽にJavaでprintfで文字を表示させるレベルの簡単なプログラムを組みたいのですが
Windowsで無料で最短の開発環境を教えて下さい
0535デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
eclipse
0536デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
NetBeansのが手間無しだろ
0537デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
何度もごめん
eclipseでC++でいう .cpp と main関数はどう作れば良い?
0538デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
mainを作るチェックボックスをクリックする
0539デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
test って名前のプロジェクトを作って
その中にパッケージを作って
その中にmainって名前のクラスを作るところまでは分かったけど
そこからが分からない
main関数を作っただけじゃ実行出来ないの?
選択にはメイン型が含まれていません
ってエラーが出る
0540デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
main関数が入ったクラスを右クリックして実行ってすると
実行できるよ
0541デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
ごめん
自己解決した
付き合わせてすまない
0542デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
ムッキー
0543デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
メンバの外部からの読み取りはOK、変更は禁止。といった、publicとprotectedの間くらいの設定をしたいです
大量のクラスメンバに対する大量のgetterメソッドを作るのが無駄な気がするので・・・
みなさんどのように対応していますか?
0544デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
大量のgetterをIDEのプロパティ自動生成機能で作る
手打ちしなければ全く気にならない
0545デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
なるほど、ありがとうございます。
0546デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
アノテーションでgetterとかを自動生成するライブラリとかあった気がする
使ったこと無いけど
0547デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
c++で言うとconst参照みたいなのはJavaには無いのですか?
0548デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
無い
0549デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
ない
イミュータブルなオブジェクトを使うとか
防御的コピーするとかしろ
0550デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
Javaでデータベースを操作するアプリを作ってるのですが質問があります
毎日レコードが追加されるテーブルがあります
このテーブルを最新の半年分の情報とそれ以前の情報で別のテーブルに分けて管理する設計って悪い設計ですか?
新しい情報と古い情報は同じサーバーにあり格納するテーブルだけが違います
アクセスは新しい情報に集中します
0551デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>550
あまり良い設計だとは思わないけど、実物見ないと何とも言えない。
アプリの形態はWeb? DBMSは何? 一日に何レコード追加されるの? 1レコードあたり、およびトータルのデータ量は?
たぶん、適切なインデックスを張るとか、最近のデータだけmemcachedするとか、工夫の余地は色々あると思う。
あと、Javaよりもデータベースのスレで聞いた方かいいような。
0552デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
DB板で聞くべき話だとは思うけどどのRDBMSを使っていてどんなスキーマでどんなクエリ
を投げるのか解らないと誰もアドバイス出来ないと思う。

ただし一般論としては、そういうテーブル分割を手作りすると古いレコードの移動とか
それに伴いアプリ側で生成するクエリを変更するとか、運用面で余計な手間やバグの
温床を抱えることが多い。RDBMSに詳しくない人が思いつきレベルで分けたのであれば
率直に言ってあまり関わりたくない、そういう設計。

まずはインデックスでどうにかならないか、あるいはシャーディングなどと呼ばれる
機能が使えないか調べることをお薦めする。
0553デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>550
世の中にはOracleパーティショニングというものがあってだな
つまり性能上テーブルは分けるけど概念的には同一
というのは普通にあると言うことだ
0554デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>550
RDB論的には間違ってる(ことが大半だと思う)。んだけどもじゃあ絶対そんな実装しないかというとそんなこともない。
実際そういうの作ったことあるし、よく見かけもするねー。
理由はパフォーマンスだったり運用上やら他のシステムとの兼ね合いやら。

要は状況次第ってことなんであまり回答になってないんだけど。
0555デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
データ保存期間が数年で、保存期間MAXになるとレコード数が1000万レコードを超えるような
トランザクションデータの場合、年あるいは月によるパーティショニングか、
「直近のテーブル+それ以前のアーカイブテーブル」という構造にすることは良くある。
0556デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
abstractクラスのabstractメソッドの引数にenumを持たせたい場合
どういう設計をすればいいのでしょうか

イメージ的にはenumを定義しないとコンパイルエラーになるようにしたい
そしてenumの中身は継承先々で用意したいが、名は統一したい
0557デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
abstractメソッドの引数にenumを与えたい、ただしどのenumクラスを使うかは
継承先に決めさせたい場合は普通にGenericsを使うかなぁ。

public abstract class AbstractSample<E extends Enum<E>> {
 public abstract void sampleMethod(E item);
 protected abstract Class<E> getEnumClass();

 public void sampleMethod(String name){
  sampleMethod(Enum.valueOf(getEnumClass(), name));
 }

public class Sample extends AbstractSample<Sample.MyEnum>{
 public enum MyEnum{enum1, enum2, enum3}
 @Override protected Class<MyEnum> getEnumClass() {return MyEnum.class;}
 @Override public void sampleMethod(MyEnum item) {...

getEnumClassは任意だけれども上記のようにString版のメソッドの実装も抽象
クラスで与えたいときなど便利。

> そしてenumの中身は継承先々で用意したいが、名は統一したい

「名は統一したい」というのがSample.MyEnumのように継承クラスでは必ず
MyEnumというenumクラスを内部クラスとして宣言する、ということを強制する
という意味なら多分無理。
0558デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>557
abstractクラスのAクラスを継承したBクラス・Cクラス・・・内で
private enum Foo {
}

を定義していないとコンパイルエラーにしたい(可能なら)というのと、
「名は統一したい」というのは、Fooという名を統一して中身を各クラスで別に用意したいという意味です。

Bクラスでは
private enum Foo {
BAR, BAZ
}

Cクラスでは
private enum Foo {
QUX, QUUX, CORGE
}

というようにです。普通こういう場合、単なるメソッドならばsuperクラスのAクラスで
abstract protected void foo();
として、継承先で
@Override
private void foo() {

}
ですみますが、

abstract protected enum Foo;
なんていうのは許されませんよね?
となると、「Bクラス・Cクラス・・・でFooという名のenumを自分で定義する」というプログラムから離れた所にルールが生まれてしまいすこし嫌です(名がFooである保証がない?)。
可能ならば、このFooというenumをもたなくてはいけないことをsuperクラスで定義できないのかなと思って質問しました。
0559デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
設計が変なんじゃないの?
enumは1つのファイルで作って使う値を全部列挙して
具象クラスでその値を使う時に無効な値をはじくようにしておけば?

public enum Foo {
BAR, BAZ, //Bクラスで有効
QUX, QUUX, CORGE, //Cクラスで有効
}

abstract class A {
abstract public boolean isValid(Foo item);
}
0560デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>559
そうなんです。そしてそう書いてました。
だけど、Cクラスで使うときにBクラスでしか使わないBAR,BAZが可視なのを何とかならないかなとおもいました
0561デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>550
twitterがそんな感じの設計をしてるね

適当にぐぐって見つけた記事
http://www.atmarkit.co.jp/news/201004/19/twitter.html
0562デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
Twitterが必要とする設計が遙かに小さいスケールでも有効かというと単にオーバーキルで
手間暇増えるだけだったり。

インデックス設計の評価やDBMS組み込みのパーティショニングを検討するに一票。
0563デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
年度別テーブルみたいなアプローチはインデックス貼るコストも安くなるからな
JPAが対応したら面白いがOracleさん的には困るか
0564デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>550
それは水平分割って技法。DB設計ではアンチパターンに含まれる。
レプリケーションやインデックス、その他もろもろ全ての「正しい」解決法を試して
それでもパフォーマンスの問題が解決しなかった場合のみ使って良いというもの。
0565デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
いつになったら板違いの話題をやめてくれるのかな
0566デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>565
Javaの話題あんの?ないんだったら黙ってろよ。
0567デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>564
何言ってるんだ。
パーティショニングこそ水平分割だろうが。
それに、レプリケーションなんか関係ないし。
0568デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
半年分というのが、どういう機能要件なり性能要件に基づくものかがわからない限り、
どんなアドバイスも的はずれな可能性大なんだけど。
0569デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>550 は悪い設計ですか? と聞いてるだけだから

満場一致で悪い設計です と答えて終わりじゃないか
0570デフォルトの名無しさん2013/07/04(木) NY:AN:NY.AN
>>569
さすがコミュ障
0571デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
半端な知識と仕込みで手を出しても無駄に苦労するだけの悪い設計。
0572デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
JDBCは単なるSQLインタプリタなので、
デザパタ的にあまりおもしろい設計はできない。

他のDBライブラリはしらん
0573デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
>>572
またてけと〜なことを。
0574デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
JDBCはSQLの中身には関知しませんよ
クエリとデータを右から左、左から右へ流すだけ
0575デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
SQLインタプリタになっているJDBCやドライバの実装がどれほどあることやら。
0576デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
「リレーショナルDBの世界がどうオブジェクト指向化されるんだろ」と
JDBC発表にワクテカしてたのは俺だけか。
SQL文を文字列で用意する必要があると聞いてがっかりしたず

「Table」に相当する抽象クラスがJDBCに出てこないってどういうことよ
0577デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
実質スキーマレスになってしまうからじゃないか?
それリレーショナルなん?
0578デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
JDBCにODBC相当物以上を期待していた人なんていないでしょ。
0579デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
あのころはオブジェクト至高(キリッじゃなくて
write once run everywhereで売ってたような
0580デフォルトの名無しさん2013/07/05(金) NY:AN:NY.AN
>>576
O/Rマッピングすればいいだけだろ
0581デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
>>576
言ってること目茶苦茶すぎ
>>574が言ってるように、受け流すだけを担ってこそオブジェクト指向だ

おめぇさんはよぉ、銭湯いって風呂上がりのフルーツ牛乳が見当たらないからって
キレちゃうような輩なのか?
俺はきれるけどね
0582デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
ただ、キレる相手は番台さんじゃねーってこった
0583デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
javaee7にlinq入ったんだってね
コレクションだけらしいしViewのためだけにあるのだろうけど
0584デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
w
0585デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
abstractクラスは便利ですね

public abstract class AbstractJInternalFrame extends JInternalFrame
{
private int x, y;
private int width, height;
private String title;

public AbstractWindow(int x, int y, int width, int height, String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable)
{
super(title, resizable, closable, maximizable, iconifiable);
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.title = title;
}

public void resetPerspective()
{
System.out.println("Reset Perspective: " + title);
setBounds(x, y, width, height);
show();
}
// 以下フィールドのgetterのみ
}

みたいな設計が本当に便利に感じる。eclipseのReset Perspectiveの簡易版みたいな感じ。
iframes = new HashMap<String, AbstractJInternalFrame>(); あたりでまとめてたとすると、ActionListenr等で
for(Map.Entry<String, AbstractJInternalFrame> f : iframes.entrySet()) f.getValue().resetPerspective();

継承先でsetLocation(int, int)等で好き勝手できるけど初期値は断固としてsuperが守ってるみたいなイメージ。
0586デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
あっそ
他の全員は知ってるから粉みかんは3行以内で頼む
0587デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
あぁコンストラクタ名が間違ってるのは仕様でござます
0588デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
抽象クラス使うやつは設計下手なザコ
0589デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
抽象クラス使えない=クラスすら使えない(クラスはオブジェクト)
ってことに気づいているのだろうか
クラスも使えないとなると設計がうまい下手の段階までいけない件について…
0590デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
意味不明
抽象クラスなんてテンプレート実装作るだけの道具にすぎない
多態はインターフェイスが基本で、抽象クラスは必須ではない
0591デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
>多態はインターフェイスが基本で
インターフェースの無い言語はOOPではない
と言いかねないJAVAドカタの珍説には
いつも驚かされます
0592デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
最近ちょくちょく抽象クラスがどうのこうのって話になるな
同じ奴が繰り返してるのか?
0593デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
可能な限りインターフェースってのは全く同意だよ
そもそも公式がうたってますし
だけどいつも何でもかんでもインターフェースにしちゃうのは大反対
特に、extendsできなくなるのは場合によっては保守性が上がる
でもって、インターフェースが一番活きるのはこの時なんだよね〜仕様的にも。
0594デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
Java 8からはインターフェースも実装を持てるようになるから
抽象クラスと何も変わらなくなるよ
0595デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
extendsの大部分は委譲で済んじゃうんだけどな。IDEの自動生成も使えるし。
0596デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
>>594
抽象メソッドはprotectedにするもんだ
インターフェイスじゃできない
0597デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
protected使うなんてレアケースだろ。一般論として語るのは……
0598デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
まぁでも何もかわらなくなるってのは
先の「抽象クラス使うやつは…」のくだりと同じで極論すぎるよ

そしてprotectedがレアケースだとも思わないなぁ
それはニアリイコール抽象クラスをレアケースといっているようなもんだし…
0599デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
Template MethodやFactory Methodはprotectedで十分なはずでしょ
MS系だとそれこそ仮想メソッドはほとんど全部protectedだったりするが
Javaってそのへん適当だよね
0600デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
abstractクラスのfield活かした方が明らかに良い場合も無理してinterfaceなの?
それはちょっとどうなんだろう
interfaceだと子クラスに丸投げだよね?
0601デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
ファクトリメソッドをprotectedはありえねーよ。
テンプレートは使う側ならprivateでなんも問題ないな。
仕様の方ならインターフェースで十分っつかpublicにしないと不便極まりないし。
0602デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
>>601
>privateでなんも問題ない
privateはオーバーライドできません
>インターフェイスで十分
デザパタ知らないの? 移譲を使った設計と混同してるのでは?
0603デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
ある機能を実装するとき、個々のクラスやら何やらで振る舞いが違う部分と
それらを呼び出す形で固定化できる部分に切り分けるのがテンプレートメソッドパターンなわけで。
固定化してる方はオーバーライドする必要が全く無いから、
外部からアクセスする必要がないならprivateで何の問題も無い。
0604デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
Factory Methodがprotectedで十分とか
0605デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
どう考えても両方使うだろ…
interfaceだけにしろ、protectedだけにしろ、privateだけにしろ…
何も考えていない証拠だ
0606デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
抽象クラスはそのクラスの実装者からみたら窮屈に感じるが
protectedメソッドを実装するだけだと副作用が無くて安全にも感じる
ディスパッチ目的の抽象クラスだと実装がやたら手続き型でも気にならない
0607デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
>抽象クラスはそのクラスの実装者からみたら窮屈
イミフ

>ディスパッチ目的の抽象クラス
イミフ
0608デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
まずインターフェイスを用意して、それを実装する際に楽をする、してもらうために
抽象クラスも使うかな。両方使わないと不便。
APIに立ち現れるのはインターフェイスだけで実装クラスは基本隠す。
0609デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
抽象クラスは何がダメかってスタンドアロンじゃない前提の癖に再利用性が悪いところだ
0610デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
あるインタフェースのひな形だったりフレームワークへのエントリポイント
だったりするからな。ある方策に従わせるための抽象クラス
0611デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
>再利用性が悪い
設計がKUSOなだけじゃね?
0612デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
逆に他に実装可能な手段があるのにあえて抽象クラスを使うことが正解というケースがごく稀にしかない
0613デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
ある抽象クラスのサブクラスが1個しかないならKUSO
分ける意味ねーもん
将来的に使いたいとしてもその将来っていつ来るの?って話
0614デフォルトの名無しさん2013/07/06(土) NY:AN:NY.AN
派生クラスに共通する役立つメソッドを抽象クラスで提供しよう
↑抽象でないクラスに分離してメンバに持たせるのが正解
0615デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
>>613
例え一個でもわけた方がいい場合は間違いなくあるよ
だがabstractクラスはサブクラス沢山抱えたときにまとめて扱うのがいいよな
0616デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
abstractクラスを継承したabstractクラス
みたいな構造のデザインパターンを経験しないと
メソッドにつけるfinalの有り難みが勉強できないんじゃないかなとは思う
0617デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
出たー酷い失敗設計
0618デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
将来どこを修正する可能性があるかを予想できないと抽象化は難しい
二度といじらないコードを抽象化するのは無意味だ

工期、予算の都合で今はしないけど次のサイクルでこれこれやる
ってくらい確実にわかっていなければ抽象化する必要はない

抽象化しなかった場所に修正が入るってなら設計上のミスだ
かむしろマネージャーの開発スケジュールミスだ
0619デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
テストの為に抽象化することもあるんですが
0620デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
>将来どこを修正する可能性があるかを予想できないと抽象化は難しい
んなこたーない。
現在の機能要件と拡張性要件に基づいて
設計するだけ。
0621デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
要件なんてあてにならない
未来は神様にも予言できないんだよ
0622デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
なんか良くわかんないんだけど、具象クラスしか作らないのかな
0623デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
将来のためのインターフェースなんて、>>618くらいじゃない?
あとは、縦割り部署のインターフェースとか、、、

昔、DB部門が作ったインターフェースで、笑えないヤツがあったのを思い出した
テーブルの指定がひとつだけで、結合が全く出来ないという
0624デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
ちょっと何言ってるかわかんないですねー
0625デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
Javaやるとこうなる
シャブみたいなもんだよ
0626デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
テーブルごとにクラス分けしててselect XXX from A,B(A,Bはテーブル)が考慮されてないってことか

通常のオブジェクト指向でもそうだが、ふたつのクラスの相互作用を表す方法に苦慮する
クラス(A+B)を作るのは負けかなって思ってる
0627デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
相互作用は簡単なものならイベントを使う
複雑ならプロトコルをクラスにする
通信対象の選択自体が複雑ならルーティングもクラスとして作る
面倒だが基本中の基本だろ
0628デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
一部だけ人に書かせるときはAbstractが楽。特に土方に。
0629デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
>>626
そこでLINQですよ
C#の劣化版猿真似は得意だろ?
0630デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
>>628
最悪だろ
土方に正確なオーバライドは無理
0631デフォルトの名無しさん2013/07/07(日) NY:AN:NY.AN
>>629
無駄な通信が発生するのは同じだろ
0632デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
>>629
まともな設計ならLINQはあくまでモデルの中で使うので同じことですよ
0633デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
abstractクラス継承したabstractクラスはデコレータパタンとかでたまにみるね
0634デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
Eclipseで、
実行(Ctrl + F11)のときは文字列を出力させず、デバッグ実行(F11)のときだけ文字列を出力したいです。

プログラムの中でデバッグ実行かどうか判別すればいいと思うのですが、
System.getProperties() で確認したところ、デバッグ実行のときだけセットされるプロパティは無さそうでした。

何かいい方法ありませんか?
0635デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
リファクタリング機能をつかう
0636デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
デバッグ実行のときにプロパティをセットすればいい
0637デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
デバッグ実行だと動作遅くなるからベンチマークとってとか、間違ってそのままリリースして
遅い端末だとデバッグ情報が見れるw
0638デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
>>634
デバッグ実行時だけログ出力レベルをfineにすればいい
普通はlog4jだろうが俺はしらん
06396342013/07/08(月) NY:AN:NY.AN
すみません、説明不足でした。
頻繁に実行とデバッグ実行を切り替えたいため、
ソースコードや設定ファイルを変更することなくやりたいのです。
0640デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
main メソッドを持つクラスを 2 つ作って起動し分けるとか
0641デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
だったらコマンドライン引数でいいだろ
0642デフォルトの名無しさん2013/07/08(月) NY:AN:NY.AN
最初のブレークポイント前後が100ms以上開いたら
「現在デバッグ中」フラグが建つということでどうだ?
0643デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
AspectJとかで実行時に文字列出力コードを織り込むとか
0644デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
>>630
なぜInterfaceやスクラッチだと正確にできるの? どれでも正確にできないなら比較の問題。ベターなもので満たせないなら、受け入れテストしてない方が悪い。自分がサボってるのを土方のせいにするなよな。
0645デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
visual studio+C#でできるデータベース操作のパクリはjava+eclipseには無いのですか?
テーブルアダプタやデータソースのことです
0646デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
visual studioがわからん人にはどういう機能かわからんからなぁ。
表形式でデータ見られたり、定義情報が見られたりするやつのこと?
0647デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
>>646
データベースへアクセスするためのクラスを自動で作ってくれる機能です
コードを一行も書かなくてもデータベースへのアクセスからフォームへのバインドまでしてくれるすごいやつです
0648デフォルトの名無しさん2013/07/11(木) NY:AN:NY.AN
>>647
その程度なら、なければ自作しろ。
俺はそんなの全然ほしくないが。
0649デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
山ほどあるから。
0650デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
JDBCが好き
0651デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
最強のドカタ言語を舐めるなよ
0652デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
データベースからAccessみたいな環境を一式用意してくれるみたいな?
そいやJavaでクラサバとかしたことねーなぁ
0653デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
>>652
え
0654デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
社会人になればOracle Databaseは当たり前
0655デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
オッス オラ狂う
0656デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
でもメディアにのる格好いい事例って大抵はEC2の上にMySQLやPostgreSQLをデプロイ
したようなのが最近は多い。
実際に儲かるかはともかくとしてOracleを使った事例ってあまり若い人にアピール
しないというか、こういうシステムに関わってみたいという対象ではない気がする。
0657デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
そりゃJavaの用途のほとんどに言えることだ
0658デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
>>656
機能に隔たりがありすぎるその3つを同列に考えちゃうような「若い人」は、まぁロクな人間じゃないな
せいぜい使い捨ての歯車としてこき使われるのが関の山の人生しか待ってないだろう
0659デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
DBMSと言われて真っ先にMySQL、PostgreSQL、Oracleの3点セットを挙げる人間は使えないね
RDMSしか使えません、データモデリングも関係データベース用のものしか知らない素人ですと白状してるようなもの

「ぼくオブジェクト指向しかできません。でも今はオブジェクト指向が流行ってるから困らないでしょ?
Cの構造化プログラミングも、関数プログラミングもできないけどそんなの流行ってないから問題ない」
って言ってるのと同じだぜ
0660デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
関数プログラミングは注目されてるだろ
皆メニーコア時代に備えていつ手を出そうかなみたいに
0661デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
RDBMSを馬鹿にする人間ほど関係データベース理論を勉強していないしそれが必要となる
スケールでNoSQLの類を運用した経験もない件。

RDBの理論的理解がRDBの世界でしか役に立たないと思ったら大間違い。
0662デフォルトの名無しさん2013/07/13(土) NY:AN:NY.AN
eclipse4.3、java7、activemq5.8でjmsのサンプルを作ろうと思っています。

mavenのセントラルリポジトリからactivemq-client.jar、activemq-broker.jarをインストール。
eclipseのビルドパスに通しましたが、パスが不完全というエラーが出ます。
javax.jms.*はドコから入手すれば良いのでしょうか?

なお、mavenによるcompileは通ります。

ソースは
https://sites.google.com/site/chobimemo/java/activemq
をコピペしています。

ビルドエラーは以下の2つ
javax.jms.TopicConnectionFactory を解決できません。必要な .class ファイルから間接的に参照されています
ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした。javax.jms.TopicConnectionFactory のクラス・ファイルが見つかりません。ビルド・パスを修正してから、このプロジェクトをビルドしてください
0663デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>mavenのセントラルリポジトリからactivemq-client.jar、activemq-broker.jarをインストール。
>eclipseのビルドパスに通しましたが、パスが不完全というエラーが出ます。

ここで何をやったのかよく解らないけれども、原則としてActiveMQその他のjarファイルを
「手動で」ダウンロードしてコピってEclipse上でビルドパスを弄る必要は全く無い。
もしやったのであればまずjarを削除して弄った設定を元に戻すこと。

mvn compileが通るのであればorg.apache.activemq.activeme-coreをdependencyと
してpomに追加は出来ているのだと思う。
こんなの<dipendencies>以下に追加したよね?

<dependency>
 <groupId>org.apache.activemq</groupId>
 <artifactId>activemq-core</artifactId>
 <version>5.3.0</version>
</dependency>

であればあと必要なのはEclipseにMavenプラグインをインストールしてプロジェクトを
Mavenプロジェクトに変更すること。
Eclipse Marketplaceからm2eをインストールしてEclipseを再起動、問題のプロジェクト
を右クリックしてConfigure -> Convert to Maven projectを実行。
これでプロジェクトフォルダのアイコンの右上にMマークがついてプロジェクトフォルダ
の中にMaven dependenciesというのが現れれば成功。Eclipse上でコンパイルが通るはず。

もしMマークが現れるもMaven dependenciesが出てこない場合はEclipseプロジェクトの
古い設定が悪さをしている場合がある。この場合はプロジェクトをEclipseから一端削除
して(ファイルは削除しない)、プロジェクトディレクトリ内の.classpath、.settings、
.projectを削除、あとはEclipseのImport -> Maven -> Import existing Maven projects
でMavenプロジェクトとしてインポートし直せばOK。
0664デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>659
いま構造化プログラミングやる必要ってある?
C言語書いてるとすごい苦痛なんだけど
0665デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
Javaは構造化プログラミング言語でもあるし
オブジェクト指向なんかより遥かに重要な概念だろ
0666デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>664は構造化プログラミングを構造体中心のプログラミングだと思ってるんじゃなかろうか。
0667デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
メソッドの中身は全部アセンブラで書くよ
0668デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
構造化プログラミングって、
・gotoを使わずに、ifやforやwhileなどを適切に使う
・なるべく大域変数を使わずに、ローカル変数や引数や戻り値を適切に使う
・関数や構造体などを使って処理やデータを上手に抽象化する
ってことで、オブジェクト指向の基礎にもなってる。

C言語を使う=構造体プログラミング、ではないよ。
0669デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
ああ確かに構造体プログラミングではないな
全面的に正しい
0670デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
最近はCでもオブジェクト指向が基本だからねえ
0671デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
Objective-C 限定の話?
0672デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
再入可能なモジュールを多用するスタイルをオブジェクト指向と呼ぶなら
>>670は間違いでもない
0673デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
オブジェクト間メッセージパッシング語る上で
ローカル変数の有無は必然でもなんでもないのでわ
0674デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
カプセル化って言葉があったけどモジュール化と何が違うの?
0675デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>674
モジュール化は関連する処理やデータをまとめること。
カプセル化は、モジュールの内部情報をモジュールの外から勝手にいじられないようにすること。
0676デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
newとmallocって何が違うの?
0677デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
マロックはメモリ確保するだけ
ニュウは時と場合によるが世界を滅ぼす事もできる
0678デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>676
newしたらコンストラクタが呼ばれるから、
malloc + 初期化処理がnewだと思うよ。
0679デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>678
つまりC言語でもオブジェクト指向プログラミングはできるってとこですね
0680デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
そりゃできるでしょ
第一引数に目的オブジェクトのハンドラを渡す関数用意するだけ
普段からFILE構造体なんて中身知らずに使ってるだろうし
0681デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
要するにC言語はオブジェクト指向言語ってことですね。
0682デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
デフォルトでは指向してないので
オブジェクト可能言語
0683デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
ついでに言わせてもらうとperlは(selfを渡す)オブジェクト趣向言語
0684デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
おまえらJavaの話をしろ!!
0685デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
ゴスリングは今何やってますか?
0686デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>685
海でぷかぷかやってるみたいっすよ。

Java Magazine 日本版 Vol.7 (2012年11月発行)
http://www.oracle.com/webfolder/technetwork/jp/javamagazine/index-07.html
0687デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
なんか楽しそうでいいですね^^
日本人だったらなんか会社を追い出されたとかブツブツ言いながら死んでそうです。
0688デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>679
使い古されたテクニックだよ
0689デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>663
ありがとうございます!
無事できました。
ご指摘の通り、手動でパスを通したのでj2ee関連のjarが足りなかったようです。
こんな感じでmvnコマンドでプロジェクト作ったのですが、eclipseからやった方が良いんですね。
mvn archetype:create -DgroupId=com.example -DartifactId=sample
0690デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>664
上から下に流れるプログラミングしか読み書きできない奴のことを言っているのか? 同じようなコードがでてきたらまとめてるとか言うやつ。
そういうやつらが、わざわざJavaを使う意味がわからない。
0691デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>680
>普段からFILE構造体なんて中身知らずに使ってるだろうし
それはオブジェクト指向じゃなくて
ただのカプセル化
0692デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
fclose(fp) はオブジェクト指向じゃなく、
fp.close() だったらオブジェクト指向って考える派?アホなの?
0693デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
>>692
オブジェクト指向を美化しすぎだ
0694デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
オブジェクト指向 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91
0695デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
そういう奴等だからこそJava使うんだよ
なんたって現代のCOBOLだからね
0696デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
692
>fclose(fp) はオブジェクト指向じゃなく
えっ、明らかに違うじゃない?
オブジェクトが存在しないし
オブジェクトに対するメッセージもないし
ポリモーフィズムも実現できていない
0697デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
ポリモーフィズムは実現できるぞ
0698デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
構造体にコールバック関数を登録したりとか普通のテクニックだよな
0699デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
個人的にはコンストラクタ、デストラクタはオブジェクト指向の成果だと思ってる。
Cではやりずらいだろ?
しかしデストラクタを捨てたjavaの思想は間違ってた。
オブジェクトの開放はGCで結構だがスコープが終了したときに実行されるデストラクタは
あった方が良かった。
0700デフォルトの名無しさん2013/07/14(日) NY:AN:NY.AN
じゃあJavaからJavaに欲しかった機能を充実させたJavaライクな新しい言語を作り出せばいい
0701デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>696
オブジェクト…fp
オブジェクトに対するメッセージ…fclose(fp) = fp.close()
0702デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
Cでオブジェクト指向のAPIというとGTK+あたりが良い例だと思う。
0703デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>699
デストラクタはガベコレとあんま相性良くないだろ
AutoCloseable+Closeableでだめなのか?
0704デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
try-with強制するルール作ればよい
0705デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>700
Ceylonがそういう位置を目指してるんじゃなかったっけ
今どのぐらい開発が進んでるのか知らないけど期待できるものになってるのかねえ
0706デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
シェアという壁がある
どんなに他が優れていても
数の暴力に駆逐される
エクセルみたいなものだ
0707デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
ベターJavaとしてはC#やScalaという超優秀な子がいるだろ
あくまで言語仕様に限った話な
0708デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
extends = 継承
implements = 委譲

っていう認識は違いますよね?
なんかそういう認識で物言っている人が多くないですか?
例えばabstractクラスの利用は設計によって委譲にもなりますよね。
0709デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>708
普通にimplementsは「実装」でしょ。
その実装が継承によってなされているか委譲によってなされているかフルスクラッチかは
知った話ではない。
0710デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>708
> なんかそういう認識で物言っている人が多くないですか?

そうか?
0711デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
interfaceを実装するという自然な英語になってるだけだよ
0712デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
ワザワザ分けるなよめんどくせえ
cls suborimpl : baseorintf {
でいいだろ
タイプ数へらせや
0713デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
すみません質問があります。

private int value;

public Constructor(int value) {
this.value = value;
}

この変数valueはインスタンス化した後に動的に変化するのですが、
initメソッドを呼ぶとインスタンス化したときに設定した値に戻したいのです。解決策として、

private int value;
private int defaultValue;

public Constructor(int value) {
this.value = value;
defaultValue = value;
}

という単純な方法を思いつきましたが、defaultValueはこれっきり変更されることはないのでもっと縛りたいです。
どうすればprivate static final int に近くなりますか?
0714デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
private final int defaultValue;
0715デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>714
finalってfieldでしか一度っきりの代入ができないのかと思ってました。
field以外でも考慮されるのですね。勉強になります。
0716デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>715

むしろ宣言が主目的であって、代入のためにあるわけじゃないでしょ。
0717デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
>>715
field以外でも考慮されるが、そこのdefaultValueはfield。
0718デフォルトの名無しさん2013/07/15(月) NY:AN:NY.AN
うちの周りだと継承はsuperへのgosubと認識している人が多い(苦笑)
0719デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
gosub...今こんなの使える言語って生きてるのか?
0720デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
ホストWindows
Socket socket = server.accept();
OutputStream os = socket.getOutputStream();
BufferedImage bi = バッファイメージ5kB〜100KB程度
ImageIO.write(bi"JPEG", os);
close処理
上記は想定通り動作する

これを連続処理にするために
Socket socket = server.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
ループ開始
BufferedImage bi = バッファイメージ
ImageIO.write(bi"JPEG", os);//flash()は試しました
ループ終了か否か=in.read(); //ブロックして同期とる
ループ終了
close処理
ブロックまでは動くが2週目行かない。これは想定通り
クライアントandroid
socket = new Socket(リモートホスト,ぽーと)
InputStream is = socket.getInputStream();
OutputStream out = socket.getOutputStream();
ループ開始
in.read的な処理//ここで止まってるのでavailableで確認したが0から進まない
out.write(ループ終了か否か)
ループ終了
close処理

なぜWindows側ではライト終了しているのに、android側ではリードできないのかわかりませぬ。ぼすけて
ちなみにマーク、リセットはサポートされていません
0721デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
in.read的な処理 の終了判定がマズイに1票
0722デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
ImageIOのキャッシュ切ってパケットモニタしてみよう
0723デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
書いてるソースコード意味不明だけどnewLine()していないに一票
大抵これが原因
0724デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
(キリツ
0725デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
わざわざクラサバ手作りせずにJettyとCommons httpclient使っておけば簡単だし
色々使い回しも効くのに無茶しやがって・・・(AA略
0726デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
一回クローズしてから新しいインスタンス作ってないのに動くわけなかろうが
0727デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
>>720
クライアントコードの詳細がわからんので何とも言えないけれども、少なくとも
サーバー側のこのコードでは多分クライアントは動きようがないと思う。
具体的には、これでは受信する側が個々の画像のサイズを知る方法が無い。

ImageIO.writeはただ画像データのbyte[]を送るだけでそのサイズは送らない。
なので例えばImageIO.readは何処までバイトデータを読めばよいのか解らないので
「in.read的な処理」のところで次のデータが来るまでずっとお口を開けて待って
いる、そんなところだと思う。

解決策は一つは画像一つ送る度にソケットをcloseすること。
ソケットをcloseされると流石にそこで画像データは終わりだと判断して次の処理に
進むはず。一つ目の例が動くのもこの理由。

もう一つはImageIO.writeで直接ソケットのOutputStreamに出力するのではなく、
一端ByteArrayOutputStreamに画像データを出力して、ソケットのOutputStreamには
まず画像データのバイト数を送ってそれから画像のバイトデータを送る。
受ける方もまずバイト数を取得してそれから指定バイト数のバイトデータを読む。

最後の案として>>725にも書いたように特に理由がないのなら今更プロトコル手作り
せず素直に既製ライブラリが充実したHTTPを使う方法。
サーバー側が画像データと次の画像のURLの組をレスポンスとして返せば万事解決。
レスポンスのヘッダに次の画像のURLを埋め込んでも良し、マルチパートレスポンス
を使っても良し。
0728デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
で、JDK8でもFX2はまだなんかいな
まともなIBはよ作ってNBに統合してくれ
07297202013/07/16(火) NY:AN:NY.AN
用途は画面キャプチャして秒間15回〜30回くらいで動作させたいのですが
ソケット使い捨てだとandroidはGCでとまりまくりんぐ

イメージはいったん配列にしてサイズを教えてやってみようと思います

VNCでいい感じに動くやつはフリーであるのですがPC、andoird端末共にリソース消費が激しいので
自作することになりました
0730デフォルトの名無しさん2013/07/16(火) NY:AN:NY.AN
Androidでリモートデスクトップ?
07317202013/07/16(火) NY:AN:NY.AN
要件はPC起動のゲームをandroid表示でプレイ
制御はゲームパッドなので特定の座標を覗くだけの単純なものです

要件を満たす高ビットレートなVNCだと私の持ってるEVO3Dは熱で再起動するので
今回のものを作成するに至りました。
0732デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
今web上のファイルアップロードってどの言語で書いたものが安定して使われていますか?
またライブラリ等スタンダードなものがあるのでしょうか。
GWTでピンポイントに組み込みたいのですが、あまりファイルアップロードにGWTはあまり使われていないのかな?
0733デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
質問しておいてなんですが、やはりApacheのFileUploadライブラリー?
0734デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
apache commonsばかりやな。
他の選択肢あったら教えて欲しい。
0735デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
Cベースのオブジェクト指向ライク言語作ったら流行るかもしれないと思ってるんだが。
objective-CやC++じゃなく、Cコンパイラだけでコンパイルできるものを。
0736デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
Objective-Cは馴染めないな・・・Xcodeが糞なのかもしれないが・・・
0737デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
・input type="file"で選択した画像をinput type="submit"でpost
・actionに指定したServletのdoPostでデータを受け取りImageIOで書き込み
これでactionで飛ばしたServletのURLで画像が表示されるようになったのですが、
画像に直接アクセス?するのではなくページの一角として画像を表示させる方法がわからないです。
できればsubmitボタンでのページ遷移もなくしたいです。
0738デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
IFRAMEにpostすればいい
0739デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
>>738
名前付けたiframeをtargetに指定するとできました感動。
だけど保存した画像のパスが分からないと扱いづらいですね・・・
何故か保存先がワークスペースの.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/プロジェクト名/サーブレットでmkdirしたフォルダ/
になっているようです。
0740デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
>>739
画像ファイルをサーブレットが返すようにすればいい
0741デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
>>740
う〜ん?
PrintWriterで<img src=>を書けということかな?

教えてもらった方法でうまくいったけどiframeをstyle="display:none;"しておいて
formのonsubmitで$('iframeID').style.display = 'block';しても表示されない
0742デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
>>741の「表示されない」というのはiframeが表示されないという意味
0743デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
こんな感じ。
http://www.itmedia.co.jp/enterprise/articles/0408/06/news004.html
0744デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
>>743
今このようなのですがもう一つ違いがわからないです
http://ideone.com/UM3UmV
0745デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
ああ
才能が無いんだわ
0746デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
ネットワーク系初心者です
サーバーからjpegやtxtのファイルを標準出力したいんですが
どこから手をつけていいのかすらわかりません…
0747デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
標準出力の意味を調べるところから
0748デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
PHPなら簡単なのにね
0749デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>746
用途に応じて適切なプロトコルを選んで(HTTP, TCP, UDPなど)通信すればいいだけ
0750デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>Java Servlet は JavaEE の一機能

まじかよ、DLしたのJavaSEだべさ
0751デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>750
Eclipseの中にjavaEE入ってるくさい。
0752デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>751
おまえJava EEが何かわかってないだろ
0753デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
いつぞやの720です
何となく形になったのですが。あと一歩で力尽きそうです

ttp://www13.plala.or.jp/field-apl/etc.zip

内容物
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2013/07/18 9:02 madoCapHost ホスト用ソース
d---- 2013/07/18 8:54 windowCap クライアント用ソース
-a--- 2013/07/18 8:50 9292 madoCap.jar ホスト
-a--- 2013/07/18 8:52 222270 windowCap.apk クライアント

12345という順に読み込むべきところを13245のような感じにしてしまうお茶目機能をどうにかしたいので
お暇な方付き合ってください
0754デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>あと一歩で力尽きそうです

そうか。早く力尽きてくれ。なるべく早くな
0755デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
ひ  ひどいお
と言ってるそばからBitmap開放し忘れに気が付いた ナイス俺
0756デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>753
読んだ感想
・available を使うな
・read, skip の戻り値を無視するな
・スレッド間の同期を synchronized しろ
・ソケット 2 本使って無駄に複雑化する意味ある?
0757デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
感謝

availableを使うなという記事は幾度となく目の当たりにしましたが
リモートにあるファイルを送ってもらうわけではないので
書きこみ途中のデータが切れてしまいます。何か良い方法があれば・・・

ストリームを3本以上使うかもしれなかったのでとりあえず、最小の平行処理にしております
作成中の配列はスレッドセーフになっています。

ソケットが複数なのは ストリームに落としながら画像を用意するためです
画像は940x540のものをリサイズするのに60ms消費します
送信するのには60msより多く消費します。2本あることで31ms程度まで落とすことができました
3本使うと25ms程度になりますが。複雑すぎたので2本に落として今に至ります

未だ解決に至らない以下のような状態が謎すぎます ぼすけて
NY:AN:NY.AN7 GO 1
NY:AN:NY.AN7 GO 1
NY:AN:NY.AN4 GO 2
NY:AN:NY.AN6 GO 2
0758デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>リモートにあるファイルを送ってもらうわけではないので書きこみ途中のデータが切れてしまいます
イミフ
>2本あることで31ms程度まで落とすことができました
それは何かおかしい。見直せ
0759デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
> 書きこみ途中のデータが切れてしまいます。何か良い方法があれば・・・

read に渡す length は最大値であって、必ずしもそのバイト数読み込むわけではない
read は 1 バイト以上 length バイト以下のデータを読み込み、実際に読み込めたバイト数を返すのが仕様
必要なだけ読み込めるまで呼び出し側でループする必要がある
skip も同様

> 作成中の配列はスレッドセーフになっています。

またまた御冗談を

> ソケットが複数なのは ストリームに落としながら画像を用意するためです

1 本のソケットでも、応答を待たずにひとつ次の画像を流しておけばいいのでは
2 枚目の画像を流してから 1 枚目の応答を待つ
3 枚目の画像を流してから 2 枚目の応答を待つ
とか
07607592013/07/18(木) NY:AN:NY.AN
>> 作成中の配列はスレッドセーフになっています。
> またまた御冗談を

訂正。
作成中の配列は確かにスレッドセーフ。
しかし作成中だけ保護すればいいわけではない。
しかしソケット 1 本化すれば自動的に解消するからわりとどうでもいい。
0761デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
720です
■画像読み込み中 □空白 ◆書き込み中 ◇画像配列にしてるなう

1番■◇◇◆◆■◇◇◆◆■◇◇◆◆■
2番□■◇◇◆◆■◇◇◆◆■◇◇◆◆

3番があると
1番■◇◇◆◆■◇◇◆◆■◇◇◆◆■
2番□■◇◇◆◆■◇◇◆◆■◇◇◆◆
3番□□■◇◇◆◆■◇◇◆◆■◇◇◆

ホスト側から見たらこんな感じになる予定?です
クライアント側は
■画像配列読み込み中 ◇配列を画像にしてる中 ◆画像をVIEWに表示してるnow □空白

■■◇■■◇■■◇■■◇■■◇■■
□□□◆◆◆◆◇◆◆◇◆◆◇◆◆◇
0762デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>1 本のソケットでも、応答を待たずにひとつ次の画像を流しておけばいいのでは
これやってませんでした。思考停止してる
ほんとありがとう
0763デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
セマフォ使いなよ
0764デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
せまふぉは1.5のときだったか。師匠が重とかなんとか得意げに言っていたので
つかったことなすORZ 同期よりいかに平行処理させるかを追求する人でした(遠い目

今はストリーム1本で762ちまちまやってます
見た目上の読み込みはうまくいってるんだけど
decoder->decode returned false
length=524288; regionStart=0; regionLength=1042778344

これとたたかってます
0765デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
目的にもよるけど、今やるべきことの裏でフル稼働するプログラムに気配りできる余裕は自分には無いな
ほとんど寝てるようなスレッドはある意味ありがたいし、よほどシンプルなプログラムでない限りそういうスレッドが存在してるもの
0766デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
セマフォとか言い出す奴はたいていジジイ
0767デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
ttp://ameblo.jp/orangeapple1/entry-10900358898.html
こんなの見つけたけど結局違うようだった・・

フル稼働時。きっちりCPU100%になるよう組める奴は日本に何人いるのだろう
androidのGCが2世代管理してくれたら今こんなに苦労してないのに;;
0768デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>767
> フル稼働時。きっちりCPU100%になるよう

そんなことに意味あんの?
0769デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
君のそれは原状からの逃げだろう
大げさに言うと50%で頭打ちのマシン4台が2台になる計算
0770デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
gcに想いを託すのはとんでもないな(笑)。
いかにgcとは無縁の世界でプログラミングするかがむしろ重要で、gcに意識が言った時点でもはや何も言うまい状態
しまいにはnull代入なんていう恩をあざで返しちゃう始末・・・
0771ピラフ2013/07/18(木) NY:AN:NY.AN
論理演算について教えてください。
boolean型の変数aと
boolean型の変数bがあったとして。
(a && b) || (!a && !b)
という評価をしたいです。この式をより簡単な式で表すことはできますか?
できるようならその式を教えてください。お願いします。
0772デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
CPUに余裕があることが許せない人っているよネー(*´・д・)(・∀・`。)
ましてやその矛先がレンタルサーバだったりするよネー(*´・д・)(・∀・`。)
ヤダヤダ(*´・д・)(・∀・`。)ネー
0773デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
ド・モルガン(1966年
0774デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>771
それJavaとなんか関係あんの?
0775デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
XORの質問?
0776デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
!(a ^ b)
0777デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
こいつの場合、答えを知ってて釣り質問してる疑惑があるから答えたくないんだよなー
0778ピラフ2013/07/18(木) NY:AN:NY.AN
>>774
Javaには論理演算があります。それを聞いています。

>>775
論理式の質問です。

>>776
ありがとうございます。試してみます。
0779デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>771
a == b
0780デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>778
booleanのaとbしか登場しないんだから、4通りの組み合わせの演算結果見れば、
どう書き直せるか一目瞭然だろ。
0781デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
!(a != b)
0782デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
(a != !b)
0783デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>779
しーっ!
0784ピラフ2013/07/18(木) NY:AN:NY.AN
>>779
そーかー。それでいーのかー。ありがとうございました。

>>780
黙れ。わからなかったから聞いたんだ。
0785デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>779
boolean値比較のxorの存在意義
0786デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>782
人差し指立ててる顔文字に見えてきた

(a != !b)<ヒント!
0787デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
(new Boolean(a).equals(new Boolean(b)) === true)
0788デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>779
一番シンプルだね
というかこれが正解だね
0789デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
Boolean.TRUE.equas(new Boolean(new Boolean(a).equals(new Boolean(b))))
0790デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>771
(a & b) | (!a & !b)
0791デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
(a == b) || (!a == !b)
0792デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
特定の画像で必ず落ちるということが発覚するも回避策がnativeに依存しそう
結局decoder->decode returned false で心折れた

ソース一緒に見てくれた方  感謝!感謝!
0793デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>788
分岐を使ってはいけない分野では>>776が常識
0794デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
((a === true) && (b !== false)) || ((a !== true) && (b === false))
0795デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
776が必死
0796デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
一般的な論理演算の質問なら>>779が正解だけど
質問者がJavaの論理演算の話と意固地に主張しているからには
>>790が適切な回答だろ?
0797ピラフ2013/07/18(木) NY:AN:NY.AN
>>796
ピラフは>>779の書き方にしたよ。
どれが適切かは人それぞれということでいいんじゃないでしょうか。
0798デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>796
790はビット演算だろ
論理演算と言ったらboolean(真理値)の演算を指すのでは

>>797
「どれが適切か」は確かに場合に依るけど、
一般的には読み易さを損なわない範囲で演算回数を減らすのが適切でしょう
07997982013/07/18(木) NY:AN:NY.AN
と言うか790が適切ってのはよくわからない
(a & b) | (!a & !b) と書きたければ ~(a ^ b) と書くのでは
0800デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>798
Java の &, |, ^ 演算子は、両辺が boolean なら boolean を返すよ。
新人の書いた
if (str == null | str.length() == 0) ...
が実行時エラーになっててあせった。
08017982013/07/18(木) NY:AN:NY.AN
>>800
返すのは知ってるけど、&&, || があるのに &, | を論理演算に使うのは不自然ではないか?
単に俺がC言語出身者だからか?
0802デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>801
いや プライドがあるんだろうねぇ

どう書こうと、内部的には
false 0
true 1
のint を返してるんだけどねぇ(わらい)
0803デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>801
むしろこの文脈で論理演算&|の代わりに
条件付き論理演算を使う意味がわからない
Cとは&|の意味が言語仕様で違うんだから
0804デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
どう記述しようと 内部的には同じになるのに わざわざ見ずらい書き方をする人は......バカですか?
0805デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>799
booleanはnumeric typeじゃないから ~ は不自然
booleanをそのまま扱うえる ! & | ^ && ||で済ますのが自然
0806デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
Operators (The Java? Tutorials > Learning the Java Language > Language Basics)
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

bitwise AND &
bitwise exclusive OR ^
bitwise inclusive OR |
logical AND &&
logical OR ||
0807デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
Assignment, Arithmetic, and Unary Operators (The Java? Tutorials > Learning the Java Language > Language Basics)
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html

! Logical complement operator;
inverts the value of a boolean
0808デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
~ ^ & | はビット演算に使いましょう

boolean演算には && ! || == != を使いましょう
0809デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
嘘乙
0810デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>809
boolean intで処理してるのに なにかっこつけてるの?
0811デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
アンカはなしで
0812デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
チュートリアルを無視するとはいい度胸だな
0813デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>803
> 条件付き論理演算を使う意味がわからない
その意味がわからない
0814デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>813
論理演算をしたいのに
どうしてboolean logical operator &でなく
conditional-And operator &&を使うの?
0815デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>808
言語仕様を無視するとはいい度胸だね
15.15.5 Bitwise Complement Operator ~
15.15.6 Logical Complement Operator !
15.22.2 Boolean Logical Operators &, ^, and |
15.23 Conditional-And Operator &&

この辺を読み直した方がいい
0816デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>806は??
0817デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>816
C上がりの人が妄想で書いたんでしょ
&&がlogical ANDなんて、ウソも甚だしい
0818デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
妄想の嘘のチュートリアルを書いたオラクルに通報すべきだね
0819デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
Chapter?15.?Expressions
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22

Chapter?15.?Expressions
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22.2

Chapter?15.?Expressions
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.23
0820デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
半角板じゃないんだから何か言えよ
0821デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
&&は&に似ているが、&と違い&&は左側の引数の評価がtrueのときのみ右側の引数を評価する
0822デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
そんなこと書かなくても821以外は理解してるのに
0823デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
boolean a = false;
if (true || (a = true)); System.out.println(a);
if (true | (a = true)); System.out.println(a);

boolean b = false;
if (false && (b = true)); System.out.println(b);
if (false & (b = true)); System.out.println(b);
0824デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
>>822
このスレにはガチの初心者はいなかったってことだな、安心した。
0825デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
(^q^)
0826デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
&は論理andで&&が特殊な論理andなのは間違いない。
だけどJAVAドカタとCジジイにその二つを
区別することなんか不可能。
だからよく使う&& ||に統一しておくのが無難。
ドカタに言語仕様を説教しても無意味だからね。
0827デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
Javaドカの世界では
hoge.isEnabled() && hoge.move() のようなコードは
「可読性と保守性を損なう」としてレビューで叩かれるので
一時変数への代入とifを使います
なのでショートサーキットは気にする必要がないのです
0828デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
そらhogeは駄目だろ
0829デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
初心者で理解が足りない奴や勘違いしてる奴がいたら>>823のような&&と&の区別のついてないコードとか危ない
0830デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
(^q^)
0831デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
if (obj == null || obj.isEmpty()) なんかはわりとよくある便利なパターンだが
ドカタには難しいらしいので結局使えないんだよね
0832デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
ショートサーキットって何?
0833デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>823
ifを置く意味が分からんのだが
0834デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>832
素直に考えたら>>831はobjがnullのときobj.isEmpty()でぬるぽ例外が発生しそうだろ?
でも実際はobj==nullがtrueの時点で式全体がtrueと確定するので
obj.isEmpty()は実行されず、エラーは発生しない
そういう動作のことをショートサーキットという
Javaでは||と&&がショートサーキット演算子
0835デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
だれもショートサーキットの概念を
聞いているわけではない
用語を訊いているだけなのにアスペ乙>>834
0836デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
こないだhogeってふざけた変数ホントに見かけたから、var1に直しといてやったぜ(キリッ
0837デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>834
�d
0838デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>814
寧ろ論理演算をしたいのにどうして bitwise operator を使いたがるのか理解できない
可読性を損ねるだけだと思うのだが
0839デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
短絡評価はあまり好きじゃないな
・パフォーマンス向上のために短絡評価を使っている(&や|に置換可能)
・評価の順番を制御するために使っている(左辺が真ならそこで評価をやめないとエラー>>831)

書き手の意図が二通りに解釈できるから、後からコードを修正する際にバグを混入させやすくなる
0840デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
短絡評価 - Wikipedia
http://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1

CとJava同じじゃん
0841デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
(^q^)
0842デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
何にしても可読性を重視すべきだね
わざわざ簡潔(わかりずらい)なコードを書いて自画自賛してる人もいるが、
簡潔に書けば高速コードにコンパイルされるとは限らないし
逆に鈍速コードになることもある
0843デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>838
Boolean Logical Operatorsであると
言語仕様の章番号まで上で出てるのに
どうしてそこまでbitwiseだと思いこみたいのか
理解に苦しむ
0844デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
ひらがなで躓いている君に教わることなど無い
0845デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>844
>>躓
こんな普段使わないし手書きで書けないような漢字を使うのは
bit wise なのか? ウンチク屋 なのか? ウマシカなのか? www
0846デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
じゃあいこうかんじきんしで
0847デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
評価順序に関してはCとJavaには何ら違いは無い。
Cにおいては&, |は専らbitwise演算に用いられるものであり、boolean演算には&&, ||が用いられる。
(そもそもCにおいては0以外は全て真として扱われるため&, |をboolean演算として使うことはできない)
俺はJavaにおいてもその使い分けに従うのが良いと思うのだがね。
日常的に複数の言語を使う人はその方が混乱が無くて良い。
0848デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
似たような“文化上”の論争が、Python と Perl の比較においてあったような覚えがある。
0849デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
可読性を追求するか、簡潔な記述性を追求するか。

前者は、再利用可能性とも関わるので、Java の文化はどちらかというと、前者寄りなイメージがある。
0850デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>819にあるように仕様上は& | でもlogical operatorとして使うことはできるけど
>>806-807のチュートリアルにあるようにoracleとしては& | をlogical operatorとして使うことは推奨してない
ってことじゃねえの?
0851デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>Javaにおいてもその使い分けに従うのが良いと思うのだがね。
>日常的に複数の言語を使う人はその方が混乱が無く

他人に論理andよりconditional-andを使えという理由が
「俺が他の言語と混同して間違えるから」なのか

>>849
& |なら可読性も簡潔性も&&||より上だね!
0852デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>851
> 他人に論理andよりconditional-andを使えという理由が
> 「俺が他の言語と混同して間違えるから」なのか
いや、ある種の「慣例」に従えということかと。
基本的にOracleとしてもlogical演算は&&, ||を推奨しているようだしな。

> & |なら可読性も簡潔性も&&||より上だね!
何故?
まるで意味の違うlogical演算とbitwise演算に同じ演算子を使うのは可読性が高いとでも?
0853デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
&&, || と &, | のどちらを使っても構わない状況において、
&&, || を積極的に推す理由はあっても、&, | を積極的に推す理由って無くない?
0854デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
他言語などでは仕様では古いバージョンとの互換性のために残してあって使える機能などあったりするし
仕様上で出来るからそれを使えってのは違うと思うんだが
0855デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
APIドキュメントで非推奨のクラスでも仕様上使えるんだから積極的に使うのが当然と主張しているようなもの
0856デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
チュートリアルに無いから非推奨って頭おかしいんじゃね?アホなの?バカなの?死ぬの?
0857デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>853
>>&&, || を積極的に推す理由はあっても、&
>>, | を積極的に推す理由って無くない?
同意します
上の方は考えなくてもわかる
0858デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>Oracleとしてもlogical演算は&&, ||を推奨している
いえ、&&はlogical-ANDではないので、
そのような言語仕様に反する誤ったドキュメントを真に受けないでください

>| を積極的に推す理由って無くない
ショートサーキットという余計な機能の無い、
単なる論理演算という素直な書き方ですよ?
0859デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
「余計な機能」があったところで可読性を損ねる訳でなし、
寧ろ高速化に寄与するんだから「余計な機能」があって良かろう
0860デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
式によるけど、条件分岐はハザードで
むしろ遅いのだが
0861デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
可読性うんぬんなら
プロジェクト内でコーディング規則を定めればいいだけじゃねの
0862デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
a & b
a && b
後者が前者より可読性を損ねていないとか
どこに目付けてんの?

機能とか可読性とか性能以前に
「論理演算をしたいから論理演算の為の演算子を使う」
って発想が無いことに驚き
0863デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
if (A && B && C && D) { ... }
→ if (A) { if (B) { if (C) { if (D) { ... } } } }

if (A & B & C & D) { ... }
→ if (((A & B) & C) & D) { .... }
0864デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
if (A && B && C && D) { ... }
→ if (A) { if (B) { if (C) { if (D) { ... } } } }

if (A & B & C & D) { ... }
→ if (((A & B) & C) & D) { .... }

CやDがbooleanを返す関数で重い処理の場合、後者のほうがパフォーマンスが悪い
A〜Dが全てboolean型の変数なら、前者のほうがパフォーマンスが悪い
0865デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>862
&& が論理演算のための演算子でないとでも?
Cには論理演算のための演算子は存在しないとでも?
0866デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
条件演算子は言うまでも無いが、
短絡演算子は演算子に見せかけた制御構文なんだよ。

func1() && func2() // <- func2()は実行されないこともある

こんなもんはJavaに限らず、主流の言語じゃバグに繋がるだけだ。

実際には慣習にならって boolA & boolB なんてコードは書かないが、
やっぱり素直な仕組みじゃねえよ。
0867デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
if (A && B && C) { ... }
なんてことややめて

if (A) if (B) if (C) { ... }
と書けばよい
0868デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>866
>>840のwikipediaの感じだと主流の言語で&&は短絡評価だから関係なくね?
0869デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
if (A && B && C) { f(); } else { g(); }
↓
if (A) if (B) if (C) { f(); } else { g(); } else { g(); } else { g(); }

ワーオわかりやすいね!
0870デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>869
if (A && B && C) { f(); } else { g(); }
↓
if (A) { if (B) if (C) { f() } } else { g(); }
0871デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
用途によりけりなのに一元的に語るのが悪い
0872デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
わかりにくい記述をするアホウがいるからだろ
バイトコードではintで処理されてるのに...(阿呆まるだし)
0873ピラフ2013/07/19(金) NY:AN:NY.AN
>>870
それは処理が変わってるっすよ。

if (A && B && C) { f(); } else { g(); }
はAがfalseであるか、またはBがfalseであるか、またはCがfalseであるときにgを呼ぶ。

if (A) { if (B) if (C) { f() } } else { g(); }
はAがfalseであるときにgを呼ぶ。
0874デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
コーディング規則で記述ルール決めりゃいいだろ

何の議論してんだよおまえら
0875デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
if (A && B && C) { ... }

↓

boolean hangei(boolean A, boolean B, boolean C){
0876デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
みんな、「bool型変数」の話だったのを忘れてるようだな

>>771
> boolean型の変数aと
> boolean型の変数bがあったとして。
0877デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>864
0878デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
(a == b)
 aとbの同値比較の計算(==)

!(a ^ b)
 aとbの排他論理和を計算(a ^ b)→結果の否定を計算(!)

(a & b) | (!a & !b)
 aとbの論理積を計算(a & b)→aの否定を計算(!a)→bの否定を計算(!b)→!aと!bの論理積の計算(!a & !b)→それぞれの結果の論理和を計算(|)
0879デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>878
!(a ^ b)
(a & b) | (!a & !b)
こんな記述に可読性があると思うのか?
あると思うなら上司としては失格者
0880デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
==はlogical operatorではありません
0881デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
誰か可読性が高いと言った奴いたか?
0882デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
(a == b) と (a & b) | (!a & !b) には読み手に与える印象は異なる

前者は単にaとbが同値であればという意味合いしか持たず、a,bの値が何であるかという関心が含まれない

後者はa,bがともにtrue、あるいはa,bがともにfalseのとき、という印象があり、a,bの値に関心がある式になる

!(a ^ b) は論外、何の処理をしてるのかパっと見で分かる者はまずいない
0883デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
タイプ量、可読性、実行速度、どれをとっても(a == b)の圧勝
0884デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
>>883
賛成
コンパイル後のコードを見ればいいのにね
0885デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
いいのいいの。このスレは初心者が回答の練習するスレだから
0886デフォルトの名無しさん2013/07/19(金) NY:AN:NY.AN
このスレに初心者などいない!安心して質問したまえ
0887デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
ばぶー
0888デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
イクラちゃんかよ
0889デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
ハーイ
0890デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
オヨネコぶーにゃんかよ
0891デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
>>866
遅延評価言語に謝れ
0892デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
>>866
君は理解が浅い
0893デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
思想の問題だと思うが
これを浅いと言い切る>>892は
馬鹿に違いない
0894デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
はじめてパッケージを使ってみたんですけど
頭にパッケージ宣言をつけるだけでメインクラスが実行できなくなってしまいました

最終的には
.\Main.java から test パッケージの .\test\Test.java
を使いたいんですけど

とりあえず test パッケージ内のサブディレクトリ内にはいって
コンパイルして実行しようとすると NoClassDefFoundErrorがでます
0895デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
再インストールしてください
0896デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
C:\何とかかんとか\text>cd ..
C:\何とかかんとか>java Main

これでおk
0897デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>896
それでは動くんですが
パッケージ内ディレクトリでデバッグしたくて動かしたいんですけど方法はありませんか?

test/Test.java
---------------------------------
package test;
public class Test {
public void test() { System.out.println("Hello World!");
public static void main(String[] args) { test(); }
}
---------------------------------

Main.java:
---------------------------------
import test.*;
public class Main {
public static void main(String[] args) { (new Test()).test(); }
}
---------------------------------

こんな感じにかいてみたんですが Main クラスからよべば動いてるみたいなんですが
test ディレクトリにはいって
> java Test
を実行しても動くようにするにはどうしたらいいんでしょうか?
Test.java のパッケージ宣言を消すと普通に動くんですが…
0898デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
C:\何とかかんとか>java text.Main

うごかなかったらごめん
0899デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
みすった
>>C:\何とかかんとか>java text.Main
C:\何とかかんとか>java text.Test
0900デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
だめみたいです><
NoClassDefError がでます…
0901デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
java -cp (Main.javaを置いているディレクトリをフルパスで) Test
0902デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
おおおおお
動きました!
ありがとうございました!
0903デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
たびたびすいません
test/img/test.png
みたいにサブディレクトリにデータファイルをおいて相対パスで呼び出したいんですけど
さっきみたいにどっちのディレクトリから実行しても動くようにするにはどうしたらいいんでしょうか

test/Test.java
---------------------------------
package test;
public class Test {
public void test() { ImageIO.read(new File("img\test.png")); }
public static void main(String[] args) { test(); }
}
---------------------------------

Main.java:
---------------------------------
import test.*;
public class Main {
public static void main(String[] args) { (new Test()).test(); }
}
---------------------------------

ってかくとサブディレクトリで実行した場合は動くんですが
メインから実行した場合に .\img\ の中をみにいってしまいます…
0904デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>903
おい、ちょっとは自分の頭で考えろよ。
0905デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
うぅ… すみません…
ディレクトリ沸けるプログラムはじめてかいたので…

今回は別に自分だけが動かすトイプログラムなので絶対パスでうめこめばすむ話なんですけど
パッケージは配布したりすると当然おく場所はかわるものだから相対パスで動かす方法をおぼえたくて
よく考えたら実行中に実行してるカレントディレクトリはとれるんですけど
どこにおかれるかわからないパッケージのクラスファイルが取得できるはずないですよね…
0906デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
SetCurrentDirectory というのはjavaにはないのだよ
0907デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
SWT WIN32 EXTENSION
これでできるけどnativeがWindowsのみ対応になってる
0908デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>903
そのプログラムをEclipseのRunで実行したら
カレントディレクトリはデフォルトでプロジェクトディレクトリなので
MainとTestのいずれを実行してもimg\test.pngを見つけてくれるぞ。
0909デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>907
環境依存な方法じゃないとできないものなんですね…

>>908
eclipse じゃなくて
コマンドライン実行なんですけど
挙動が違うんですか…


調べてみると Class.getResource() っていうのを使えばできそうみたいなんですが
うまくいかなくていろいろ試行錯誤中です><
0910デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
うーん…
パッケージ配布したときにどこからインポートされてどこから実行されるか分からないけど
パッケージ内のクラスからパッケージ内データファイルにアクセスできないってことはないと思うんですけど…
やり方がわからない…
0911デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>909
getResource使えばできるけどその程度のテストでわざわざ余分なコードを書くくらいなら
linuxならカレントディレクトリ変えてjavaを実行するスクリプト書いた方が楽だし。
Windowsなら統合環境入れた方がラクダよ。
0912デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
javaの場合スクリプトよりantの方が相性いいかな?
0913デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>911
それ言い出せばそもそもパッケージわけずに2つ同じフォルダにおいちゃえばいいだけなんですけど…
今回 Test 側のパッケージだけ将来使いまわすかもしれないので
パッケージの書き方の勉強もかねてディレクトリわけるプログラムのかき方覚えようと思っただけなんです…
0914デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
Swing の JAVA で GUI のソフトを作成しています。
ウィンドウを2つ表示しているのですが、ボタンを押したときに片方のウィンドウをアクティブ化(ウィンドウをクリックした時のように)したいです。
「ボタンを押したとき」というイベントは分かるのですが、アクティブ化が分かりません。
分かる方、よろしくお願いします。
0915デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
Eclipse使ってる限り、そういう状況はほとんどないぞ。
ちょっと違うがアプリケーションが実行されたパスが欲しいときは以下を使うんだ。
public String getProgramLocation(Class c)throws Exception{
URL url = c.getResource(c.getSimpleName()+".class");
if(url==null){
String path=c.getPackage().toString().replace('.', '/')+"/"+c.getSimpleName()+".java";
System.err.println("path="+path);
url = c.getResource(path);
}
if(!url.getProtocol().equals("file")){
throw new Exception("no such url"+url);
}
int firstSlash=url.toString().indexOf("/");
int exclamation=url.toString().lastIndexOf("!");
String ret=null;
if(exclamation!=-1){
String jarfileName = url.toString().substring(firstSlash, exclamation);
ret = new java.io.File(jarfileName).getParent();
}else{
int ccc=url.toString().lastIndexOf("classes");//jbuilder default;
if(ccc==-1)ccc=url.toString().lastIndexOf("bin");//eclipse default
if(ccc!=-1){
ret=url.toString().substring(firstSlash,ccc-1);
}else{
throw new Exception("not found class folder");
}
}
return ret;
}
0916デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>914 toFront()だと思った。
0917デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
出来るけど、そのためにはまずJavaプロジェクトの標準的なファイル配置から学んだ方が良い。
この例の場合、簡単な配置だとこんな感じ。

src/Main.java
src/test/Test.java
resources/test/img.jpg

普通はJavaソースはsrc配下に、それ以外のリソースファイルはrecources以下に入れる。
それ以外の配置をされても他の人が混乱するので我流は止める。
さらにMaven風にするのならこんな感じ。個人的にはこちらがお薦め。

src/main/java/Main.java
src/main/java/test/Test.java
src/main/resources/test/img.jpg

ImageIoにはFileではなくthis.getClass().getResourceAsStream("test/img/img.jpg")を
使う。getResourceAsStreamはクラスパスからファイルを読む。そしてJar等のパッケージ
に固められている場合はこれを使わないとパッケージ内のファイルは取得できない。

最後にjavaの実行時に-cpでresourceディレクトリもクラスパスに指定すればOK。
ただこの辺りになるとjavaやjavacのコマンドラインオプションが煩雑になるのでEclipse
を使うかMavenを使った方が楽。
0918デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
うーん…
ただディレクトリわけるだけでこんな大変なんですね;;…

(new Test()).getClass().getResource("img/test.png)
も ./img/ をみにいってて test/img/ をみにいってくれないし…

パッケージ内のクラスからパッケージフォルダ内のファイルに相対パスアクセスしたいだけなんですけど
今日はあきらめます><
相談にのっていただいてありがとうございました
0919デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
いやだから統合環境使えば何も考えなくてもできるんだってw
0920デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
なんかレスしてもらってたみたいでありがとうございます

>>915
どちらかというとアプリを実行されたパスを知らずにデータにアクセスしたい…
毎回そのパスをプログラム側で取得しないとダメなんでしょうか…

>>917
なるほど
参考になります

いわれてみると jar で配布されてる java の追加ライブラリって長い階層構造になってるの多いですね…

> -cpでresourceディレクトリもクラスパスに指定すればOK。
ということはパッケージ内でしか使わないリソースでも
メインから見た階層の中に位置付けてアクセスしないといけないってことなんですね

隠蔽する必要まではないにしても他のパッケージからみえても仕方ないリソースファイルが
パッケージ内で完結できないってちょっと不便な気もしますけど…
09219142013/07/21(日) NY:AN:NY.AN
>>916
できました。
ありがとうございます。
0922デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>917
ごめんなさい
自分の勘違いでした!
getResource を使って思ったとおり相対パス指定で動きました!!!

他の方もいろいろ教えていただいてありがとうございました!
0923デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>920
> ということはパッケージ内でしか使わないリソースでも
> メインから見た階層の中に位置付けてアクセスしないといけないってことなんですね

そうゆうこと。Javaのパッケージは良いところ名前空間程度の意味合いしかない。
そしてパッケージの相対パス指定は出来ない。必ずルート(デフォルトパッケージ)
からの絶対パスで指定する必要がある。

例えばTestパッケージに必要なファイルをひとまとめにして再利用したい場合などは
パッケージではなくモジュールなどと呼ばれる別の階層の仕組みが必要になる。
ビルド環境としてはMavenがモジュールの考え方を持っている。
0924デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
あ、ごめん、間違えた。相対パスも行けるね。

あと将来を考えるとgetResourceではなくgetResourceAsStreamで動くようにして
おいた方が良いよ。画像も含めたJar等に固めて配布する場合はこちらしか動か
ないので。
0925デフォルトの名無しさん2013/07/21(日) NY:AN:NY.AN
>>914
窓A,BがあってAを押したらBをアクティブにするってこと?
一つのmainから派生した窓なら簡単にできるけど
それぞれ別プロセスだとめんどいよ
0926デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
ストップウォッチのプログラムを作ったのですが
60秒を超えると61、62のように増えていくのですが
それを01.59.23みたいに分表示?みたいな感じにしたいときには
どうすればいいのでしょうか?
よろしくお願いします。
0927デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
60 で割る
hour = second / 3600
minute = second % 3600 / 60
second = second % 60
0928デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
>>927
回答ありがとうございます。
codepad.org/LhJnfuLJ  忍法長のレベルで貼れないので前にhttpをお願いします
このようなプログラムなのですがどこに入れればいいですか?
質問ばかりで申し訳ないです。
0929デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
Thread.sleep(10); を Thread.sleep(1000); にすればいいと思うよ
0930デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
>>928
問題ありすぎ

sleepメソッドで時間計るな 開始時刻と現在時刻の差を計算しろ
ボタンのリスナーは分けて匿名クラスにしろ
clockThreadも匿名クラスに
わざわざ別クラスにmainメソッドを書く必要ない
0931デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
ななめ上の回答だけど
SimpleDateFormatで
"HH:mm:ss.SSS"
これじゃだめ?w
http://park.geocities.jp/gdfsm000/java/java12.html
0932デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
馬鹿は黙っててくださいね^^
0933デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
>定説に異論を唱え、議論を挑む姿勢
は評価してもよいのではなかろうか
0934デフォルトの名無しさん2013/07/22(月) NY:AN:NY.AN
>>931
それ経過時間じゃなくて現在時刻じゃん
0935デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>930
ふうん。すごいね(棒)。ネット知識(笑)?
0936デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>934
ループさせたら表示は動く
実際止めたときは開始した時間から止めた時の時間差し引いてフォーマットすれば
ストップウォッチとしては成り立つ

>>930は正しい。だがまだ敷居高いから後で読み返すとよいかも
0937デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>963
えっと、それでもまだ鏡像ポテンシャルは記述しきれてないよね
0938デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
long baseTime;

に計測開始時点でSystem.currentTimeMillis()を代入して、

long nowTime = System.currentTimeMillis(); との差で測ればいいんでないの?

if(nowTime - baseTime >= 1000) {

// 計測開始から1秒以上たっていたらする処理
....
....
baseTime = nowTime;

}

で、より精度上げるにはこれを元に考えていけばいいんじゃないかな。
ちなみに精度を上げるためにSystem.nanoTime()を使うのはもしかすると情弱だと思われるかもしれないので注意。
0939デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
馬鹿は黙っててくださいね^^
0940デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
情弱な私のためにSystem.nanoTime()を使うとどうして情弱と思われるのか教えてください
0941デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
ちなみに世界最先端を行っている俺はいままでずーと沈黙を保っていた。
0942デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
そんな時代もあったことかと思いますが
...
0943デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
これだけの書き込みでまたずーとROMる。まるで宇宙人がアリンコみたいな人間を見ているようだ。
0944デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
こんだけNTP普及してる時代なのに
いーかげんカレンダ暦使ってインターバル計るのやめれ。
0945デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>944
ネットに繋がってないと使えないじゃん
0946デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>945
NTP使えって意味じゃないと思う
0947デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
そもそも「カレンダ暦」が意味不明
0948デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
普通に言わんとする意味は解るけど。
0949デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
NTPはネットワーク遅延あるから精度を要求するインターバル測定用途じゃ使いものにならないじゃん
0950デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>949

>>946
0951デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>950
じゃ、どういう意味なのか言わないとわからないんだけど。
0952デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
カレンダ時計というかリアルタイムクロックというか要するに年月日時分秒基準で表現されている時刻 (System.currentTimeMillis() など) は
いつ何どきバックグラウンドでNTPが動いて勝手に時計動かしちゃうかわからないから計時には適さない
ってことじゃないの?
0953デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
Javaはパフォーマンスカウンタから取れないの?
0954デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>952
あー、なるほどね。
だとすると、どういう時間計測がいいんだろうか?
0955デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
nanoTimeはそのためにある。
0956デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
でも>>938によるとSystem.nanoTime()を使うと情弱らしいよ?
0957デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
理由が 「精度を上げるため」 だからでは?
本当の理由は 「カレンダ変更の影響を受けないため」 だから
コイツわかってないなと思われる可能性はある
0958デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
javaの基本は一年かけてマスターしたんですが、いざ実戦的なプログラム書こうとすると、全然できません。
お勧めの参考書や練習法はありませんか?
0959デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
1年もやってできないならもう方法はありません
0960デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
javaEE7にwebsocketが含まれたとのことでSDKをダウンロードしてみたのですが、
jreにパスを通してwebsocket関係をimportしようとしてもライブラリが見当たりません。
javax.websocket..はどこにありますか?
0961デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>958
A.土方に徹する。
B.分析設計を勉強する。

好きな方を選べ。
0962デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>958
実はマスターしたというのは気のせいでは
どんな教科書を使ったのか知らないけれど、例えばその教科書に載っている例題のプログラムと同様のものは自力で書けますか
0963デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
何をもって「実践的」とするのかがまずわからん
0964デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
GUIアプリとかか?
少し上の方で話題になってるストップウォッチを誰かのコードパクらないで書いてみれ
0965デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
javaの基本は一年かけてマスターしたんですが = 文法を覚えて、標準APIの使い方がわかる
という意味でとらえてみた場合

Windowsについてくるメモ帳と同等のものを書く
書けそうなものから徐々にレベルアップしていく感じでどうだろう
javaばっかりいじって5年の選手だってjavaの全部は知らないと思う。し知らなくてもどうにかなる
0966デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
GUIアプリよかDBの扱いを伴うウェプアプリとかのほうが良いと思う。
0967デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
GUIアプリ作りたいならJavaを選ぶべきじゃないよね
情報も少ないし
0968デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
実務的に考えるとDBつかうサーバサイドに同意
GUIやるならVSで書けるC系がおぬぬめ
0969デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
だが土方なら最初は細かい仕様をコードへ翻訳する単純作業だから
実践的なアプリが作れないとはまずならないだろうし
先輩に聞いたりもできるだろうし
>>958みたいなことを聞くってことは趣味か?
そうならJavaはAndroid(正確にはJavaではない)くらいしか使い道がないからやめとけ
Webならスクリプト、GUIならC#かC++
0970デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>958です。
皆さんアドバイスありがとうございます。
これを参考にもう少し頑張ってみます。
0971デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
web+DBって仕事自体がドカタ
これより簡単な仕事ないだろw
0972デフォルトの名無しさん2013/07/23(火) NY:AN:NY.AN
>>960
含まれている ≠ importすれば使える

せめてフォルダ内くらい全探索しろ
0973デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
駄目元で聞くけど、チャットやウェブappでセッション管理するとき
どのクラスでラップするのが定席なの?HashSet?
自作クラスなら何を根底に考えて作るのか教えて欲しい
0974デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>>973
ConcurrentHashMap
0975デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
あとそういうのをラップとはいわない。
0976デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>セッション管理するときどのクラスでラップするのが定席なの?

何をラップしたいのか、日本語でお願いします
0977デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
下手なブロック処理書くよか、何も考えずにコンカレントでだいたいうまくいく

スレッドプールつかったキュー方式ならソースいじらずにチューニングできたりするし
置き去りスレッド問題にも効果は大きい。ただしワークスレッドの書き方がダサいとリソースががが
0978デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
http://docs.oracle.com/javase/jp/6/api/java/util/concurrent/ThreadPoolExecutor.html
プール自作しないように念のため貼っておく
ワークスレッドの上限とか同時並行数とかいろいろ考えると楽しくなるよ
0979デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>何も考えずにコンカレントでだいたいうまくいく
んなこたーない
0980デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>>979このまえSocket指南してくれたかたかな?

>>んなこたーない
ごもっともです
メソッドの頭にシンクロで何個もロックかけちゃったり
よくわからずにロックかけちゃった的なソースを多々みてきたので
とりあえずコンカレントしてからロック考えてくれ的な意味合いでした><
0981デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
あ
0982デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
並列の怖さは高確率でたまたま問題なく動いてしまうこと
後で地獄を見るんだよね
0983デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
javaドカタですから
0984デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
うめ
0985デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
コンカレントというか、なんでもかんでもスレッドセーフにしようとするのはアホ
本当にコンカレントに使う場合は、スレッドセーフなクラスを使ってたとしても
結局は利用する側で改めて排他制御を行う必要がある場合が多いしな
0986デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
どんな場合だよ
0987デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
文字コードを指定してテキストファイルのすべてのテキストをできるだけ
速く読み込みたいのですが、どのように実装すればいいのでしょうか。教えてください。
0988デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
StreamReaderを使う
土方や素人がオレオレ実装するより遥かに速い
0989デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>>988
InputStreamReaderだと配列で読み込みますか?
どうやって全部読み込めばいいのでしょうか。教えてください。
0990デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
調べる気ゼロ
0991デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>>990
自己解決しました。もういいです。
0992デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
いえいえどういたしまして
0993デフォルトの名無しさん2013/07/24(水) NY:AN:NY.AN
>>990
>>992
こいつはインドリです。
0994デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
>>986=低脳
0995デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
いや、おそらく物の見え方が各位違うんだろ
>>985は既存のソースに追加実装するときのことを言っていて
>>986は新規実相のことを指している
問題は>>977のような輩がパフォーマンスのことだけを考えて、後任のことを考えないソースを書くから
>>985がわりをくってるんだろ
0996デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
うめ
0997デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
アンズよりウメが安し
0998デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
Javaやればやるほど嫌いになる…
09999982013/07/25(木) NY:AN:NY.AN
自己解決しました
1000デフォルトの名無しさん2013/07/25(木) NY:AN:NY.AN
J A V A
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。