Javaが理解できない万年雇われ3流PGの老害は見苦しいからもう沸いてくんなよ
細かいことだが、老害というのは 老いたことが害なのではなく、 老いた者が量産され社会のバランスを 欠いている様が害という考えだ
クソスレ発見
Javaは三日で習得した だが次の三日で見限った
6 :
前スレの991 :2013/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で実装するのは
無理って事ですか?
はい無理です
>>6 Javaには参照渡しが無いので直接的には無理。
代わりに要素数1の配列を使うのがよくあるうんこコード。
Zow[] zow = new Zow[]{new Zow()};
間違えた。わすれて。 >C++ならコンパイルエラー)をJAVAで実装
>>10 わざわざありがとうございます。
一応 setZow(Zow z)が抜けてたので補完して・・・
まぁ、質問しまくって、俺みたいな馬鹿で中途半端な知識量でも
private finalの部分は一応わかっていました。
(たぶん、私にわかりやすくと思い書いて頂いたと存じます)
自分の疑問だったのは、static finalのインスタンスをメソッドが
なぜ変更されないのかが疑問だったので。
前スレの
>>987 さんの説明の参照の値渡し。
っていう説明とC++で書いた例のソースを見してもらって理解しました。
グローバルワイドな一流人材はUTCしか使わないから無問題。 どうしてこう、政治家は歴制度をいじりたがるかね
UTCでしか業務しないエンドユーザーは
世界の一握りしかいないのだが、
その限られた顧客しか相手にしない
>>13 は
無問題なのだろう
ム板のどのレス見ても井の中の蛙大海を知らず的なレスばかり
この世のどのプログラマも自分が携わった分野しか知らないんだから
業界全体を知った風なこと言う奴ってどうかしてるわ
>>13 とか
>>14 のことね
18 :
14 :2013/06/10(月) 21:06:58.37
おまえらみんな自分のしたレスをもっと冷静になって客観的に見るんだ!自分がいかに恥ずかしいレスをしているか!
他人事のようにというふうにあなたはおっしゃったけれども、私は自分自身を客観的に見ることはできるんです。あなたとは違うんです。そういうことも併せ考えていただきたい
21 :
桃白白 ◆9Jro6YFwm650 :2013/06/11(火) 01:49:56.40
23 :
デフォルトの名無しさん :2013/06/11(火) 10:17:04.90
教えてください。 java.lang.Threadクラスのsleepで使っている、システムタイマーと java.util.Timerで使っているシステムタイマーは同じものですか?
違うんじゃね?java.lang.Thread#sleep()は、たぶんタイムゾーンもうるう秒もシカトする
25 :
23 :2013/06/11(火) 11:23:07.16
>>24 java.util.Timerでシステム時刻を変更すると処理がとまる可能性がある
という記事を見つけて、対策をしないといけないのですが、そうなると
Thread.sleepはどうなんだろうとおもって。
猪瀬のせいで、多摩川超えると処理が止まるとか、それはやだなぁ
>猪瀬のせいで は?
>>25 API 仕様からはそのような挙動は
許されないように想えるんだけど、
バグなの?
イマドキのOSをネットに繋いで普通に運用していたら、 システム時刻なんてしょっちゅう変更されているはずなのだけれど?
JavaSEがCookieやSSLを実装している以上、時計あわせはジャバラーの義務っ カレンダで試用制限とかしてるアプリ職場に押しつけられると、 カレンダ偽装する奴が増えてトラブルになるんでやめろー
>>29 どうせ時刻逆転のケースだろ
近代的オペレーティングシステムで
普通それはない
関数の計算結果を自動的にグラフ作成し 画像として ホームページなどに表示する手順などを解説している サイトや著書などを知ってる方おりましたら おすすめをお願いします。
三角関数や対数程度でいいのなら「Processing」でアマゾンぐぐれー
34 :
デフォルトの名無しさん :2013/06/12(水) 00:28:24.66
サーバーでgnuplotでも動かせばいいじゃない Javaで調べるとまずアプレットが出てくると思うけどそれだけはやめとけ
・HP掲載のJavaとJavaScriptを勘違いして質問している ・HP掲載のJavaAppletでの表示の話 ・サーブレットの動的HPの作成の画像作成の話
JAVAのGUIアプリでグラフ画像とHTML自動生成の話という可能性も微レ存
グラフならd3かhighchartだな今なら。
質問するところを間違ってしまったみたいで申し訳ないです
>>33 >>34 >>35 >>36 >>37 ありがとうございます
早速Amazonにあった本や論文などを学校の図書購入希望
やキャットで検索や閲覧希望ぶち込みました。
そもそも何で日本語だけこんなに贔屓にするんだろう?日本顧客が結構金蔓なのか?
まさか日本政府が要求してたり?
IT後進国の馬鹿な日本ぐいしかもうJava使ってる国が無いんだろう
日本GUI
なぜオーバーライドをデフォルトにしたのですか? 継承先にこのメソッドを破壊された場合はどうしようなどと考えるとテスト項目を作るのが億劫です
そういうOOPのノウハウの多くはそもそもJava開発で蓄積されたものだからだろ 例えば後付けで追加された@Overrideなんか明らかに設計失敗の証拠で、 本来なら後発のC#と同じくoverride修飾子を付けないとコンパイルエラーとするべきだった 昔は継承は既存コード再利用のための強力な仕組みだとか言ってたけど Javaによって色々問題点が明らかになって今は大分考え方が変わったからな
>OOPのノウハウの多くはそもそもJava開発で蓄積されたものだからだ JAVA信者の基地外っぷりもここまでいくと 人としてやばい
「継承先にこのメソッドを破壊された場合はどうしよう」などと悩むのはどんな ケースだろう? オーバーライドされたり派生クラスで実装が与えられたときの振る舞いを注意深く 扱うのはprotectedかabstractなメソッドぐらいであって、その他publicなメソッド についてはあまり気にしないけれどもなぁ。 いくらオーバーライドを禁止したところでデコレーター使えばいくらでもpublic メソッドの実装なんて差し替えられるわけだし。
オーバライドって元々は、既存コードは変更しないというルールの下で 既存コードが変更できないなら上書きすればいいじゃないという考え方が基本だから 後から勝手に何でもかんでもオーバライドできたほうがいいわけ 今ではそういうやり方は糞と考えられてるが
>>47 publicメソッドを同じクラス内から呼んでる場合があるだろ?
とりあえずコンストラクタからpublicメソッド呼ぶのやめい
なんで?
親クラスプログラマにしてみれば、 コンストラクタぐらい目の行き届くとこでやって欲しいし、 子クラスプログラマにしてみれば、 自分のコンストラクタ始まる前にインスタンスメソッド呼ばれても困る PMD使えばまとめて検出できるよ
消えろじゃヴぁ
仕事のない糞言語から目の敵にされる我らがJAVA様
ピーターの法則: 組織において有能な人間は昇進しより高い能力を求められ、無能になったところで昇進が止まる ゆえに組織のいたるところ無能な人間で満たされる これを人間からソフトウエアに置き換える たとえばWindows, たとえば C,Java これらは有用と評価され普及度を高め、クソと評価されるあたりで普及が止まった これらに対し、社会経験のない中二病、もとい、お子さまは 世の中はクソで満ちあふれている、俺が何とかしなければと情熱を燃やすのである なお、それが非常にうまく行った場合、結局は上の行程を繰り返すのみ
Windowsって普及止まったの?CEのこと?
真のプロフェッショナルはクラス利用者の勝手な継承を許さないようにコーディングする どうしても継承したい場合はユーザーが自分でラッパーを書いてそれを継承しなければならないように作る
初心者向けの本で、 > 継承の仕組みを利用した書き方を、『差分プログラミング』とも呼びます なんて読んだことがあるけど…。 差分で済むから継承、なんてやってたら、is-a関係がとんでもないことになるよね…。 まずは全てのクラスをfinal & イミュータブルにするのが基本。 状態変化を持つクラスだけ、1つずつアクセス範囲を検討するのが良いんだろうな。
なぜC系言語しかやってこなかった人は意味も無くpublicにするのだろうか 外から見える分得だと思ってるんだろうか 例え将来的にpublicに使うとしても、もしその瞬間には必要ないのなら時がくるまで閉じておけ。社会の窓を。
>>55 Windows8は止まることなく退化を続けてるよ。
>>52 別に子クラスが仕様を満たしてなかろうと、親クラスが壊れるわけじゃないからいいだろ。親クラスのここを通って、ここのサブルーチンを…とか言ってる奴じゃないかぎり。
昔ながらの品質保証部とかが 「外部から観測できない手続きは禁止」 とかいってprivateを毛嫌いしてるんじゃね?
63 :
デフォルトの名無しさん :2013/06/13(木) 00:52:11.93
>>48 のような考え方で作ろうとしたら必然的にprivateフィールド禁止になるぜ
親クラスは変更しない前提だからカプセル化する必要もない
実際、サブクラスの自由度のためにフィールドは全部protectedにするという
規約はそう珍しくないし
protectedなフィールドが一番使用頻度が低いなぁ。 publicかprotectedなアクセサがあれば十分だと思うのだけど。フィールドを裸単騎で 子孫クラスに晒す必要性が殆ど無い。 privateでないフィールドはpublic static finalぐらいしか普段は作らない。
老害はカプセル化の意味も知らないんだろうか
アクセサさえ通してればカプセル化だと思ってる
>>64 みたいな奴は非常に多いよね
必要条件と十分条件の区別も十分につかない
>>66 みたいな奴も非常に多いよね。
既存クラスは変更せず、必要な変更はオーバライドによって行うという条件なら フィールドはとりあえずサブクラスから好きに触れるようにしないと仕方ない という話に対して、アクセサ使えばいいと言うのは的外れだろう 結局片っ端からアクセサで公開することになり問題の本質は変わらん
派生でオーバーライドやり放題だと全部パブリックと大差ない やろうと思えば基底を無視して全部上書きも出来るのだから それでは基底を引数に受けとるメソッドはどうやってテストすればよいのか 膨大な量になるぞ 派生が作られるたびに今まで作って来た基底を引数に受けとるメソッドを追加でテストしなければならない
>結局片っ端からアクセサで公開することになり ならないよ。 子孫クラスに対して実装の詳細を隠すことも知らないのであれば、とりあえず クラスの設計をする手を止めて既存の有名どころのライブラリやフレームワーク のJavaDocでも色々読んだ方が良い。 protectedフィールドで内部状態を子孫にガンガン公開している実装なんて どれほどあることやら。protectedはabstract methodと同様に継承によって機能 拡張できるポイントとして慎重に、かつ詳細なドキュメントと共に定義されて いるのが殆どだと思うが。
>>69 基底クラスのメソッドにこのメソッドは○○しなければならないと明記しておいて、
受け取る方のメソッドには引数として受け取ったインスタンスのメソッド××を呼び出すと明記しておく。
テストでは受け取る方のメソッドが××を実際に呼び出してるかどうかテストすりゃOK。
メソッドのオーバーライドを出来ないようにしろで終わる話なのに オーバーライド出来るケースの話を延々とするチンパンジー達
カプセル化と継承による機能変更は両立するものではない
アグリゲーションとコンポジットの違いがあるからには、private一点張りじゃなくて、protectedが必要なこともある。
publicがオブジェクトの使用者向けのAPIであるようにprotectedはクラスの 開発者向けのAPIの一部だから。 finalでないpublicフィールドの公開がまずあり得ないようにfinalでない protectedフィールドの公開もあまり無い。protectedフィールドを再代入 出来る形で子孫クラスに公開したところで、再代入したら何が起こるかは 詳細にドキュメントに書くか、あるいは親クラスのソースを遡って影響範囲 を検討する必要がある。大抵便利でも安全でもないので普通に避ける。 実装の詳細に関する知識を共有した見知った範囲の人間がコードを弄る際の 手抜き程度しか出番は無いと思う。 protected finalも、例えばハンドラ等のオブジェクトを子孫クラスに触ら せる場合はフィールドよりゲッター使った方が色々便利なのであまり出番が。 使用者には公開しないプリミティブ型や文字列の不変値ぐらいか。
どうして基地外ほど長文を書きたがるんだろう
フィールド全部protectedとかprivate禁止とかありえんだろ。
リスナーとかデザパタ実装するならオーバーライド便利やねん てかそういうときだけしか使わんけどねん
>デザパタ実装するなら この考え方がまさにJAVAドカタ
privateだと舐めるな! こっちにはリフレクションがあるんだぞ!
ドカタはリフレクション使えないから心配ない。
リフレクションは設計崩壊の産物 ダイナミックキャスト並みに要らない
ドカタがリフレクション使う必要は無いけれどもドカタでも使えるものを作るには リフレクションも必要なんだよ。比較的真面目な話として。 フレームワークのAPIとしてはキャストやリフレクションが不要な綺麗な設計に なっているのに対してフレームワークの実装中ではjava.reflectやCGLIBの類を ガンガン使っているのは割と普通。 アノテーションとかも定義済みのを使っているうちはリフレクション不要だけど 自前で定義し始めると簡単なリフレクションを使う必要があるよね。
フレームワーク実装したこともない奴がフレームワーク実装の話をするチンパンジースレ 難読化もできないしな
Javaの基礎の本と、Eclipseの本でいいのがあったら教えてください
プラグインありきのeclipseなのに、それ系の本買う奴ってマジで馬鹿だと思う あんなもん直観的にわかるだろ。まぁ俺も昔1冊買ったことあるけど
>>85 かっこいいやつ
タイトルは覚えてないが自分がこれから使うバージョンを解説したものを選べ
>>86 じっくり機能を把握したいじゃん♪
3000円越える本は図書館にリクエストを出すという手がある。
if文の書き方なんですが、 if( !(src.equals(dst))) { 〜〜 というのと、 if( src.equals(dst) == false ) { 〜〜 というの、どちらが慣習的に普通なんですか? 不毛な質問でごめんなさい。
慣習じゃなくてjavaでオブジェクトの比較を行うとき その2つは判定方法が違うんですけどー(プリミティブ型は除く) equalsはオブジェクトが同じなら真を返すけど ==は生成されたインスタンスが違えばオブジェクトの中身が同じでも偽になる
>>88 boolean型なら、どっちでも動作は変わらないんだけどね。
前者が極めて一般的。
あえて後者を使っていた場合「すごく複雑な論理演算の結果、falseなんだぞ!」という強い意図を表してる。
コードの読み手は、そこに何かトリッキーな仕掛けがあるんじゃないかと疑うのよ。
だから、ごく普通のif文では if(xxx == false) とか if(xxx == true) は使わないな。
91 :
デフォルトの名無しさん :2013/06/15(土) 02:52:24.79
!だと見落としのミスが増えそうな印象 (事実、俺はよく見落とす)
一般的とかそういう感覚じゃねーから
気持ち悪いならnot_equalsでも作れ
javaの初心者です。 質問さして下さい。 オブジェクトの比較で == を使うときって、そのインスタンスのハッシュ値が同等の時だけtrueですか? また、 eaualsを使うときは、そのインスタンスの中身さえ同じならばtrueですか? どなたかご教示ください。
95 :
94 :2013/06/15(土) 07:12:47.96
あ、88さんも同じ質問してたみたいですね。 すみません。
質問さしてください。 javaをある程度学んで、NetBeensってやつで メニューとJTextAreaをペタってはって、JFileChooserでファイルを選んで File file = filechooser.getSelectedFile()で Fileのインスタンスを得て、JTextAreaに表示するだけって事をしたいんですが JTextAreaの変数(ここではtxtareaとします) txtareaのどのメソッドを選んで、どういう処理をしていけばいいんでしょうか しょうもない質問ですが、ご教示ください。
テキストエリアの一部の文字だけ文字色やフォントを変えることは出来る? 自分で文字位地と長さ調べて別のテキストエリア貼らなきゃダメかな
質問する奴は名前欄に番号書けよ・・・ 同じ奴なのか別人なのかわからん
101 :
94 :2013/06/15(土) 10:57:25.36
すいません。
>>89 を見たんですが
自分の書いた
>>94 の考え方でも良いのでしょうか
良ければ、良いと、違うなら、違うと
どなたか、答えてくれませんでしょうかお願いします。
102 :
桃白白 ◆9Jro6YFwm650 :2013/06/15(土) 11:49:32.63
>>101 すこし違う。
==はReference Equality Operators。
つまり、参照同じ演算子。
同じオブジェクトを参照してたらtrue。
hashCodeはオブジェクトが異なるときはできるだけ違う整数を返すようにしましょうと
されてるものなんで、==がfalseのとき、hashCodeも違ってくるものなのだけれども、
hashCodeを参照して==の結果が決まってるわけじゃないっすよ。
equalsはequalsの実装しだいなのだけれども、Objectなんかは
参照が違ってたらequalsがfalseを返しちゃう。なので中身が同じならと
一概に言えるわけじゃない。
103 :
桃白白 ◆9Jro6YFwm650 :2013/06/15(土) 11:53:32.16
>>102 >==がfalseのとき、hashCodeも違ってくるものなのだけれども、
equalsがfalseのとき、hashCodeも違ってくるものなのだけれども、
基本情報を取らない弊害がまた出たな 基本情報をちゃんと取っていれば 値、参照、ハッシュ値の違いなどで悩む事はなかったのにね
105 :
桃白白 ◆9Jro6YFwm650 :2013/06/15(土) 11:56:49.38
>>104 百済ねえやつ。百済からの回し者か?百済に帰れ。
106 :
94 :2013/06/15(土) 13:03:57.66
>>102 なるほど、ありがとうございます。
それよりなにより
俺みたいな中途半端な質問でも
解かりやすく、詳しく説明してくれたことに
感謝感謝です。
>>99 普通に<font>タグで変えられるよ。
本物のswingプログラマはjavax.swing.text.AttributeSetを使うが、ひたすら面倒
オブジェクト間の==は同一インスタンスの時だけtrueで、 Object#equals()実装も同様。 それ以外は何でもありで、HashMapとかでトラブル起こしても、 それはequals()やhashCode()のオーバーライド仕様を明記できてない発注者に全責任がある。
仕様に明記する暇にコードかけると思うんだが上流工程ってそんなに暇なのか? 新人の時にコード内容までキッチリすべて(ただし日本語で)書いてある仕様書みた時は自分の目を疑ったよ そのうちエクセルコンパイラ作るやつが現れるんじゃないかと古株の先輩にジョークを飛ばしたら苦い顔をされたな
ドメイン分析できてないと、ほどよく高速に散らばるハッシュ値実装は難しくね?
なぁ、oracle のjava プログラマのSilverを取ろうと思って 対策本買って、一通り解けたけど ホームページの例題で初期化ブロック使ったようなコードがあったり するんだけど、どこまでの知識がいるの? もうわかんねーよ。
オブジェクトの論理等価性について事前の分析はきっちり必要だけれどもそれを実際に equalsやhashCodeとして実装する際は無理に手作りせんでもEclipseでダイアログ開いて フィールドぽちぽち選択してOKして自動生成させた方が大半のケースで安全確実だと思う。 比較の抜けや一般契約違反も無いし。
Stringの#hashCode()と#equals()で、昔から疑問に思ってることがあるんだけどさ。 equals() の中で1文字ずつチェックする直前、 自身と他者のhashが0でないとき、 つまり両者のhashが確実に計算済みであると保証できるとき、 hashが一致しなければ中身を見るまでもなくfalseを返す。 って実装にすれば、もっと速くなるんじゃね? と思うんだけど。 何か問題でもあるのかね?
問題はないだろう
超基礎的な部分だから、移植性を考慮してシンプルな実装にしときたかったんじゃない? マルチスレッドで気にすることが増えそう 今のJavaの仕様だと特に問題はないだろうけど
ハッシュ値を計算するコストの問題だと思うよ。 実際ハッシュ値ってイミュータブルなオブジェクトを除いてhasnCode()が呼ばれたら 安直にその都度計算している実装が多い。そしてaとbがイコールであることを調べる コストとaとbのハッシュをそれぞれ計算するコストは極端には違わない。 仮にaとbのハッシュ値が同じでも改めてイコールであることを確かめる必要があるので ハッシュ値を使っても二度手間になるというかかえって遅くなりそう。 イミュータブルだったり賢いハッシュ値の更新管理をしているクラスであればその equals内でハッシュを使うのは当然ありだけど、そういう最適化は各クラスの実装の 中で閉じているべきであって、それらをフィールド値として持つクラスは各クラスが 最適なequalsの実装をしていると信じて素直にequalsを呼ぶのが良いのでは。
あ、ごめん、Stringの実装の話でしたか。読んでなかった。 確かにそれは変だよね。何でだろう。
ほんと、バカほど長文がすきだね
>>114 ハッシュ未計算のフラグにhash == 0使うのやめい。
1.7でもまだ直ってないのか
去年どこかで脆弱性レポート出たよな?
hash=0になるようなクエリばかり送りつけるDDoS攻撃が
121 :
114 :2013/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には依存するのかよ。
もしかして、なにか盛大に勘違いしてるのか?
実装としては正しくても意味的に 素直じゃないからだろ ついでに、文字列が長くて、先頭が同じで、 最後だけ違う文字列の比較でしか役に立たない ウンコなコードは要らない >if (hash != 0 && other.hash != 0) > return hash == other.hash; しかも間違ってるし
123 :
デフォルトの名無しさん :2013/06/15(土) 21:49:48.32
爆速って試してみたってこと?それとも机上の推論? Stringがどんな用途で使われることが多いか知らんけど
机上の空論。しかもコード間違ってたし… 多くの環境では、比較命令の中でも0との比較は高速っていう印象だったんで。 確かに >122 の言う「ウンココード」を追加しなきゃいけない割には、 高速化できるシチュエーションは少ないかもしれない…。
javaってほんとダメな言語だな 根本にあるコンセプトは悪くないんだが
なんだいきなり そう思った根拠ぐらいは書いた方がいいぞ
129 :
デフォルトの名無しさん :2013/06/15(土) 22:44:29.02
覚えたばかりの言葉は使ってみたくなるのが人の道理 俺もそのコンセプトはよく分かるわー
おれもコンセプトには世話になったよ
>>125 わざわざ書いてくれたのか。
26万文字×1000回とか、まさに俺の思い描いていた理想のシチュエーションだわ(^q^)
>>126 ルートにあるコンセプトはブラウザプラグインとしてのエンバイロンメントフリーなリッチクライアントだから。
>理想のシチュエーションだわ(^q^) >エンバイロンメントフリー もうやめて…
133 :
デフォルトの名無しさん :2013/06/16(日) 00:39:10.04
ハッシュ比較のコードが入ってない場合の全比較はどれくらいなのよ
ジェネリック使いにくい
使いにくいなら使わなければいいじゃない
インターフェイスにhashCodeメソッドなどを書いていないのに そのインターフェイスを通じてhashCodeなどを呼び出せるのは何故なのでしょうか? クラスがObjectを暗黙に継承していることは理解しています しかしインターフェイスの親はインターフェイスでなければならないので インターフェイスがObjectを継承するのはおかしな話です なのにインターフェイスを通じてhashCodeを呼び出せてしまう…… わけがわかりません 混乱してあたまがおかしくなりそうです
細かいことをすっ飛ばして説明すればInterfaceのメンバはObjectのパブリック メソッドを含むと言語仕様で定義されているから。
138 :
88 :2013/06/16(日) 08:51:21.21
booleanが戻り値の場合を想定していましたが、どちらにしろ前者が普通なんですね。 ありがとう御座いました。 大昔にExcelVBAしかやった事が無かったので、質問させて貰いました。
89の説明は壊滅的に間違ってるが、結論は正しい。 90がいいな。どちらにせよ前者が普通。
ドカタには否定の論理は難しいから == false と書かせるのが吉
ドカタには論理型は難しいから ==false)==true しかし、==trueの結果もまた論理型なので ==false)==true)==true 以下再帰的に続く
これが後に言う越後屋事変である
ところでおまいらelse句って知ってるのか?
よし、if文使うのやめよう(関数型言語過激派)
関数型は素晴らしい 設計書を書くのもテストするのも楽だ 日本のIT業界ではコードの日本語訳である設計書の作成とテストが実務の八割を費やしている ここを短縮できれば大幅に仕事効率が改善される
仕事効率もクソもその無駄な作業をして時間給を貰う仕事なのだから 効率なんて上げなくていいよ
それもそうだな 効率が悪くて困るのは経営陣だけだし 傾いて来たら転職すりゃいいし
何より素晴らしいのは 関数型ではこれはできませんやりませんで済ませられる点だ
149 :
デフォルトの名無しさん :2013/06/16(日) 16:56:43.58
いくら出せる?
50円
うまい棒五本じゃ晩飯にもならないよ
5円チョコ10個買えるやんけ
154 :
149 :2013/06/16(日) 18:16:14.28
>>150-153 有料なんですか?
"Apple Java Extensions" なるものがどういうものかよくわかってないのですが。
>>149 stackoverflow.com/questions/15048220/
> They are included both in the Oracle distribution and in OpenJDK.
だとさ。Mac使ってないから知らんけど。
>>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なんかは別扱い(デフォルト実装持てない)だな。
質問です ByteBuffer#get(byte[] dst)でdstへデータを読み込む際にバッファー内のデータがdst.lengthより小さいと例外が発生します これは仕様のようなのですが、なぜ配列のサイズより小さいデータを入れるだけで例外とするのでしょうか。 これでは次に大きなデータを受けるときにわざわざbyte[]を作り直す手間が勿体無く感じるのですが
>>157 です
自己解決しました。スレ汚し失礼しました
159 :
149 :2013/06/17(月) 00:03:31.64
>>155 なるほど。ありがとうございます。
しかしドキュメントが無さすぎて使い方がさっぱりわからない。
(
>>149 で挙げたブログ中のリンクもリンク切れ)
どなたか OS X のメニューのハンドリングについて情報持ってる方いませんか?
>>141 いるんだよなこういうバカが
式の型がbooleanかどうかは関係なく
ドカタが認知しやすい形かどうかが重要
if (!fuckReturnBoool()) ドカタ理解困難
if (fuckReturnBool()==false) ドカタ理解容易
if ((fuckReturnBool()==false)==true) ドカタ理解不能
>>160 >> if ((fuckReturnBool()==false)==true) ドカタ理解不能
こんなコードを書くアホウはいないだろ(笑)
>>160 >> if ((fuckReturnBool()==false)==true) ドカタ理解不能
書き方がトーシロー ってわかってるのか?
>>160 のアホ
ま、書いてる 意味がわからんだろうけどな(笑っちゃお)
読みやすい、わかりやすいコードを書けるのがいいコーダーだと思うんだけど違うのか?
そこまで親切なコード心がけるんだったら isで始まるboolean型ローカル変数で評価してやれよ。
質問失礼します。 SwingのJFrameの手前に描画されているものから順に処理していきたいです。 JFrameのZ値はどのようにして取得したら良いでしょうか? 分かる方、よろしくお願いします。
つ java.awt.Container#getComponentZOrder() 手前から描くと、最奥のJFrame描くときに全部消されちゃうぞ?
167 :
165 :2013/06/17(月) 17:36:34.38
>>166 すいません。
質問の書き方が間違っていました。
JFrame内のコンポーネントのZ値ではなく、JFrameそのもののZ値です。
JFrame(ウィンドウ)がデスクトップ上にいくつも表示されています。
手前に表示されているJFrameから順番に処理していきたいという意味です。
よろしくお願いします。
>>if ((fuckReturnBool()==false)==true) これ見てなんとも思わないようなのはシロートレベルだと思うが? 今のプログラマはその程度なのか?
170 :
デフォルトの名無しさん :2013/06/17(月) 20:53:21.07
16bit グレースケール tif を読めるライブラリってあります? JAIでは読めませんでした。
clsやclearのように標準出力に出力した文字をクリアする方法を教えて下さい windowsXP,7依存でもいいのでお願いします
標準出力に出力した文字はクリアできません 不可能です ターミナル画面をクリアしたいという話なら ↓ が回答
JNIでコンソール制御Win32 API
はい次
DOS窓の話ならまずANSI.SYSでググれ
SWINGでクリックイベントやマウスイベントをスルーさせて、 後ろのウィンドウに処理させる事は可能でしょうか?
当然プロセスをまたぎます(キリッ とか言い出す予感
179 :
177 :2013/06/18(火) 13:51:09.42
javax.swing.SwingUtilities#convertMouseEvent() でイベント変換できないかな。 スクリーン座標との変換はconvertPointFromScreen、convertPointToScreenあたりで 場合によってはgetDeepestComponentAtも必要? SwingプログラマならSwingスレにいそうだが
てst
182 :
177 :2013/06/18(火) 18:54:43.16
>>180 ありがとうございます。
とりあえず全てのウィンドウを配列にして管理して、上から順に処理するようにしました。
ウィンドウの矩形にヒットしているかチェックして、ヒットしていたらdispatchEventでイベントを流し込みます。
技術的なノウハウが無いのでめんどくさい処理になってしまいました。。。
System.in.readの戻り値がcharではなくint型なのは何故でしょうか
APIリファレンスも読めない人に 理解することは難しい
InputStreamのread()の戻り値もintなのが不思議 byte型だったらだめだったのかな?
Cの腐った設計を真似したから としか言いようがない。 出来の悪い設計に論理性を求めてはいけない。
javaに論理性とか合理性を求めたら負け
C上がりはdocも読まないのか!?
>>185 読み終わったら-1を返す仕様だから
byteだと符号付きなので値が変わってしまい扱いにくいから
パフォーマンス的な損も特にないから
>byteだと符号付きなので値が変わってしまい は?
InputStream#readはByteを返すべきだった
例外なげるのが正解
Java SE 7update25キター
byteがsignedで誰が得するの? あれこそまさに愚かな一貫性というやつだよね
>>195 MIDIファイルの読み書きする人
役に立つのはたぶん世の中でそれくらいだろう
>>191 結果の型がbyteだと、結果をそのまま0xffと比較できないんだぜw
読み終わったら0を返すでいけるとおもう
>>193 try {
buf.write(in.read());
} catch (Exception e) {}
つまりJavaはbyte型の値「-1」を読みとったときに int型の255に変換して返す統一性のない ライブラリ仕様であるとふむふむ
よそ様のライブラリでは ・0x00を読み込んだとき ・0xffを読み込んだとき ・入力の末端に到達したとき ・末端じゃ無いけどブロックせずに読めそうなデータだけ返すとき をどう区別してるのか、産業でまとめてくれ。
>0x00 JAVA言語上の概念であるint型(4バイト整数)の値を 読み込んだときの挙動とな?
JAVAドカタには 受信データそのものと受信処理のステータスが 別であるという当たり前の発想は無いらしい
C言語のfgetcとかと同じにしただけなんじゃね? fgetcよりはエラー時に例外出るだけマシな感じ。
>エラー時に例外出るだけマシ まるでfgetcはエラー情報が取れないみたいな言い方だな
ちがうだろw
むしろこの際、java.text.CharacterIterator.DONE も廃止して、 int型の-1にするべきだとおもうんだが
そういう仕様がJavaの利点だと気づいてない人が沢山いますねぇ。 だからJavaが速いことに気づかない
JAVAドカタの
>>209 には
受信データそのものと受信処理のステータスが
別であるという当たり前の発想は無いらしい
符号理論上では対等な事象をわざわざ分ける男の人って…
どうでもいい しゃぶれよ
すみません、質問する場所がわからないのでここで質問します。 Javaが使えるレンタルサーバを借りるとして、サーバ代を打ち消す程度の収益を、 個人の趣味の範囲で望むのはどのくらい大変ですか? また、比較的安いサーバではweb.xmlを弄らせてくれないようですが、こういうのは避けたほうがいいですか? それとも<servlet>タグ等はかけるのでしょうか?
マイJenkins立ち上げるのなら、サーバにメモリ1GBは欲しい
>>214 VPSを借りろ。月1000円未満で借りられる。
VPSを管理するスキルが無いのなら板違いだ。
JAVAドカタの
>>212 には
受信データそのものと受信処理のステータスの
区別がつかないらしい。
int値をシリアライズして伝送するライブラリを
書かせると糞なメソッド仕様になるんだろうな。
二言目にはドカタの無職さんこんばんは。
>>214 >サーバ代を打ち消す程度の収益を
どうみてもスレ違いです
Windowsで動くならそのままAndroidでも動くんですか?
>>220 GUIとファイルI/OとDBと通信を
使用してなくてjava.langの中だけなら
たぶんいける
ライトワンスランエニウェアだから動くよ 動かないなら詐欺みたいなもんだ
動かないよ AndroidはJavaではないし そもそもまっとうなJavaの中でも組み込み用のとかあるし
動かないよ AndroidはJavaではなく海賊版だし、 そもそも公式Javaの中でも組み込み用とかあるし
なんだ詐欺だったのか? 一度書けばどこでも動きますよ!ぜひ導入してください! なーんて謳い文句で営業してるのに、ほんの些細な変化でも動かなくなる 誇大広告もいいとこだな
ドカタの使い回しが利くという意味だよ
JavaSEのSとは何か?
>>225 それは昔の話
Javaというブランドをカネで貸して商売をするようになる前の
>>225 詐欺と言えばそうかも知れない。
Javaは言語仕様と実行環境のセットからなる
基盤なのに、Googleは前者だけをパクって
紛らわしいものを出した。Googleは詐欺
229 :
デフォルトの名無しさん :2013/06/20(木) 18:38:13.22
BufferedReaderの仕様について教えてほしいのですが、readLine()を使用して10行を 読み込んだとして、close()しなければ10行は残ったままになるのでしょうか? で次データが来た場合、11行目から(1行目〜10行目は残したまま)書くのでしょうか?
ちょい質問させて下さい WindowsでJava以外のWindow上の色を定期的に判別して、黒が白になったら別の場所をクリックする みたいな事をする場合 やっぱりクリップボードを介する&Robotがいいでしょうか?
>>229 「10行は残ったまま」の意味が分からないけど、10行readLineしてしばらく待って次にreadLineしたら11行目が読み込まれる。
「11行目から(1行目〜10行目は残したまま)書く」って、BufferedReaderでは書き込めないよ。
BufferedReaderとは別にFileWriterとかで書き込みたいなら、BufferedReaderで何行読み込んだとか関係ないし。
File I/Oの基本が分かってないんじゃない?
232 :
229 :2013/06/20(木) 19:08:50.34
>>231 ありがとうございます。
アプリ間を跨いで同じファイルを使用していて。こっちは読み込みのみで、
別アプリから書き込みが発生します。
そういうのはファイルではやらないでください みんな迷惑してるんですよ
つ 「名前付きパイプ」
つ「データベース」
チャットみたいなのをしたいんだろ
>>232 そういう感じのことしたいんなら
RandomAccessFileかFileChannelを覚えることをおすすめします
JAXBでテストデータを出力したいのですが、 XMLのルートに当たるTestDataクラスが出力したいUserクラスを持つ構造で Userのプロパティを属性にマッピングするにはどうしたら良いでしょうか。 ただしUserクラスそのものには@XmlAttributeを注釈しないようにしたいです。
>>237 UserクラスにJAXBアノテーションを付けたくないという解釈で良いのかな?
>>216 専用サーバを借りる予定です
鯖のコスト減らして貧乏臭く開発するような内容は今まで散々やってきたので、
今度は大きいサービスを作ってみたいと思いました
レンタルサーバで実際にpollingがwebsocketを使ったアプリを試したいです
>>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を教えてあげる。
JDK 6 Update 11のインストールexeを実行すると、 「有効なwin32アプリケーションではありません」てメッセージが出るんだけど どうすればインストールできる? OSはWindows7 Pro SP1 64bit BTOでセットアップされたPCが今日届いたばかりだから古いJDKは残ってない。
>>242 ダウンロード時に回線障害起こしたとかでJDKが破損してるんだろう
再ダウンロードして実行し直せばいい
>>243 ほんとだ。。。
ファイルサイズ見たら全然想定より少なかった。
ありがとう!
板違いな気がするけどJavaの使用に関する質問もここでいいの? 違ってたら誘導して頂けると有り難いです
private List<String> strList = new ArrayList<String>(); public void addString(String str) { strList.add(str); } public String getString(int num) { if(strList.size() < num+1) return null; return strList.get(num); } のような、StringのListを管理するがそのList自体は返さないようなManagerクラスがある場合、 getString(int num)メソッドの一行目に書いたようにnullを返してもいいのかな? でもこれって上で書いたようにNullPointerExceptionでエラー出すか、この一行は書かずにArrayIndexOutOfBoundsException出すかの違いでしかないのか・・・。 こういう時に何を基準に判断していくべきなのかがもう一つわからないです。 加えて、このnullチェックはメソッドを呼ぶ側ですべきなのかこのクラスでするべきなのかの判断基準もわかり辛いです。 JavaのSDKみるに、基本放置でエラー吐かせて、必要ならば呼ぶ側でする感じかなとは思いますが。
249 :
248 :2013/06/24(月) 06:49:19.61
あぁ、String型でやったのは大きなミスだ。 これじゃヌルポはでないか。
>こういう時に何を基準に判断していくべき このプログラムについてのお前の設計思想 >JavaのSDKみるに、基本放置でエラー吐かせて んなこたーない
>>250 だから設計思想を形作る判断材料のどこに重点をおくべきなのかがわからないの。
お前の設計思想なんていいだしたらメモリさえ食わなきゃ何でもokみたいな言語に成り下がるわけで。
null checkもお前の設計思想では片付かない相当大きな論争がありますよね?
252 :
250 :2013/06/24(月) 07:27:37.24
>お前の設計思想なんていいだしたらメモリさえ食わなきゃ何でもok そうだよ。 プログラミングが目的じゃなくてコンピューターに やらせたいことがあるんだからプログラミング言語がある。 生産性・保守性・拡張性・再利用性の様々な観点で 今回の自分の目的に叶っていれば問題なし。 プログラミング自体が目的のアホな論争など どうでもいい
253 :
デフォルトの名無しさん :2013/06/24(月) 08:13:55.37
いや、俺は
>>250 に一票。
結局のところ、プログラム全体としてのエラーや例外のポリシーを決めないとどうすべきか
なんて言えないよ。
255 :
デフォルトの名無しさん :2013/06/24(月) 08:43:53.04
256 :
デフォルトの名無しさん :2013/06/24(月) 08:45:57.24
お前らわからないくせに偉そうにぐだぐだ言いやがるよな
わかるわからないの問題かこれ?
258 :
デフォルトの名無しさん :2013/06/24(月) 10:57:22.99
>>257 わからないくせに偉そうにぐだぐだ言うなって言ってんだよ。
>>252 なんだよこれ。バカが。
>>258 よくわかんないからもう少し丁寧に説明してくれよ
260 :
デフォルトの名無しさん :2013/06/24(月) 11:22:38.82
粘着しだした
>>248 「自分的にこうあるのがベター」って考えがとくに無いなら、
とりあえずJavaの標準ライブラリに合わせりゃいいじゃん。
小難しいこと考えずに、
public String getString(int num) { return strList.get(num); }
だけで、標準ライブラリの設計と合致するっしょ。
設計思想無しにヘタに、
if (0 <= num && num < strList.size()) return null;
とか書いて例外な状況を握りつぶすのは最悪。
本当はnumの範囲外が原因なのに、
戻り値を最初に使った場所でヌルポが出るとか、原因見つけるの大変だろ。
>>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は引用文に書かれている理由でエラーチェックを行っていないが、
もちろんこれがあらゆるライブラリに当てはまるわけではない。
>>261 getStringでnullが返ってくることが例外なのか意図された状況なのかも
>>248 のコード片だけじゃわからないからね
例えば配列は用意した分にしかアクセスできないけど、
用意しなかった分には任意の初期値を用意した無限のインデックスでアクセスできる配列クラスを作りたいとか
そういう場合に初期値としてnullを用意したという状況ならば、getStringでnullが返ってくることは例外ではなく正当な結果だし
>>248 がそういうライブラリなのか、そうじゃないライブラリなのか絞り込むための材料は用意されていない
よって回答者のレスが抽象的・一般的になってしまうのは、そもそも用意されてるコード片が抽象的すぎて何も言えないからなんだよ
> JNI は、null ポインタまたは不正な引数型の受け渡しのようなプログラミングエラーについてチェックを行いません。 これは意味が違うだろ。 JNIというフレームワークとしては自動チェック機能を提供しないだけで、 JNIのCプログラムがnullチェックしなかったら確実に死ぬ
>>248 のダメな点
・return nullだと、strListの中に入っている正当な値としてのnullが返って来たのか、
numがインデックスの範囲外であることを示すためにnullが返って来たのか区別することができない
・addStringにおいてnullチェックが行われていないため、
Listの値としてnullを受け入れるのが正当な仕様であるように見える(これでいいのか?)
↓
これらを総合すると、任意のインデックスを受け取って値を返し
初期化されてないインデックスが指定されたら初期値としてのnullを返すようなListを作ってるようにしか見えないが
これでいいのか?
>>263 >>248 のコードをよくよく読み直したら、だんだん解らなくなってきた…
>>265 に加えて、
・strListは参照が可変でいいの?
・負の引数はエラー、正はOK、ただしInteger.MAX_VALUEはエラー
たぶん、
「初心者は難しいこと考えずに、まずは教科書よく読んで、
しっかりコード書いて1歩ずつ理解していくと良いよ」
ってのが
>>248 にとって一番しっくりくる回答だと思う。
>>266 は無視しておk
こいつ、レスつけてる連中の中で一番腕が悪い、もしくは馬鹿。
論点を無視した指摘に、意味のないアドバイス。
なんでこんな奴がドヤ顔でレスしてんの?
人を馬鹿呼ばわりすると中傷と言われますよ。
こういうときは
×
>>267 は馬鹿
○
>>267 のレスは馬鹿な内容だ
と言うものです。
>>269 ソースコードではなく実行環境の問題
どういう環境で実行してるのか書け
>>269 まず画面にtestと表示するだけのプログラムを
完成させて出直せ
>>273 プロジェクトの設定をどこかおかしくしたのが原因
だから空のプロジェクト作り直して順番に確認していけ
>>274 ありがとうございます
言われた通りに最初からやったらうまくいきました
276 :
248 :2013/06/24(月) 22:02:44.02
return null; の部分を throw new NullPointerException(); にするなんていうのはなし?
上の回答見てまだそんなこと言うか
ヌルポを自分でスローするとか どんだけお前はアホなんだよ 呼び出し側のパラメーター異常は IllegalArgumentExceptionだろ
途中で送信したoops! ノーチェックかチェックしてIllegalArgumentException スローするかどちらかにしろ
そうか なぜかreturn null前提で考えてた
質問:変数paramがユーザー指定の文字列の場合、これってコードインジェクションされる可能性あります? String base = "ping "; int ret = Runtime.getRuntime().exec(base + param).waitFor(); ぱっと見た目やばそうなんだけど・・・
うん。
ですよねぇ・・・ 実際セミコロンつけてコマンド連ねてみても動かないから、証明出来なくて困ってる なにまちがえてんだろ
コマンドインジェクションはむずいんじゃないのかな。 JavaのRuntime.execはシェルを呼ばない。単純に文字列をトークンに分割して 最初のトークンで指定されたコマンドに以降のトークンを引数としてわたすだけ。 なので;や|、&といったシェルが解釈する文字列は機能しないと思う。
最近Java更新しようとするとウィルス対策ソフト入れようとするんだけど
>>284 なるほど、サンクスです。適当に付け足してもうごかないわけだ
しかし、チェック処理がないのがきもちわるい
作った本人が分かってたのか、分かってなかったのか、わからんな・・・
RuntimeやめてProcessBuilder使えって通達、最近来てなかったっけ?
既存のソースにコレがあったので、直した方がよくね?って話に持っていこうかと。 このためだけに触りたがらないヤツがいるので、危険度を証明したかったんだが 証明できんw という夢を見た
abstractクラスをうまく使えるようになるとかなりソース綺麗になりますねぇ Javaは設計が上手くいったときがスカっとして個人的に一番楽しい
スカはちょっと・・・
abstractとか失敗設計の典型例だろ
?
そもそもオーバーライドはバグの温床なのに必ずオーバーライドしなきゃダメな時点でアウト
オーバーライド以上にコードのコピペがバグの温床。 いつの日か出会うかもしれない変な継承によるバグにおびえるヒマがあったら 今目の前にあるコードから継承や抽象クラスやコンポジションを使ってコードの 反復を一つでも減らした方がまだ生産的。
>>295 オーバーライドではない→コピペ
まずこの発想がキチガイ的でヤバイ
オーバーライドはスーパークラスの呼び出しをJavaDocで指示するケースが一番ヤバイな protectedなメソッドを空実装しといてオプショナルにしとくのなら安全で使いやすいが
> オーバーライドではない→コピペ こういう解釈にいたる時点で日本語読解力がヤバい。 バグの温床としてオーバーライド < コピペだとは書いたけど、 オーバーライド無し -> コピペとは一言も書いていない。
コンストラクタで必ずsuper()を呼び出さないとアカンやつ大杉や!
オーバーライドがバグの温床なんていうのはいいすぎじゃないかな 依存関係からいっているのかな、だけど普通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パターンも導入しやすいですし。
たとえ具体クラスが一つしかなくたって、 ふくれあがった唯一神クラスを分割記述するためだけに abstract使ってもいいのよ?
そもそも、目的にあった道具を使うもんじゃないかな。
勝手な想像だが、
>>291 は、道具の使い方や、使う場面を間違えてるんじゃないかと思う
カラフルな絵を書くのが目的のときに、
「黒しか出ないってなんだよ、エンピツつかえねぇ!」
↓
「エンピツ使うとか失敗するにきまってるだろ」
って言ってるように聞こえる。
インターフェースを定義した後にロジック実装の骨格を提供するのにも使うな > abstract 単にabstractを使う機会が無かっただけじゃない?
>ふくれあがった唯一神クラスを分割記述するためだけに >abstract使ってもいい 意味や機能でなく 処理でクラスやメソッドを分けるのは JAVAドカタの得意技だね
ロジック実装して初めてインターフェースは見えてくるもの それがわかってないからたいてい抽象化が無意味になって失敗する だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない ・引数にするか、メンバーにするか ・使うのはここだけか、何度も使うことになるか ・・・
>>305 >ロジック実装して初めてインターフェースは見えてくるもの
それはお前がドカタだから。
設計のできる人はそんなこと無いから。
処理によってクラスやメソッドを分けるのは当たり前じゃ?
それに違和感を感じるのはクラス分けると書けないいわゆるオブジェクト指向になれてない人か、
デザインパターンすら認めない?生きた化石じゃないか?
仕事を割り振ることを考えたらabstractが設計失敗なんてありえないと思うよ。趣味でやってるレベルでもわかる。
>>305 >だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない
同意だけど、abstract等で縛っていかないから抽象化が失敗するんだと思う。
>ロジック実装して初めてインターフェースは見えてくるもの
これを念頭に置くのは大反対。
抽象化しすぎると将来どうなるかわからないからpublicにしとけ的な設計が一番ダメに感じる。
見えてこないのはまさに修飾子を正しく把握していない、もしくは縛って自由を獲得する設計に慣れていないだけ。
>処理によってクラスやメソッドを分けるのは当たり前じゃ? いやー、JAVAドカタって ほんっっとにどうしようもないな
「このクラスについて詳しく見たわけじゃないけどこのクラスもあのメソッド使えそうだな」 これ、誰でもAPIで経験してるはず。 設計さんに感謝やで。 継承がバグの温床なんていったらバチあたるでほんま。
抽象クラスがなかったらコールバック関数に渡す無名インナークラスとかどうするんだよ
うむ。RCP息してない。
>>286 そういやそのへんの挙動、最近のupdateで何か変わってなかったっけ。
記憶違いかも知れんが。
処理によってクラス分ける利点は静的に扱うときに一番あらわれる気がする 動詞をクラス名にしたりね。
List<Object> list = new ArrayList<Object>(); みたいな書き方って海外の人あまりしないよね?なぜ日本ではこれが推奨されているの?
Javaのジェネリクスは保守的でコードレベルでタイプセーフにするだけだからな Java8だかでインタフェースのメソッドがステートレスに実装可能になるらしいから驚き
>>316 普通に
ArrayList<Object> list = new ArrayList<Object>();
って書く人が多いように思う。
自分もそう書いていたんだけど
List<Object> list = new ArrayList<Object>();
のほうがいいよ的な意見もよく聞く。
だけどそういう人でも
JComponent button = new JButton();
ってのは書かずに
JButton button = new JButton();
と書く人が多い。
なぜArrayListのときはそういう書き方をするのか教えて欲しい。
>>317 意味論的にそれが有効だからとしか。
ArrayListはランダムアクセス可能なList
JButtonはSwingのボタンUIとして確固たる知名度と意味を持つ
てかJComponentは抽象度が高すぎるしね
そもそも前と後ろ同じじゃないとなんか感覚的に見た目気持ち悪いんだがどうなん
宣言側はアプリケーションで必要とされている意味論的に適切な抽象度で宣言する 生成側はパフォーマンス特性に合わせて無難または最適な物を生成する
>>314 こういうのってキャストとかしなくて大丈夫なん?
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(...));
>>322 マルチスレッドでadd()等の処理をするときに同期どれよというのはわかってけど
まるで答えになってないよね?
>>321 オブジェクト指向言語で抽象度の高い方向(スーパーセット)にキャストするのは問題ない
ここら辺は個別に疑問を持つより基本を一通り知ってから考えた方がいいよ
326 :
314 :2013/06/27(木) 03:41:15.24
>>324 そこじゃなくない?外国人が使っているよということを言いたいの?何が言いたいの?
リンク先で、
同じオーダー中に同じ要素を含んだ二つのListが等しくなるってのはわかった。
で、equals書くならhashCodeも一緒に書けよっていう某本にも書いてるその辺にも強いことがわかった。
これが答え?
外国・・・そうかなぁ? 個人的には
>>320 に同意。
例えば適切な抽象度のインターフェイスが別にあるのにArrayListとかHashMapと
いった実装クラスを引数として要求したり返値として返したりする公開メソッド
を持つクラスに出会った場合は、とりあえずその品質を疑ってかかる。
いわゆる「臭う」コードのよくあるパターンだと思う。
内部変数にしても例えばArrayList使って抽象度を下げるとListのような抽象度の
高い引数を受けにくくなるので、こちらも普通はListを使うかな。
ある場所での型の抽象度の低さはコード中の他の場所に伝染するんだよね。
>>318 その理屈はおかしい
JavaのListはランダムアクセスが効率的に行えることを保証しないので、
ランダムアクセスしたいならArrayListで受けなければならないということになってしまう
いや意識してそういう理由でArrayListならそれでいいと思うけどね
ジェネリクスでList,RandomAccessとする手もあるけど
内部でnewする変数にそこまでするのは現実的じゃないわな
>>325 ただしそれはオーバーライドがない時の話な
オーバーライドされたメソッドがある場合は派生クラスが厳密に規約を守っているか確認しなければ規定クラスとして使ってはいけない
オーバーライドしているとたやすくis aの関係が破壊される
規約を作れば良いというがその規約にバグがないことも規約が守られてることも保証することは難しく人の注意力に頼るしかない
だからバグが量産される
た
ListってまともにListIteratorで操作されてることは滅多にないよね ランダムアクセスのためのインターフェースとしなかったのはJavaの大失敗の一つ
List をランダムアクセスにしたら LinkedList が List じゃなくなるじゃないですか 名前的に紛らわしい
予期せぬListの実装が引数に渡されたらどうなっちゃうの?
java.util.RandomAccessに代入可能かどうかで判定するのが 業界の慣習。一応。
String戻せば済むところをCharSequence返すメソッドは考えすぎだと思う。 メソッド引数としてはアリ
>>334 Androidの真似して
かっこいいと勘違いしたんだろ
StringBuilder返すところでホントはAppendable返したいのだが IOExceptionがじゃまなの…
>>331 .NETはまさにそうなってるね
名前的には残念なことになってるが設計としてはアレが正解だわ
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; // やはり前者? }
>>339 前者にすべき。マルチスレッドに対応させる際に後者だと都合が悪い
横レスだけど 後者だとどう都合が悪いの?
問題ないよ
どっちでもいいだろ コンストラクターが完了するまでは オブジェクトの構築が終わってないんだから 他のメソッドに合わせてthisを使う必要はない
>>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クラス全体を調べなければならない
どちらの方が安全にコーディングできるか考えれば答えは明らかだよね
>>339 コメントに沿った実装という意味では前者だな。
意味的にも前者のほうがいいんじゃなかろうか、そのコード片だけでは判断できんけど。
結果はどっちも変わらん。
cが引数a,bから決まるのでなくメンバのa,bから決まる値の場合は・・?
どこで
>>346 みたいな知識を仕入れたのか気になるんですが...
検証の仕方も思い浮かびません...
コンストラクタってスレッドセーフじゃないん?
354 :
デフォルトの名無しさん :2013/06/28(金) 11:37:29.87
>>346 の謎解きをするスレはここですか?
>初期化中のオブジェクトが外部に公開
コンストラクタで外部にthis参照が逸出するときのことを言ってるんだろう。
ふつう、コンストラクタはthis参照を外部に公開しないように実装するものなんで、
そういう状況になること事態が実装上の不備だと思う。拙者そう思う。
コンストラクターがマルチスレッドって ただのコーディングミスだろ
>>354 でもそれだとマルチスレッド関係ないよな...
357 :
354 :2013/06/28(金) 12:50:39.56
>>356 俺はマルチスレッドの話をしたつもりだったんだが、お前はなんで俺の話がマルチスレッドと関係ないと思うの?
double checked locking 問題ではコード読んだ時の直感に反して コンストラクタ完了前に参照漏洩してたりしたからなぁ。 あの手の問題あるとチェックしきれん。
360 :
デフォルトの名無しさん :2013/06/28(金) 14:38:54.68
B木を実現するjavaプログラム、難しいけどわかる人いますか?
361 :
桃白白 ◆9Jro6YFwm650 :2013/06/28(金) 14:45:17.44
スレッドAが生成した新オブジェクトを ロック無しで確実にスレッドBに届ける方法は無く、 スレッドAがロックすれば確実に初期化された新オブジェクトが 全スレッド間で共有されてしまうので 正直 ど う で も い い
自分も前者がいいな。10文字少ないので。
365 :
桃白白 ◆9Jro6YFwm650 :2013/06/28(金) 15:09:21.89
>>364 B木のなにを知りたい?アルゴリズム?インプリメンテーション?
値を追加するところ?値を削除するところ?値を検索するところ?
どのあたり?
367 :
デフォルトの名無しさん :2013/06/28(金) 15:16:16.75
>>365 値の追加、検索、削除が出来ればOKです
初めに任意で最大の子の数を入力する所から始めたいです
368 :
桃白白 ◆9Jro6YFwm650 :2013/06/28(金) 15:34:04.09
>>368 ここに置いてあるzipファイルの中の「BTree.java」ですよね?
ありがとうございます!これを参考にします。
370 :
桃白白 ◆9Jro6YFwm650 :2013/06/28(金) 15:55:43.37
371 :
デフォルトの名無しさん :2013/06/28(金) 20:15:07.51
JavaScriptは板違い ローカルルール読んでこいよ異常者共
自作クラスの感想などを頂きたいのですが、スレ違いでしょうか?
相談のうちには入る…のかなあ
374 :
桃白白 ◆9Jro6YFwm650 :2013/06/28(金) 20:49:48.68
>>374 自分のコードの感想言われたらファビョる奴が良く言うよ
376 :
372 :2013/06/28(金) 21:27:03.75
おまいらIdeoneぐらい教えたれよ
sourceforgeねぇ
>>376 System.out.println( "Table file : ファイル名を指定してください" );
return false;
のようなものは
throw new IllegalArgumentException( "Table file : ファイル名を指定してください" );
のようにしておけ
false 返しても結局戻り値チェックしないんだし、エラーを無視して実行を続けるより死ぬ方がいい
特別に理由があって死にたくないときは try catch すればいい
380 :
372 :2013/06/28(金) 22:04:25.51
381 :
デフォルトの名無しさん :2013/06/28(金) 22:08:09.94
ideoneやcodepadは英語サイトだから利用規約や制限事項や禁止事項がわからないし、利用料金や支払い方法もわからん
382 :
372 :2013/06/28(金) 22:32:42.03
>>379 わかりました。
引数のチェックでは throw new IllegalArgumentException を使うのが一般的なんですか?
メソッドのコメントに //- こういうの流行ってんの?
一個目のファイルしかみてないけど、Javaな人はあれみて何も思わないの? 俺、すげー気持ち悪いんだけど。 setHead, setPrimary, set, file、全部キモい。 addとかappendとかkeyとかindexとかcolumnとかpush_backとかなんかそんな概念じゃないのか? まあ、かろうじてinsertはありなのかもしれないが。
あと、列データとかtokenとか、一体どこ経由でこのコードにたどり着いたんだ?
突っ込みどころが多すぎる 列を追加してるのにsetHeadというメソッド addだろ 標準出力するだけのクラス tableを受け取るメソッドかtoStringに書けばいい トリッキーなgetterとsetter 座標指定で十分 同一パッケージから直接変更し放題のフィールド 大事な値をうっかり壊しちゃうかもよ 何でもpublicメソッド エラーメッセージとか外から呼び出すの? 別のクラスに投げるだけなら直接呼び出せ ファイルが閉じられない可能性がある Exceptionでキャッチすんな ...
387 :
372 :2013/06/29(土) 03:00:41.42
>>384-385 insertは、なぜありなんでしょうか?Javaというか、オブジェクト指向に触れて3ヶ月ほどなので、
その概念というのがちょっとわからないです・・・。メソッドの持つ役割とかですか?
列データやtokenなどは、いい加減に書いてしまいました。
ArrayListを入れ子にしているので、行列のフィールドに対するコメント文です。
>>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プロパティの値をセットするメソッドに使う必要があること。
要約:クラス設計がレビューされていないような品質
390 :
384 :2013/06/29(土) 07:41:48.98
>>388 あまりにアレ過ぎて言語化できなかったんだけど、すっきりしたよ。ありがとう。
俺、Javaは初心者なんだけど、Javaな世界ではあんな感じが普通なのかと思ったよ。
誰も何も言わないから。
名付け規約に準ずるのは当然だが、 あまりにしつこい社会主義のようだと、せっかくの創造性がつぶれる もともと日本人には発想性がある人が少ないのに、さらに減ってしまう ジャワみたいにばかみたいに長い名前をつけるのもどうかと思うがな コンパイル後も短いシンボルになってないので、実行時の翻訳にムダな時間がかかる処理系もあるだろう
今のところコード品質に関する指摘は
>>386 だけだな
他は識別子の名前についてガヤガヤ言ってるだけで特に耳を傾ける必要はない
コーディング規約読めばそれで理解できる話だし
包含関係がしっかりしていれば長い名前空間も苦にはならないが、そうなっていない StringとStringBufferの区別は本当に必要なのか、とか
なるほど、不変オブジェクトだけで十分、と。
可変オブジェクトだけで十分、っていう意味かもしれないじゃない
>>396 チーム開発なのか個人開発なのか
ライブラリとして提供するのか
色々シーンあるだろ。個人開発なのに名付け規則に神経すり減らすのはエネルギーの無駄
名前に神経すり減らすんじゃなくて
>>397 みたいな奴が妥当な名前を付けられないってだけ
会社の歯車がプログラムの歯車をつくるような環境って事か それは自由がないわな かわいそうだな...
400 :
372 :2013/06/29(土) 17:19:07.84
>>386 別のクラスに投げるだけなら、といのは、ファイル入出力や画面への出力は、
同じクラスにメソッドとして持たせるという意味合いで合ってますか?
それとも、ひとつのJavaファイル内に複数のクラスを書くということでしょうか?
何でもpublicメソッドなのは、正直、アクセス修飾子の使い方をわかっていませんでした。
401 :
372 :2013/06/29(土) 17:58:10.67
>>388 知りませんでした。メソッド名は
(setHead -> add)、(setPrimary -> setKeyColumn)、(set -> update)、(get -> select)
こういう風にすればいいですか?
> 正直、アクセス修飾子の使い方をわかっていませんでした ( ゚д゚ )
そもそも、コンセプトとして、いわゆるDBのテーブルを想定しているのか、Excelのシート、つまり 二次元のデータの入れ物を想定しているのかがわからない。 そういう意図を表明するという意味で、名前重要。
命名規則に話が集中しているのはそこがあまりにタコだと実装のレビューをしようにも読む方が 無駄な努力を強いられて嫌になるから。Tableクラスだけでもなかなかの忍耐が必要。 一人で書き捨てするコードならともかく、人に読んで貰うなら命名規則や慣用は要尊重。 無知を言い訳したオリジナリティーの発揮は単に有害。初心者こそ模倣から始めるべき。 ・適切なクラス名やメソッド名が解らないのであれば既存のライブラリのAPIから似たような ことをしているクラスやメソッドの名前を探して真似をする。 ・適切なコメントの付け方が解らないのであれば既存のライブラリのソースコードを調べて (クラス名に.javaとつけてググればいくらでもヒットする)真似をする。JavaにはJavaDoc 形式というコメントの付け方が定義されていて、これ以外の独自コメント形式は単に迷惑。 ・適切な変数名が解らなければ既存のライブラリのソースコードを調べて(以下略) 解らなければまず調べよう。 初学者ほど何故か調べない、真似をしない、コンパイル時のエラーメッセージも読まない不思議。
クラス定義時の一般論として ・フィールドは基本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へマッピングする方法を検討する。 続く。
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構文を使ってくれた方が読みやすい ・・・この調子で書いていくとどうなるのだろう・・・
お前のレスを読むにもかなりの忍耐が必要
408 :
372 :2013/06/29(土) 19:31:53.15
自分で調べてから質問しろ
410 :
デフォルトの名無しさん :2013/06/29(土) 19:58:21.58
>>408 構造の定義のことでしょ。
>>406 のコードでは列情報のことっすね。いまTableにはこの列がありまっせーていう情報。
>>408 スキーマとは構造のこと。テーブルのスキーマはテーブルの構造のこと。
テーブルのスキーマは一般的には列の定義の集合で、個々の列は名前や型を持つ。
テーブルの構造をスキーマと呼ぶ一方で、具体的なデータが入ったテーブルその
ものはインスタンスと呼ぶ。スキーマとインスタンスもDBの世界で使われる言葉。
なのでDBの素養のある人であればtable.getSchema()がカラム定義のリストを返す
のは簡単に想像出来る。これが命名規約や慣用の強み。
ただschemaに関しては素直にcolumnList、getColumnListでも良いかもね。
というかこれ以上現状のコードをレビューをするのもしんどいので、一度自分で
色々調べ直して書き直したコードと共に出直してくれないかな。
どんな勉強したらこんなに酷くなるの? 参考にしたものがどうしようもないゴミか、372が変な方向に理解しちゃったの? ちょっとjavax.swing.table.DefaultTableModelを見てみなよ
どんなレスを期待してコードを見てくれと言ってるのかわからないが、メソッド名を言われた通りに変えればOK 的なレベルに達してないから。
詳細設計書なんていらんだろ派がこの板には多いと思うが、こういうコードを見れば 必要な場合もあるということがわかるはず。
>>414 こういうコードを見ても設計何ソレ
なのがJAVAドカタの真髄
416 :
デフォルトの名無しさん :2013/06/30(日) 00:49:17.69
Windowsで無料でJavaを勉強出来る開発環境を教えて下さい
JDK + テキストエディタ
いるんだよなこういうジジイ発想の奴が Eclipseと答えるのがまっとうな人間
419 :
372 :2013/06/30(日) 02:14:52.38
>table.getAttribute(j) これはKUSOコード
クソと言うなら理由も書け
ちゃんと差分を見てあげようよ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で入力値の型チェックも実装すると素敵だと思う。 この調子で行くとよいんじゃないのかな。
最初のコードに比べたらだいぶマシになったな 入門以前レベルから初心者レベルまで話が進んだ
> getAllRecords Listの中身を全件配列にコピーする、そんな定番処理は手作りするまえにAPIと して用意されていないか調べるべきだろうね。もちろん存在する。 ListのtoArrayメソッドの使い方を調べてみると良いと思う。
> public final void insert(final Object... record) { finalに出来ないか検討するっていうレスがあったけどここまでする必要ない classにfinalついてるからメソッドのfinalは全部無意味 サブクラス作れないからオーバーライドできないもん 仮引数のfinalはあってもいいけど > for (int i = 0; i < table.getAllRecords().length; i++){ 繰り返しの度に時間がかかるメソッドが呼ばれるけどいいの?
426 :
372 :2013/06/30(日) 03:31:24.30
>>403 DBへの問い合わせ文をメソッドに、データ構造をListにしてみよう、と思って最初は書いていました。
>>404-406 ,410,411
JavaDoc形式のコメント、クラス定義時の一般論や、DataOutput, DataInputのインタフェースやスキーマの利用方法、知りませんでした。
レビューを参考にして、色々調べ直してから出直します。コードをレビューして頂いて自分の無知がよくわかりました。ありがとうございます。
>>412 なにも参考にしないで、自分の欲しい機能を追加していきました。
あと、スレの流れ的に言いにくいのですが、
>>408 ,
>>419 は、私ではありません。
このレスを書いていて発言する機会を失ってしまいました・・・。
> getAllRecords 仕様をはっきりさせるべきだろうね。今のコードでは確かに新しいレコードの 追加は出来ないけれども、個々のレコードの中の値の書き換えは出来る。 シャローコピーだから。それが嫌ならディープコピーを実装するしかない。 ディープコピーまでは不要、書き換え可能は承知で単にレコードの集合を参照 可能にしたいだけなのであればやはり返値は配列ではなくListにして、 return Collections.unmodifiableList(records);とでもするのが実装も簡単 だし全件コピーに比べてオーバーヘッドも少ない。 mainの中のループもfor(Object[] record: table.getAllRecords()){ ...と でもした方が読みやすい。
なんだと〜
430 :
420 :2013/06/30(日) 07:39:46.72
>>421 getAttributeはテーブルクラスのメソッド名として不適切
100歩譲ってgetColumnAttributeなら可。
それにgetXxxx(index)はgetterと紛らわしい
getColumnAttribute 冗長な名前使っていてイライラせん? getColAttr じゃいけん?
>>431 そういう省略は好まれない。人によって省略したりしかかったり、またどう省略するかがまちまちだと困る。
スペルアウトするのが原則。
434 :
デフォルトの名無しさん :2013/06/30(日) 09:45:57.18
>>433 コード読む人だろ。ColがColorなのかどうなのか定かじゃないだろ。
そんなとこでケチケチするちんけなやつのコードなんて見たくないってことだ。
コンストラクタでIO使うのが常識なのか? init(入力ストリーム)ってメソッド作ったら初期化はコンストラクタでやれ コンストラクタで読み込むようににしろって先生に怒られた
436 :
デフォルトの名無しさん :2013/06/30(日) 09:48:47.57
>>435 むしろ非常識でござろうな。IOExceptionをどう処理するつもりなんだ。
>>434 >>そんなとこでケチケチするちんけなやつのコードなんて見たくないってことだ。
さすがジャバラー(笑) 冗長な名前はムダなんだけどなぁ
バイトコードを解析した事ある?(笑)
>>432 >そういう省略は好まれない
ところでprintlnとconcatはどう思いますか?
>>435 >init(入力ストリーム)ってメソッド作ったら
コンストラクターが終わるとオブジェクトは構築されたと見なされる。
initを呼び出す前の状態が、クラス名の概念を表すオブジェクトとして適切かどうかによる。
>>436 コンストラクターでIOExceptionが出ると困るとか
どれだけジャバドカタは低脳なんだ。
>>439 >>initを呼び出す前の状態が、クラス名の概念を表すオブジェクトとして適切かどうかによる
どういう意味?
例外処理を当たり前に使うような手合いにはIO例外は外で受ければいいので気にならないんだろう C言語の感覚が強い人はエラーは戻り値で判断するようにしたくなる 例外は文脈が吹っ飛ぶのであまり論理的でないしな コンストラクタ内例外はnewの失敗としては検出できないのでそりゃ躊躇したくもなるだろう
>>438 組み込みメソッド名の中には、そういう歴史的な理由経緯の省略がある場合があるが、それはそういうものだと
理解するしかない。
そういうメソッド名を自分が作るクラスに使うのはOKだと思うが、複合名詞を自分のセンスで省略するのは
好まれない。特に、Javaの世界では、スペルアウトするのが好まれる。なぜそうなのかは知らないが、
Javaのネーミングの規範として、スペルアウトしろと言われるのを良く見かける。
443 :
440 :2013/06/30(日) 10:59:52.32
>>441 例えば編集可能な文字列クラス(OreString)を自作したとする。
new直後は中身のデータも文字列の長さも未定義で、
initして初めて長さ0の文字列になるとする。
initする前は「文字列」の概念として不完全な存在だから
OreStringというオブジェクトは成り立っておらず、
この設計はおかしい。
この場合、OreStringContextとかOreStringDataとか
いうクラス名にするか、
コンストラクターでOreStringを適切な初期状態にする。
Javaは常にTAB一段分のハンデがあるから長い名前は厳しいな
>例外は文脈が吹っ飛ぶのであまり論理的でない ジャバドカタは本当に頭が悪いな。
ここで
>>445 に論理的な例外を説明する義務が発生しました
・逃げる
・説明する
・SAVE
・ギムアップする
>>446 例外は「やりたいことが最後まできちんとできた」か
「やるべきことが全うできなかった」の二つしかない。
後者はcatchハンドラでまとめてエラー処理する。
極めて論理的じゃないか。
スペルアウトってなに? スキルアウトの親戚?
コンストラクタで例外はともかくIOは気持ち悪い インスタンスの構築とデータの読み込みは論理的に別の処理だからコードの上でも分けて欲しい
>インスタンスの構築とデータの読み込みは論理的に別の処理 それはクラスを「処理をするためのデータの集合」 としかとらえられない老害の発想だよ >449 精液を放出することです
>>448 try-catchで囲まれた処理が
( A, B, C, ......, J )
と構成されている
やりたいことが最後まできちんとできたなら、全てのA-Jは成功している
やるべきことが全うできなかった場合を
NOT( A, B, C, ......, J )
とすると、君ならA-Jのどれが問題となる処理なのかをどう決定するか
そしてそれをcatchに書くことに気持ち悪さはないのか
途中でやめ!で済まされるほど簡単な処理で構成されてるとは限らないんだよ
>>452 >A-Jのどれが問題となる処理なのかをどう決定するか
別のエラー処理をしたいなら
A-Jごとにtry-catchすべき
try-with-resource使ってライーしてれば あんま場合分けはいらないけどね。 tryだけ書いてcatchは書かないとかよくやる。
話が良く見えないが、コンストラクタの引数にストリームを渡すのじゃ駄目なのか?
>>445 ドカタは例外を理解できないのでだめ。
↓ こんな感じ
X x = new X();
try {
x.init(sutoriimu);
} catch (Exception ex) {//catchしないとコンパイルエラー
log.error(ex);
}
コンストラクタにストリームは継承した時に不便かな ファイルふたつに分けなきゃならんのはめんどくさい
DI或いはそれに類する仕組みを使え
IOExceptionが出るような処理を static { } イニシャライザ内に書いて欲しくないよなー リソース読み込みなら、まあ譲歩してもいいんだけどさー。
>>437 インスタンス名、クラス名、メソッド名は簡略化して短くすることは推奨されていませんよ。
ましてや、インスタンス名はクラス名より短くする必要はないと公式に書いているよ。
もう少しよく使われているオープンソースであったりを読んだ方がいいと思います。
上げられたコードでもっというなれば、
getAllRecords()ではなくて
getRecordsAll()ですね〜。
確かに細かいことかもしれないけれど、デザイパターン等しっかり学んでいる人から見ると
「インスタンス名、クラス名、メソッド名等の暗黙の了解・空気」等を感じ取れていないコードは稚拙に見えるのではないかな。
そしてそんなに難しく考えなくても、英語の強みをいかせるように書けばすんなり型にはめられますよ。
例えば、「getAllRecords()」は動詞と目的語が遠いですよね?
今回はたった三つの語の組み合わせなので大したこと無いように感じますが、後ろから修飾していないことに違和感を感じる人は多いと思いますよ。
日本語は頭でっかちに書いた方が美しいですが、英語だと・・・?
もちろん変数名等も。 連投失礼しました。
"get all records"と"get records all"をぐぐると・・・
ローカル変数までダラダラ長く書くやつは信用出来ない 経験的に数学出来ないタイプの人間が多い
465 :
461 :2013/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 タイムリーなレスサンクス。勿論ローカル変数に関してもです。
ググったけど、get records allとか言ってる奴皆無なんだけど。 ググり方が悪いのか?
公式がいつも正しいとは限らない 特にjavaは各方面からボコボコに叩かれるぐらい洗練されてない言語 当然公式が間違えるのは前提として考えるべき
もう名前の話はどうでもいいので Iterable 実装してください
>>466 それは後ろにAll置くなら単数系のが合うからかと。証拠にググると皆無ではないよ。
それでも少ないのはプログラムの処理より普段使われている慣用句的に名付けてる人が多いから。
プログラムの意味的にはAllが後ろで単数系のほうがニュアンスとして正しいのでは?
そういや一時期JFrameのgetContentPane()メソッドに疑問もってた なぜJPanelはlまでしっかり書いてるのにgetContentPane()はlを省略しちゃったのさ!って 後ほどpane自体で別の意味があることを知りなるほどと思った
>>470 そんなの考えるまでもなく一瞬で理解できるだろ…w
冗長なシンボル使ってると 自分がバカになった気がする
>>471 英単語自信あったのにpaneなんて単語にこれまで出会わなかった
eclipseかbeans使ってりゃ冗長でも苦だとは感じないかな
オートコンプリートあるし
WIN32APIのような引数なら長い方が俺はましに感じる
英語に自信があると専門用語も詳しいとか どれだけ自惚れが激しいんだ
自分の好みを人に押し付けてると 自分がバカになった気がする
スコープをちゃんと短くすれば変数の名前は頭文字や略称で十分 長い識別子かかなきゃわからないならそれは悪いコードになっている証拠
人はそれをコミュ障コードと呼ぶ 名をごまかし人目を避けることで何やってるかわからないようにしてごまかす 昨今のオープンソースやJavaの特性とは真逆 反抗したい精神・素直になれない精神はもはや中二病の延長ですまされるかなあ
カウンターはcountでなくcuntの4文字で おながいします
479 :
デフォルトの名無しさん :2013/06/30(日) 22:11:50.85
本当に下品 神聖なるJavaを汚すと罰があたるぞ!
JAVAが神聖とか冗談でもキモい だが1996年頃はそんな奴が結構居た
Javaは、すみやかに普及した。その速度は、異常なくらいだった
>>418 CLASSPATH理解してなかったりするやついるくらいだから、まずはIDE使わない方が勉強にはなるんじゃないか。Javaのどこを勉強するかにもよるけど。
>>482 Java1.2くらいまでは、おもちゃ扱いじゃなかった?
てことはやはりJVMあたりから?
>>483 ドカタの過半数はclasspathを理解してないんだから
無問題
そこはJVMじゃなくてJITだろ
単語省略するときは、まず母音から削るかな
省略するときは、適当な1文字にしてしまう
コントローラにSQLをコピペするだけの簡単な仕事です
1文字変数が許されるのはIteratorとcatch節までだよねー
>>493 そうだな、あとはv1,v2...と二文字にするべきだな。
コントローラーにSQLってのがまさにドカタの発想だな struts使ったまではいいが、MVCの分離が 理解できなかった典型例
496 :
デフォルトの名無しさん :2013/07/01(月) 17:46:12.19
mp4をmp3に変換する方法ってありませんか? ffmpegだと遅いのでこれ以外でお願いします
まず、エンコスレに逝きます
すみません文字列がsplitできるかできないかで判定するにはどうすればいいですか? 例えば String line = "go kyoto"; String verb = line.split(" ")[0]; String place = line.split(" ")[1]; のような場合は問題ないと思いますが、lineがsplitできる保証がないときの判定法が知りたいです。 例えばもしline="go";だった場合、 ArrayIndexOutOfBoundsExceptionがでます。 (スペース" "は無いけれど[0]のsplitはできている?どちらにせよsplitできないと[1]を指定した時点で例外でますよね。)
499 :
デフォルトの名無しさん :2013/07/01(月) 19:40:31.44
>>498 String [ ] result = line.split(" ");
してから
result.lengthで判定だ。
コントローラーにガンガンなんでも入れちゃうのはむしろRailsでよくある症例だと思う。 ぶっちゃげRailsももはやドカタフレームワークだけど。
>>498 StringTokenizerを使う
StringTokenizer st = new StringTokenizer(line, " ");
if (st.countTokens()>=2) {//分割できる
String verb = st.nextToken();
String place = st.nextToken();
}
indexOfでええやん いちいちオブジェクト作るなよ
Javaドカは作業ファイルを多用するので、その程度のコストは全く問題になりません
506 :
デフォルトの名無しさん :2013/07/01(月) 23:27:57.25
長大な文字列の極めて終端に近いところで最初の区切り文字が出てくる場合や最後まで区切り文字が出てこなかった場合 事前検索してからの分割はコスト的にどうなのだろうか
気にするな パフォーマンスなんか土方には理解出来ない cを使えるようになってからパフォーマンスとか気にすればおけ
土方仕事の実行時間はほぼ全てIOが占めるからね 細かいことはどうでもいいのよ
509 :
デフォルトの名無しさん :2013/07/02(火) 09:17:43.72
\x2022 Windows Internet Explorer ブラウザを終了して続行しろと出て、全く先に進めません。 ブラウザは全部閉じています。 検索して調べたけど、「\x2022 Windows Internet Explorer」 について全然でてこなくてわかりません。 どうすればいいのですか? 環境はWIN7、IE10です。
510 :
509 :2013/07/02(火) 09:21:19.56
失礼しました。 アップデートが上手くいかないのです。
511 :
509 :2013/07/02(火) 11:23:19.97
再起動してから試しても、何度やっても途中「\x2022 Windows Internet Explorer 」 ブラウザを閉じろの繰返しだったのですが、先程すんなりと完了できました・・・。 設定など一切変更していないので、何が原因だったかわかりませんが とりあえず完了できたので、お騒がせしてすみませんでした。
何のアップデートなのかも書けないとは 残念な奴だな
ごめんなさい、7 Update 21 から25へのアップデートでした。
windows 7のうぷだてとな
と見せかけた関数型言語マニアなのかもしれない
518 :
デフォルトの名無しさん :2013/07/02(火) 16:59:00.97
mp4とかの動画フォーマットからオーディオを抜き出せるライブラリってないですか?(mp4だけでもいいです) ググってもフリーソフトしか見つかりません
便利なオープンソースやAPIを使えてwebに強いほうが良いに決まってるのに。 そして初めての言語がオブジェクト指向な方が得に決まっている
521 :
デフォルトの名無しさん :2013/07/02(火) 19:41:53.19
>>520 ちょっと見てみたけど遅いです
直接吸出しできるのってないですか?
>>521 まず、直接吸い出せるツールを見つけてこい
ICカードを扱う無料ライブラリありますか?
>>523 まず正しく質問できるだけの知識をつけてこい
525 :
デフォルトの名無しさん :2013/07/02(火) 20:48:00.82
>>522 ffmpegで設定変えたら速くなりました
ありがとうございました
>>523 業務用で住民基本大腸カードを扱うなら
LASDECから入手が必用(C++)。
SuicaならたぶんC++向けAPIは提供されているだろう。
SmartOnなどの特定製品もSDKが販売されているだろう(たぶんc++)。
つまりお前のスキルでは無理。
それ以外のカードは無理ゲーに近いけど
意外とAndroidで探した方が行けるかも
ICカードは個人には仕様公開しないから働かないと使えないよ
>>527 何のICカードかにもよるが、個人で開発できるよ。
ICカードにJVM移植した「JavaCard」って、あれからどうなったの…
それはリバースエンジニアリングだろ 正式な仕様は非公開だよ
>>530 SDK買っても暗号化領域は読めないだろうし、そもそも書き込めない場合が多いだろう。
その意味では、法人でSDKを買っても仕様が全て公開されるわけではない。
逆に、個人でも見ることができる範囲でデータを読むことは出来る。
質問を読めない回答者が多いね 「ICカードを扱う無料ライブラリありますか?」 って質問なんだから、仕様が公開とか非公開とか関係ない ライブラリがあるのかないのか答えろよ
534 :
デフォルトの名無しさん :2013/07/03(水) 08:11:16.76
今すぐ手軽にJavaでprintfで文字を表示させるレベルの簡単なプログラムを組みたいのですが Windowsで無料で最短の開発環境を教えて下さい
eclipse
NetBeansのが手間無しだろ
537 :
デフォルトの名無しさん :2013/07/03(水) 09:01:31.78
何度もごめん eclipseでC++でいう .cpp と main関数はどう作れば良い?
mainを作るチェックボックスをクリックする
539 :
デフォルトの名無しさん :2013/07/03(水) 10:06:28.46
test って名前のプロジェクトを作って その中にパッケージを作って その中にmainって名前のクラスを作るところまでは分かったけど そこからが分からない main関数を作っただけじゃ実行出来ないの? 選択にはメイン型が含まれていません ってエラーが出る
main関数が入ったクラスを右クリックして実行ってすると 実行できるよ
541 :
デフォルトの名無しさん :2013/07/03(水) 15:48:35.13
ごめん 自己解決した 付き合わせてすまない
ムッキー
メンバの外部からの読み取りはOK、変更は禁止。といった、publicとprotectedの間くらいの設定をしたいです 大量のクラスメンバに対する大量のgetterメソッドを作るのが無駄な気がするので・・・ みなさんどのように対応していますか?
大量のgetterをIDEのプロパティ自動生成機能で作る 手打ちしなければ全く気にならない
なるほど、ありがとうございます。
アノテーションでgetterとかを自動生成するライブラリとかあった気がする 使ったこと無いけど
c++で言うとconst参照みたいなのはJavaには無いのですか?
無い
ない イミュータブルなオブジェクトを使うとか 防御的コピーするとかしろ
Javaでデータベースを操作するアプリを作ってるのですが質問があります 毎日レコードが追加されるテーブルがあります このテーブルを最新の半年分の情報とそれ以前の情報で別のテーブルに分けて管理する設計って悪い設計ですか? 新しい情報と古い情報は同じサーバーにあり格納するテーブルだけが違います アクセスは新しい情報に集中します
>>550 あまり良い設計だとは思わないけど、実物見ないと何とも言えない。
アプリの形態はWeb? DBMSは何? 一日に何レコード追加されるの? 1レコードあたり、およびトータルのデータ量は?
たぶん、適切なインデックスを張るとか、最近のデータだけmemcachedするとか、工夫の余地は色々あると思う。
あと、Javaよりもデータベースのスレで聞いた方かいいような。
DB板で聞くべき話だとは思うけどどのRDBMSを使っていてどんなスキーマでどんなクエリ を投げるのか解らないと誰もアドバイス出来ないと思う。 ただし一般論としては、そういうテーブル分割を手作りすると古いレコードの移動とか それに伴いアプリ側で生成するクエリを変更するとか、運用面で余計な手間やバグの 温床を抱えることが多い。RDBMSに詳しくない人が思いつきレベルで分けたのであれば 率直に言ってあまり関わりたくない、そういう設計。 まずはインデックスでどうにかならないか、あるいはシャーディングなどと呼ばれる 機能が使えないか調べることをお薦めする。
>>550 世の中にはOracleパーティショニングというものがあってだな
つまり性能上テーブルは分けるけど概念的には同一
というのは普通にあると言うことだ
>>550 RDB論的には間違ってる(ことが大半だと思う)。んだけどもじゃあ絶対そんな実装しないかというとそんなこともない。
実際そういうの作ったことあるし、よく見かけもするねー。
理由はパフォーマンスだったり運用上やら他のシステムとの兼ね合いやら。
要は状況次第ってことなんであまり回答になってないんだけど。
データ保存期間が数年で、保存期間MAXになるとレコード数が1000万レコードを超えるような トランザクションデータの場合、年あるいは月によるパーティショニングか、 「直近のテーブル+それ以前のアーカイブテーブル」という構造にすることは良くある。
556 :
デフォルトの名無しさん :2013/07/04(木) 10:43:24.31
abstractクラスのabstractメソッドの引数にenumを持たせたい場合 どういう設計をすればいいのでしょうか イメージ的にはenumを定義しないとコンパイルエラーになるようにしたい そしてenumの中身は継承先々で用意したいが、名は統一したい
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クラスを内部クラスとして宣言する、ということを強制する という意味なら多分無理。
>>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クラスで定義できないのかなと思って質問しました。
設計が変なんじゃないの? enumは1つのファイルで作って使う値を全部列挙して 具象クラスでその値を使う時に無効な値をはじくようにしておけば? public enum Foo { BAR, BAZ, //Bクラスで有効 QUX, QUUX, CORGE, //Cクラスで有効 } abstract class A { abstract public boolean isValid(Foo item); }
>>559 そうなんです。そしてそう書いてました。
だけど、Cクラスで使うときにBクラスでしか使わないBAR,BAZが可視なのを何とかならないかなとおもいました
Twitterが必要とする設計が遙かに小さいスケールでも有効かというと単にオーバーキルで 手間暇増えるだけだったり。 インデックス設計の評価やDBMS組み込みのパーティショニングを検討するに一票。
年度別テーブルみたいなアプローチはインデックス貼るコストも安くなるからな JPAが対応したら面白いがOracleさん的には困るか
>>550 それは水平分割って技法。DB設計ではアンチパターンに含まれる。
レプリケーションやインデックス、その他もろもろ全ての「正しい」解決法を試して
それでもパフォーマンスの問題が解決しなかった場合のみ使って良いというもの。
いつになったら板違いの話題をやめてくれるのかな
566 :
デフォルトの名無しさん :2013/07/04(木) 22:03:54.36
>>565 Javaの話題あんの?ないんだったら黙ってろよ。
>>564 何言ってるんだ。
パーティショニングこそ水平分割だろうが。
それに、レプリケーションなんか関係ないし。
半年分というのが、どういう機能要件なり性能要件に基づくものかがわからない限り、 どんなアドバイスも的はずれな可能性大なんだけど。
>>550 は悪い設計ですか? と聞いてるだけだから
満場一致で悪い設計です と答えて終わりじゃないか
570 :
デフォルトの名無しさん :2013/07/04(木) 23:22:52.28
半端な知識と仕込みで手を出しても無駄に苦労するだけの悪い設計。
JDBCは単なるSQLインタプリタなので、 デザパタ的にあまりおもしろい設計はできない。 他のDBライブラリはしらん
JDBCはSQLの中身には関知しませんよ クエリとデータを右から左、左から右へ流すだけ
SQLインタプリタになっているJDBCやドライバの実装がどれほどあることやら。
「リレーショナルDBの世界がどうオブジェクト指向化されるんだろ」と JDBC発表にワクテカしてたのは俺だけか。 SQL文を文字列で用意する必要があると聞いてがっかりしたず 「Table」に相当する抽象クラスがJDBCに出てこないってどういうことよ
実質スキーマレスになってしまうからじゃないか? それリレーショナルなん?
JDBCにODBC相当物以上を期待していた人なんていないでしょ。
あのころはオブジェクト至高(キリッじゃなくて write once run everywhereで売ってたような
>>576 言ってること目茶苦茶すぎ
>>574 が言ってるように、受け流すだけを担ってこそオブジェクト指向だ
おめぇさんはよぉ、銭湯いって風呂上がりのフルーツ牛乳が見当たらないからって
キレちゃうような輩なのか?
俺はきれるけどね
ただ、キレる相手は番台さんじゃねーってこった
javaee7にlinq入ったんだってね コレクションだけらしいしViewのためだけにあるのだろうけど
w
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が守ってるみたいなイメージ。
あっそ 他の全員は知ってるから粉みかんは3行以内で頼む
あぁコンストラクタ名が間違ってるのは仕様でござます
抽象クラス使うやつは設計下手なザコ
抽象クラス使えない=クラスすら使えない(クラスはオブジェクト) ってことに気づいているのだろうか クラスも使えないとなると設計がうまい下手の段階までいけない件について…
意味不明 抽象クラスなんてテンプレート実装作るだけの道具にすぎない 多態はインターフェイスが基本で、抽象クラスは必須ではない
>多態はインターフェイスが基本で インターフェースの無い言語はOOPではない と言いかねないJAVAドカタの珍説には いつも驚かされます
最近ちょくちょく抽象クラスがどうのこうのって話になるな 同じ奴が繰り返してるのか?
可能な限りインターフェースってのは全く同意だよ そもそも公式がうたってますし だけどいつも何でもかんでもインターフェースにしちゃうのは大反対 特に、extendsできなくなるのは場合によっては保守性が上がる でもって、インターフェースが一番活きるのはこの時なんだよね〜仕様的にも。
Java 8からはインターフェースも実装を持てるようになるから 抽象クラスと何も変わらなくなるよ
extendsの大部分は委譲で済んじゃうんだけどな。IDEの自動生成も使えるし。
>>594 抽象メソッドはprotectedにするもんだ
インターフェイスじゃできない
protected使うなんてレアケースだろ。一般論として語るのは……
まぁでも何もかわらなくなるってのは 先の「抽象クラス使うやつは…」のくだりと同じで極論すぎるよ そしてprotectedがレアケースだとも思わないなぁ それはニアリイコール抽象クラスをレアケースといっているようなもんだし…
Template MethodやFactory Methodはprotectedで十分なはずでしょ MS系だとそれこそ仮想メソッドはほとんど全部protectedだったりするが Javaってそのへん適当だよね
abstractクラスのfield活かした方が明らかに良い場合も無理してinterfaceなの? それはちょっとどうなんだろう interfaceだと子クラスに丸投げだよね?
ファクトリメソッドをprotectedはありえねーよ。 テンプレートは使う側ならprivateでなんも問題ないな。 仕様の方ならインターフェースで十分っつかpublicにしないと不便極まりないし。
>>601 >privateでなんも問題ない
privateはオーバーライドできません
>インターフェイスで十分
デザパタ知らないの? 移譲を使った設計と混同してるのでは?
ある機能を実装するとき、個々のクラスやら何やらで振る舞いが違う部分と それらを呼び出す形で固定化できる部分に切り分けるのがテンプレートメソッドパターンなわけで。 固定化してる方はオーバーライドする必要が全く無いから、 外部からアクセスする必要がないならprivateで何の問題も無い。
Factory Methodがprotectedで十分とか
605 :
デフォルトの名無しさん :2013/07/06(土) 10:26:40.12
どう考えても両方使うだろ… interfaceだけにしろ、protectedだけにしろ、privateだけにしろ… 何も考えていない証拠だ
抽象クラスはそのクラスの実装者からみたら窮屈に感じるが protectedメソッドを実装するだけだと副作用が無くて安全にも感じる ディスパッチ目的の抽象クラスだと実装がやたら手続き型でも気にならない
>抽象クラスはそのクラスの実装者からみたら窮屈 イミフ >ディスパッチ目的の抽象クラス イミフ
まずインターフェイスを用意して、それを実装する際に楽をする、してもらうために 抽象クラスも使うかな。両方使わないと不便。 APIに立ち現れるのはインターフェイスだけで実装クラスは基本隠す。
抽象クラスは何がダメかってスタンドアロンじゃない前提の癖に再利用性が悪いところだ
あるインタフェースのひな形だったりフレームワークへのエントリポイント だったりするからな。ある方策に従わせるための抽象クラス
>再利用性が悪い 設計がKUSOなだけじゃね?
逆に他に実装可能な手段があるのにあえて抽象クラスを使うことが正解というケースがごく稀にしかない
ある抽象クラスのサブクラスが1個しかないならKUSO 分ける意味ねーもん 将来的に使いたいとしてもその将来っていつ来るの?って話
派生クラスに共通する役立つメソッドを抽象クラスで提供しよう ↑抽象でないクラスに分離してメンバに持たせるのが正解
>>613 例え一個でもわけた方がいい場合は間違いなくあるよ
だがabstractクラスはサブクラス沢山抱えたときにまとめて扱うのがいいよな
abstractクラスを継承したabstractクラス みたいな構造のデザインパターンを経験しないと メソッドにつけるfinalの有り難みが勉強できないんじゃないかなとは思う
出たー酷い失敗設計
将来どこを修正する可能性があるかを予想できないと抽象化は難しい 二度といじらないコードを抽象化するのは無意味だ 工期、予算の都合で今はしないけど次のサイクルでこれこれやる ってくらい確実にわかっていなければ抽象化する必要はない 抽象化しなかった場所に修正が入るってなら設計上のミスだ かむしろマネージャーの開発スケジュールミスだ
テストの為に抽象化することもあるんですが
>将来どこを修正する可能性があるかを予想できないと抽象化は難しい んなこたーない。 現在の機能要件と拡張性要件に基づいて 設計するだけ。
要件なんてあてにならない 未来は神様にも予言できないんだよ
なんか良くわかんないんだけど、具象クラスしか作らないのかな
将来のためのインターフェースなんて、
>>618 くらいじゃない?
あとは、縦割り部署のインターフェースとか、、、
昔、DB部門が作ったインターフェースで、笑えないヤツがあったのを思い出した
テーブルの指定がひとつだけで、結合が全く出来ないという
ちょっと何言ってるかわかんないですねー
Javaやるとこうなる シャブみたいなもんだよ
テーブルごとにクラス分けしててselect XXX from A,B(A,Bはテーブル)が考慮されてないってことか 通常のオブジェクト指向でもそうだが、ふたつのクラスの相互作用を表す方法に苦慮する クラス(A+B)を作るのは負けかなって思ってる
相互作用は簡単なものならイベントを使う 複雑ならプロトコルをクラスにする 通信対象の選択自体が複雑ならルーティングもクラスとして作る 面倒だが基本中の基本だろ
一部だけ人に書かせるときはAbstractが楽。特に土方に。
>>626 そこでLINQですよ
C#の劣化版猿真似は得意だろ?
>>628 最悪だろ
土方に正確なオーバライドは無理
>>629 まともな設計ならLINQはあくまでモデルの中で使うので同じことですよ
abstractクラス継承したabstractクラスはデコレータパタンとかでたまにみるね
634 :
デフォルトの名無しさん :2013/07/08(月) 05:41:47.78
Eclipseで、 実行(Ctrl + F11)のときは文字列を出力させず、デバッグ実行(F11)のときだけ文字列を出力したいです。 プログラムの中でデバッグ実行かどうか判別すればいいと思うのですが、 System.getProperties() で確認したところ、デバッグ実行のときだけセットされるプロパティは無さそうでした。 何かいい方法ありませんか?
リファクタリング機能をつかう
デバッグ実行のときにプロパティをセットすればいい
デバッグ実行だと動作遅くなるからベンチマークとってとか、間違ってそのままリリースして 遅い端末だとデバッグ情報が見れるw
>>634 デバッグ実行時だけログ出力レベルをfineにすればいい
普通はlog4jだろうが俺はしらん
639 :
634 :2013/07/08(月) 21:16:20.57
すみません、説明不足でした。 頻繁に実行とデバッグ実行を切り替えたいため、 ソースコードや設定ファイルを変更することなくやりたいのです。
main メソッドを持つクラスを 2 つ作って起動し分けるとか
だったらコマンドライン引数でいいだろ
最初のブレークポイント前後が100ms以上開いたら 「現在デバッグ中」フラグが建つということでどうだ?
AspectJとかで実行時に文字列出力コードを織り込むとか
>>630 なぜInterfaceやスクラッチだと正確にできるの? どれでも正確にできないなら比較の問題。ベターなもので満たせないなら、受け入れテストしてない方が悪い。自分がサボってるのを土方のせいにするなよな。
visual studio+C#でできるデータベース操作のパクリはjava+eclipseには無いのですか? テーブルアダプタやデータソースのことです
visual studioがわからん人にはどういう機能かわからんからなぁ。 表形式でデータ見られたり、定義情報が見られたりするやつのこと?
>>646 データベースへアクセスするためのクラスを自動で作ってくれる機能です
コードを一行も書かなくてもデータベースへのアクセスからフォームへのバインドまでしてくれるすごいやつです
>>647 その程度なら、なければ自作しろ。
俺はそんなの全然ほしくないが。
山ほどあるから。
JDBCが好き
最強のドカタ言語を舐めるなよ
データベースからAccessみたいな環境を一式用意してくれるみたいな? そいやJavaでクラサバとかしたことねーなぁ
社会人になればOracle Databaseは当たり前
オッス オラ狂う
でもメディアにのる格好いい事例って大抵はEC2の上にMySQLやPostgreSQLをデプロイ したようなのが最近は多い。 実際に儲かるかはともかくとしてOracleを使った事例ってあまり若い人にアピール しないというか、こういうシステムに関わってみたいという対象ではない気がする。
そりゃJavaの用途のほとんどに言えることだ
>>656 機能に隔たりがありすぎるその3つを同列に考えちゃうような「若い人」は、まぁロクな人間じゃないな
せいぜい使い捨ての歯車としてこき使われるのが関の山の人生しか待ってないだろう
DBMSと言われて真っ先にMySQL、PostgreSQL、Oracleの3点セットを挙げる人間は使えないね RDMSしか使えません、データモデリングも関係データベース用のものしか知らない素人ですと白状してるようなもの 「ぼくオブジェクト指向しかできません。でも今はオブジェクト指向が流行ってるから困らないでしょ? Cの構造化プログラミングも、関数プログラミングもできないけどそんなの流行ってないから問題ない」 って言ってるのと同じだぜ
関数プログラミングは注目されてるだろ 皆メニーコア時代に備えていつ手を出そうかなみたいに
RDBMSを馬鹿にする人間ほど関係データベース理論を勉強していないしそれが必要となる スケールでNoSQLの類を運用した経験もない件。 RDBの理論的理解がRDBの世界でしか役に立たないと思ったら大間違い。
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 のクラス・ファイルが見つかりません。ビルド・パスを修正してから、このプロジェクトをビルドしてください
>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。
>>659 いま構造化プログラミングやる必要ってある?
C言語書いてるとすごい苦痛なんだけど
Javaは構造化プログラミング言語でもあるし オブジェクト指向なんかより遥かに重要な概念だろ
666 :
デフォルトの名無しさん :2013/07/14(日) 09:55:37.54
>>664 は構造化プログラミングを構造体中心のプログラミングだと思ってるんじゃなかろうか。
メソッドの中身は全部アセンブラで書くよ
構造化プログラミングって、 ・gotoを使わずに、ifやforやwhileなどを適切に使う ・なるべく大域変数を使わずに、ローカル変数や引数や戻り値を適切に使う ・関数や構造体などを使って処理やデータを上手に抽象化する ってことで、オブジェクト指向の基礎にもなってる。 C言語を使う=構造体プログラミング、ではないよ。
ああ確かに構造体プログラミングではないな 全面的に正しい
最近はCでもオブジェクト指向が基本だからねえ
Objective-C 限定の話?
再入可能なモジュールを多用するスタイルをオブジェクト指向と呼ぶなら
>>670 は間違いでもない
オブジェクト間メッセージパッシング語る上で ローカル変数の有無は必然でもなんでもないのでわ
カプセル化って言葉があったけどモジュール化と何が違うの?
>>674 モジュール化は関連する処理やデータをまとめること。
カプセル化は、モジュールの内部情報をモジュールの外から勝手にいじられないようにすること。
newとmallocって何が違うの?
マロックはメモリ確保するだけ ニュウは時と場合によるが世界を滅ぼす事もできる
678 :
デフォルトの名無しさん :2013/07/14(日) 14:46:54.36
>>676 newしたらコンストラクタが呼ばれるから、
malloc + 初期化処理がnewだと思うよ。
>>678 つまりC言語でもオブジェクト指向プログラミングはできるってとこですね
そりゃできるでしょ 第一引数に目的オブジェクトのハンドラを渡す関数用意するだけ 普段からFILE構造体なんて中身知らずに使ってるだろうし
要するにC言語はオブジェクト指向言語ってことですね。
682 :
デフォルトの名無しさん :2013/07/14(日) 16:17:05.89
デフォルトでは指向してないので オブジェクト可能言語
ついでに言わせてもらうとperlは(selfを渡す)オブジェクト趣向言語
おまえらJavaの話をしろ!!
ゴスリングは今何やってますか?
686 :
デフォルトの名無しさん :2013/07/14(日) 16:42:40.80
687 :
デフォルトの名無しさん :2013/07/14(日) 16:49:25.00
なんか楽しそうでいいですね^^ 日本人だったらなんか会社を追い出されたとかブツブツ言いながら死んでそうです。
>>663 ありがとうございます!
無事できました。
ご指摘の通り、手動でパスを通したのでj2ee関連のjarが足りなかったようです。
こんな感じでmvnコマンドでプロジェクト作ったのですが、eclipseからやった方が良いんですね。
mvn archetype:create -DgroupId=com.example -DartifactId=sample
>>664 上から下に流れるプログラミングしか読み書きできない奴のことを言っているのか? 同じようなコードがでてきたらまとめてるとか言うやつ。
そういうやつらが、わざわざJavaを使う意味がわからない。
>>680 >普段からFILE構造体なんて中身知らずに使ってるだろうし
それはオブジェクト指向じゃなくて
ただのカプセル化
fclose(fp) はオブジェクト指向じゃなく、 fp.close() だったらオブジェクト指向って考える派?アホなの?
そういう奴等だからこそJava使うんだよ なんたって現代のCOBOLだからね
692 >fclose(fp) はオブジェクト指向じゃなく えっ、明らかに違うじゃない? オブジェクトが存在しないし オブジェクトに対するメッセージもないし ポリモーフィズムも実現できていない
ポリモーフィズムは実現できるぞ
構造体にコールバック関数を登録したりとか普通のテクニックだよな
個人的にはコンストラクタ、デストラクタはオブジェクト指向の成果だと思ってる。 Cではやりずらいだろ? しかしデストラクタを捨てたjavaの思想は間違ってた。 オブジェクトの開放はGCで結構だがスコープが終了したときに実行されるデストラクタは あった方が良かった。
じゃあJavaからJavaに欲しかった機能を充実させたJavaライクな新しい言語を作り出せばいい
>>696 オブジェクト…fp
オブジェクトに対するメッセージ…fclose(fp) = fp.close()
Cでオブジェクト指向のAPIというとGTK+あたりが良い例だと思う。
>>699 デストラクタはガベコレとあんま相性良くないだろ
AutoCloseable+Closeableでだめなのか?
try-with強制するルール作ればよい
>>700 Ceylonがそういう位置を目指してるんじゃなかったっけ
今どのぐらい開発が進んでるのか知らないけど期待できるものになってるのかねえ
シェアという壁がある どんなに他が優れていても 数の暴力に駆逐される エクセルみたいなものだ
ベターJavaとしてはC#やScalaという超優秀な子がいるだろ あくまで言語仕様に限った話な
extends = 継承 implements = 委譲 っていう認識は違いますよね? なんかそういう認識で物言っている人が多くないですか? 例えばabstractクラスの利用は設計によって委譲にもなりますよね。
>>708 普通にimplementsは「実装」でしょ。
その実装が継承によってなされているか委譲によってなされているかフルスクラッチかは
知った話ではない。
>>708 > なんかそういう認識で物言っている人が多くないですか?
そうか?
interfaceを実装するという自然な英語になってるだけだよ
ワザワザ分けるなよめんどくせえ cls suborimpl : baseorintf { でいいだろ タイプ数へらせや
すみません質問があります。 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 に近くなりますか?
private final int defaultValue;
>>714 finalってfieldでしか一度っきりの代入ができないのかと思ってました。
field以外でも考慮されるのですね。勉強になります。
>>715 むしろ宣言が主目的であって、代入のためにあるわけじゃないでしょ。
>>715 field以外でも考慮されるが、そこのdefaultValueはfield。
うちの周りだと継承はsuperへのgosubと認識している人が多い(苦笑)
gosub...今こんなの使える言語って生きてるのか?
ホスト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側ではリードできないのかわかりませぬ。ぼすけて ちなみにマーク、リセットはサポートされていません
in.read的な処理 の終了判定がマズイに1票
ImageIOのキャッシュ切ってパケットモニタしてみよう
書いてるソースコード意味不明だけどnewLine()していないに一票 大抵これが原因
(キリツ
わざわざクラサバ手作りせずにJettyとCommons httpclient使っておけば簡単だし 色々使い回しも効くのに無茶しやがって・・・(AA略
一回クローズしてから新しいインスタンス作ってないのに動くわけなかろうが
>>720 クライアントコードの詳細がわからんので何とも言えないけれども、少なくとも
サーバー側のこのコードでは多分クライアントは動きようがないと思う。
具体的には、これでは受信する側が個々の画像のサイズを知る方法が無い。
ImageIO.writeはただ画像データのbyte[]を送るだけでそのサイズは送らない。
なので例えばImageIO.readは何処までバイトデータを読めばよいのか解らないので
「in.read的な処理」のところで次のデータが来るまでずっとお口を開けて待って
いる、そんなところだと思う。
解決策は一つは画像一つ送る度にソケットをcloseすること。
ソケットをcloseされると流石にそこで画像データは終わりだと判断して次の処理に
進むはず。一つ目の例が動くのもこの理由。
もう一つはImageIO.writeで直接ソケットのOutputStreamに出力するのではなく、
一端ByteArrayOutputStreamに画像データを出力して、ソケットのOutputStreamには
まず画像データのバイト数を送ってそれから画像のバイトデータを送る。
受ける方もまずバイト数を取得してそれから指定バイト数のバイトデータを読む。
最後の案として
>>725 にも書いたように特に理由がないのなら今更プロトコル手作り
せず素直に既製ライブラリが充実したHTTPを使う方法。
サーバー側が画像データと次の画像のURLの組をレスポンスとして返せば万事解決。
レスポンスのヘッダに次の画像のURLを埋め込んでも良し、マルチパートレスポンス
を使っても良し。
で、JDK8でもFX2はまだなんかいな まともなIBはよ作ってNBに統合してくれ
729 :
720 :2013/07/16(火) 17:38:11.81
用途は画面キャプチャして秒間15回〜30回くらいで動作させたいのですが ソケット使い捨てだとandroidはGCでとまりまくりんぐ イメージはいったん配列にしてサイズを教えてやってみようと思います VNCでいい感じに動くやつはフリーであるのですがPC、andoird端末共にリソース消費が激しいので 自作することになりました
Androidでリモートデスクトップ?
731 :
720 :2013/07/16(火) 18:31:09.60
要件はPC起動のゲームをandroid表示でプレイ 制御はゲームパッドなので特定の座標を覗くだけの単純なものです 要件を満たす高ビットレートなVNCだと私の持ってるEVO3Dは熱で再起動するので 今回のものを作成するに至りました。
今web上のファイルアップロードってどの言語で書いたものが安定して使われていますか? またライブラリ等スタンダードなものがあるのでしょうか。 GWTでピンポイントに組み込みたいのですが、あまりファイルアップロードにGWTはあまり使われていないのかな?
質問しておいてなんですが、やはりApacheのFileUploadライブラリー?
apache commonsばかりやな。 他の選択肢あったら教えて欲しい。
Cベースのオブジェクト指向ライク言語作ったら流行るかもしれないと思ってるんだが。 objective-CやC++じゃなく、Cコンパイラだけでコンパイルできるものを。
Objective-Cは馴染めないな・・・Xcodeが糞なのかもしれないが・・・
・input type="file"で選択した画像をinput type="submit"でpost ・actionに指定したServletのdoPostでデータを受け取りImageIOで書き込み これでactionで飛ばしたServletのURLで画像が表示されるようになったのですが、 画像に直接アクセス?するのではなくページの一角として画像を表示させる方法がわからないです。 できればsubmitボタンでのページ遷移もなくしたいです。
IFRAMEにpostすればいい
>>738 名前付けたiframeをtargetに指定するとできました感動。
だけど保存した画像のパスが分からないと扱いづらいですね・・・
何故か保存先がワークスペースの.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/プロジェクト名/サーブレットでmkdirしたフォルダ/
になっているようです。
>>739 画像ファイルをサーブレットが返すようにすればいい
>>740 う〜ん?
PrintWriterで<img src=>を書けということかな?
教えてもらった方法でうまくいったけどiframeをstyle="display:none;"しておいて
formのonsubmitで$('iframeID').style.display = 'block';しても表示されない
>>741 の「表示されない」というのはiframeが表示されないという意味
ああ 才能が無いんだわ
ネットワーク系初心者です サーバーからjpegやtxtのファイルを標準出力したいんですが どこから手をつけていいのかすらわかりません…
標準出力の意味を調べるところから
PHPなら簡単なのにね
>>746 用途に応じて適切なプロトコルを選んで(HTTP, TCP, UDPなど)通信すればいいだけ
>Java Servlet は JavaEE の一機能 まじかよ、DLしたのJavaSEだべさ
>>750 Eclipseの中にjavaEE入ってるくさい。
>>751 おまえJava EEが何かわかってないだろ
いつぞやの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のような感じにしてしまうお茶目機能をどうにかしたいので
お暇な方付き合ってください
>あと一歩で力尽きそうです そうか。早く力尽きてくれ。なるべく早くな
ひ ひどいお と言ってるそばからBitmap開放し忘れに気が付いた ナイス俺
>>753 読んだ感想
・available を使うな
・read, skip の戻り値を無視するな
・スレッド間の同期を synchronized しろ
・ソケット 2 本使って無駄に複雑化する意味ある?
感謝 availableを使うなという記事は幾度となく目の当たりにしましたが リモートにあるファイルを送ってもらうわけではないので 書きこみ途中のデータが切れてしまいます。何か良い方法があれば・・・ ストリームを3本以上使うかもしれなかったのでとりあえず、最小の平行処理にしております 作成中の配列はスレッドセーフになっています。 ソケットが複数なのは ストリームに落としながら画像を用意するためです 画像は940x540のものをリサイズするのに60ms消費します 送信するのには60msより多く消費します。2本あることで31ms程度まで落とすことができました 3本使うと25ms程度になりますが。複雑すぎたので2本に落として今に至ります 未だ解決に至らない以下のような状態が謎すぎます ぼすけて 11:20:29.377 GO 1 11:20:29.787 GO 1 11:20:30.094 GO 2 11:20:30.216 GO 2
>リモートにあるファイルを送ってもらうわけではないので書きこみ途中のデータが切れてしまいます イミフ >2本あることで31ms程度まで落とすことができました それは何かおかしい。見直せ
> 書きこみ途中のデータが切れてしまいます。何か良い方法があれば・・・ read に渡す length は最大値であって、必ずしもそのバイト数読み込むわけではない read は 1 バイト以上 length バイト以下のデータを読み込み、実際に読み込めたバイト数を返すのが仕様 必要なだけ読み込めるまで呼び出し側でループする必要がある skip も同様 > 作成中の配列はスレッドセーフになっています。 またまた御冗談を > ソケットが複数なのは ストリームに落としながら画像を用意するためです 1 本のソケットでも、応答を待たずにひとつ次の画像を流しておけばいいのでは 2 枚目の画像を流してから 1 枚目の応答を待つ 3 枚目の画像を流してから 2 枚目の応答を待つ とか
760 :
759 :2013/07/18(木) 12:01:26.16
>> 作成中の配列はスレッドセーフになっています。 > またまた御冗談を 訂正。 作成中の配列は確かにスレッドセーフ。 しかし作成中だけ保護すればいいわけではない。 しかしソケット 1 本化すれば自動的に解消するからわりとどうでもいい。
720です ■画像読み込み中 □空白 ◆書き込み中 ◇画像配列にしてるなう 1番■◇◇◆◆■◇◇◆◆■◇◇◆◆■ 2番□■◇◇◆◆■◇◇◆◆■◇◇◆◆ 3番があると 1番■◇◇◆◆■◇◇◆◆■◇◇◆◆■ 2番□■◇◇◆◆■◇◇◆◆■◇◇◆◆ 3番□□■◇◇◆◆■◇◇◆◆■◇◇◆ ホスト側から見たらこんな感じになる予定?です クライアント側は ■画像配列読み込み中 ◇配列を画像にしてる中 ◆画像をVIEWに表示してるnow □空白 ■■◇■■◇■■◇■■◇■■◇■■ □□□◆◆◆◆◇◆◆◇◆◆◇◆◆◇
>>1 本のソケットでも、応答を待たずにひとつ次の画像を流しておけばいいのでは
これやってませんでした。思考停止してる
ほんとありがとう
セマフォ使いなよ
せまふぉは1.5のときだったか。師匠が重とかなんとか得意げに言っていたので つかったことなすORZ 同期よりいかに平行処理させるかを追求する人でした(遠い目 今はストリーム1本で762ちまちまやってます 見た目上の読み込みはうまくいってるんだけど decoder->decode returned false length=524288; regionStart=0; regionLength=1042778344 これとたたかってます
目的にもよるけど、今やるべきことの裏でフル稼働するプログラムに気配りできる余裕は自分には無いな ほとんど寝てるようなスレッドはある意味ありがたいし、よほどシンプルなプログラムでない限りそういうスレッドが存在してるもの
セマフォとか言い出す奴はたいていジジイ
>>767 > フル稼働時。きっちりCPU100%になるよう
そんなことに意味あんの?
君のそれは原状からの逃げだろう 大げさに言うと50%で頭打ちのマシン4台が2台になる計算
gcに想いを託すのはとんでもないな(笑)。 いかにgcとは無縁の世界でプログラミングするかがむしろ重要で、gcに意識が言った時点でもはや何も言うまい状態 しまいにはnull代入なんていう恩をあざで返しちゃう始末・・・
771 :
ピラフ :2013/07/18(木) 14:23:36.92
論理演算について教えてください。 boolean型の変数aと boolean型の変数bがあったとして。 (a && b) || (!a && !b) という評価をしたいです。この式をより簡単な式で表すことはできますか? できるようならその式を教えてください。お願いします。
CPUに余裕があることが許せない人っているよネー(*´・д・)(・∀・`。) ましてやその矛先がレンタルサーバだったりするよネー(*´・д・)(・∀・`。) ヤダヤダ(*´・д・)(・∀・`。)ネー
ド・モルガン(1966年
XORの質問?
!(a ^ b)
こいつの場合、答えを知ってて釣り質問してる疑惑があるから答えたくないんだよなー
778 :
ピラフ :2013/07/18(木) 15:06:27.23
>>778 booleanのaとbしか登場しないんだから、4通りの組み合わせの演算結果見れば、
どう書き直せるか一目瞭然だろ。
!(a != b)
(a != !b)
784 :
ピラフ :2013/07/18(木) 15:50:49.20
>>779 そーかー。それでいーのかー。ありがとうございました。
>>780 黙れ。わからなかったから聞いたんだ。
>>779 boolean値比較のxorの存在意義
>>782 人差し指立ててる顔文字に見えてきた
(a != !b)<ヒント!
(new Boolean(a).equals(new Boolean(b)) === true)
>>779 一番シンプルだね
というかこれが正解だね
Boolean.TRUE.equas(new Boolean(new Boolean(a).equals(new Boolean(b))))
>>771 (a & b) | (!a & !b)
(a == b) || (!a == !b)
特定の画像で必ず落ちるということが発覚するも回避策がnativeに依存しそう 結局decoder->decode returned false で心折れた ソース一緒に見てくれた方 感謝!感謝!
((a === true) && (b !== false)) || ((a !== true) && (b === false))
776が必死
一般的な論理演算の質問なら
>>779 が正解だけど
質問者がJavaの論理演算の話と意固地に主張しているからには
>>790 が適切な回答だろ?
797 :
ピラフ :2013/07/18(木) 18:08:59.04
>>796 ピラフは
>>779 の書き方にしたよ。
どれが適切かは人それぞれということでいいんじゃないでしょうか。
>>796 790はビット演算だろ
論理演算と言ったらboolean(真理値)の演算を指すのでは
>>797 「どれが適切か」は確かに場合に依るけど、
一般的には読み易さを損なわない範囲で演算回数を減らすのが適切でしょう
799 :
798 :2013/07/18(木) 18:26:01.55
と言うか790が適切ってのはよくわからない (a & b) | (!a & !b) と書きたければ ~(a ^ b) と書くのでは
>>798 Java の &, |, ^ 演算子は、両辺が boolean なら boolean を返すよ。
新人の書いた
if (str == null | str.length() == 0) ...
が実行時エラーになっててあせった。
801 :
798 :2013/07/18(木) 19:01:17.89
>>800 返すのは知ってるけど、&&, || があるのに &, | を論理演算に使うのは不自然ではないか?
単に俺がC言語出身者だからか?
>>801 いや プライドがあるんだろうねぇ
どう書こうと、内部的には
false 0
true 1
のint を返してるんだけどねぇ(わらい)
>>801 むしろこの文脈で論理演算&|の代わりに
条件付き論理演算を使う意味がわからない
Cとは&|の意味が言語仕様で違うんだから
どう記述しようと 内部的には同じになるのに わざわざ見ずらい書き方をする人は......バカですか?
>>799 booleanはnumeric typeじゃないから ~ は不自然
booleanをそのまま扱うえる ! & | ^ && ||で済ますのが自然
~ ^ & | はビット演算に使いましょう boolean演算には && ! || == != を使いましょう
嘘乙
>>809 boolean intで処理してるのに なにかっこつけてるの?
アンカはなしで
チュートリアルを無視するとはいい度胸だな
>>803 > 条件付き論理演算を使う意味がわからない
その意味がわからない
>>813 論理演算をしたいのに
どうしてboolean logical operator &でなく
conditional-And operator &&を使うの?
>>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 &&
この辺を読み直した方がいい
>>816 C上がりの人が妄想で書いたんでしょ
&&がlogical ANDなんて、ウソも甚だしい
妄想の嘘のチュートリアルを書いたオラクルに通報すべきだね
半角板じゃないんだから何か言えよ
&&は&に似ているが、&と違い&&は左側の引数の評価がtrueのときのみ右側の引数を評価する
そんなこと書かなくても821以外は理解してるのに
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);
>>822 このスレにはガチの初心者はいなかったってことだな、安心した。
825 :
デフォルトの名無しさん :2013/07/18(木) 23:24:36.26
(^q^)
&は論理andで&&が特殊な論理andなのは間違いない。 だけどJAVAドカタとCジジイにその二つを 区別することなんか不可能。 だからよく使う&& ||に統一しておくのが無難。 ドカタに言語仕様を説教しても無意味だからね。
Javaドカの世界では hoge.isEnabled() && hoge.move() のようなコードは 「可読性と保守性を損なう」としてレビューで叩かれるので 一時変数への代入とifを使います なのでショートサーキットは気にする必要がないのです
そらhogeは駄目だろ
初心者で理解が足りない奴や勘違いしてる奴がいたら
>>823 のような&&と&の区別のついてないコードとか危ない
(^q^)
if (obj == null || obj.isEmpty()) なんかはわりとよくある便利なパターンだが ドカタには難しいらしいので結局使えないんだよね
ショートサーキットって何?
>>832 素直に考えたら
>>831 はobjがnullのときobj.isEmpty()でぬるぽ例外が発生しそうだろ?
でも実際はobj==nullがtrueの時点で式全体がtrueと確定するので
obj.isEmpty()は実行されず、エラーは発生しない
そういう動作のことをショートサーキットという
Javaでは||と&&がショートサーキット演算子
だれもショートサーキットの概念を
聞いているわけではない
用語を訊いているだけなのにアスペ乙
>>834
こないだhogeってふざけた変数ホントに見かけたから、var1に直しといてやったぜ(キリッ
>>814 寧ろ論理演算をしたいのにどうして bitwise operator を使いたがるのか理解できない
可読性を損ねるだけだと思うのだが
短絡評価はあまり好きじゃないな
・パフォーマンス向上のために短絡評価を使っている(&や|に置換可能)
・評価の順番を制御するために使っている(左辺が真ならそこで評価をやめないとエラー
>>831 )
書き手の意図が二通りに解釈できるから、後からコードを修正する際にバグを混入させやすくなる
(^q^)
何にしても可読性を重視すべきだね わざわざ簡潔(わかりずらい)なコードを書いて自画自賛してる人もいるが、 簡潔に書けば高速コードにコンパイルされるとは限らないし 逆に鈍速コードになることもある
>>838 Boolean Logical Operatorsであると
言語仕様の章番号まで上で出てるのに
どうしてそこまでbitwiseだと思いこみたいのか
理解に苦しむ
ひらがなで躓いている君に教わることなど無い
>>844 >>躓
こんな普段使わないし手書きで書けないような漢字を使うのは
bit wise なのか? ウンチク屋 なのか? ウマシカなのか? www
じゃあいこうかんじきんしで
評価順序に関してはCとJavaには何ら違いは無い。 Cにおいては&, |は専らbitwise演算に用いられるものであり、boolean演算には&&, ||が用いられる。 (そもそもCにおいては0以外は全て真として扱われるため&, |をboolean演算として使うことはできない) 俺はJavaにおいてもその使い分けに従うのが良いと思うのだがね。 日常的に複数の言語を使う人はその方が混乱が無くて良い。
似たような“文化上”の論争が、Python と Perl の比較においてあったような覚えがある。
可読性を追求するか、簡潔な記述性を追求するか。 前者は、再利用可能性とも関わるので、Java の文化はどちらかというと、前者寄りなイメージがある。
>>819 にあるように仕様上は& | でもlogical operatorとして使うことはできるけど
>>806-807 のチュートリアルにあるようにoracleとしては& | をlogical operatorとして使うことは推奨してない
ってことじゃねえの?
>Javaにおいてもその使い分けに従うのが良いと思うのだがね。
>日常的に複数の言語を使う人はその方が混乱が無く
他人に論理andよりconditional-andを使えという理由が
「俺が他の言語と混同して間違えるから」なのか
>>849 & |なら可読性も簡潔性も&&||より上だね!
>>851 > 他人に論理andよりconditional-andを使えという理由が
> 「俺が他の言語と混同して間違えるから」なのか
いや、ある種の「慣例」に従えということかと。
基本的にOracleとしてもlogical演算は&&, ||を推奨しているようだしな。
> & |なら可読性も簡潔性も&&||より上だね!
何故?
まるで意味の違うlogical演算とbitwise演算に同じ演算子を使うのは可読性が高いとでも?
&&, || と &, | のどちらを使っても構わない状況において、 &&, || を積極的に推す理由はあっても、&, | を積極的に推す理由って無くない?
他言語などでは仕様では古いバージョンとの互換性のために残してあって使える機能などあったりするし 仕様上で出来るからそれを使えってのは違うと思うんだが
APIドキュメントで非推奨のクラスでも仕様上使えるんだから積極的に使うのが当然と主張しているようなもの
チュートリアルに無いから非推奨って頭おかしいんじゃね?アホなの?バカなの?死ぬの?
>>853 >>&&, || を積極的に推す理由はあっても、&
>>, | を積極的に推す理由って無くない?
同意します
上の方は考えなくてもわかる
>Oracleとしてもlogical演算は&&, ||を推奨している いえ、&&はlogical-ANDではないので、 そのような言語仕様に反する誤ったドキュメントを真に受けないでください >| を積極的に推す理由って無くない ショートサーキットという余計な機能の無い、 単なる論理演算という素直な書き方ですよ?
「余計な機能」があったところで可読性を損ねる訳でなし、 寧ろ高速化に寄与するんだから「余計な機能」があって良かろう
式によるけど、条件分岐はハザードで むしろ遅いのだが
可読性うんぬんなら プロジェクト内でコーディング規則を定めればいいだけじゃねの
a & b a && b 後者が前者より可読性を損ねていないとか どこに目付けてんの? 機能とか可読性とか性能以前に 「論理演算をしたいから論理演算の為の演算子を使う」 って発想が無いことに驚き
if (A && B && C && D) { ... } → if (A) { if (B) { if (C) { if (D) { ... } } } } if (A & B & C & D) { ... } → if (((A & B) & C) & D) { .... }
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型の変数なら、前者のほうがパフォーマンスが悪い
>>862 && が論理演算のための演算子でないとでも?
Cには論理演算のための演算子は存在しないとでも?
条件演算子は言うまでも無いが、 短絡演算子は演算子に見せかけた制御構文なんだよ。 func1() && func2() // <- func2()は実行されないこともある こんなもんはJavaに限らず、主流の言語じゃバグに繋がるだけだ。 実際には慣習にならって boolA & boolB なんてコードは書かないが、 やっぱり素直な仕組みじゃねえよ。
if (A && B && C) { ... } なんてことややめて if (A) if (B) if (C) { ... } と書けばよい
if (A && B && C) { f(); } else { g(); } ↓ if (A) if (B) if (C) { f(); } else { g(); } else { g(); } else { g(); } ワーオわかりやすいね!
>>869 if (A && B && C) { f(); } else { g(); }
↓
if (A) { if (B) if (C) { f() } } else { g(); }
用途によりけりなのに一元的に語るのが悪い
わかりにくい記述をするアホウがいるからだろ バイトコードではintで処理されてるのに...(阿呆まるだし)
873 :
ピラフ :2013/07/19(金) 17:52:29.39
>>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を呼ぶ。
874 :
デフォルトの名無しさん :2013/07/19(金) 17:57:51.58
コーディング規則で記述ルール決めりゃいいだろ 何の議論してんだよおまえら
if (A && B && C) { ... } ↓ boolean hangei(boolean A, boolean B, boolean C){
みんな、「bool型変数」の話だったのを忘れてるようだな
>>771 > boolean型の変数aと
> boolean型の変数bがあったとして。
(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)→それぞれの結果の論理和を計算(|)
>>878 !(a ^ b)
(a & b) | (!a & !b)
こんな記述に可読性があると思うのか?
あると思うなら上司としては失格者
==はlogical operatorではありません
誰か可読性が高いと言った奴いたか?
(a == b) と (a & b) | (!a & !b) には読み手に与える印象は異なる 前者は単にaとbが同値であればという意味合いしか持たず、a,bの値が何であるかという関心が含まれない 後者はa,bがともにtrue、あるいはa,bがともにfalseのとき、という印象があり、a,bの値に関心がある式になる !(a ^ b) は論外、何の処理をしてるのかパっと見で分かる者はまずいない
タイプ量、可読性、実行速度、どれをとっても(a == b)の圧勝
>>883 賛成
コンパイル後のコードを見ればいいのにね
いいのいいの。このスレは初心者が回答の練習するスレだから
このスレに初心者などいない!安心して質問したまえ
887 :
デフォルトの名無しさん :2013/07/20(土) 02:06:28.70
ばぶー
イクラちゃんかよ
ハーイ
オヨネコぶーにゃんかよ
思想の問題だと思うが
これを浅いと言い切る
>>892 は
馬鹿に違いない
はじめてパッケージを使ってみたんですけど 頭にパッケージ宣言をつけるだけでメインクラスが実行できなくなってしまいました 最終的には .\Main.java から test パッケージの .\test\Test.java を使いたいんですけど とりあえず test パッケージ内のサブディレクトリ内にはいって コンパイルして実行しようとすると NoClassDefFoundErrorがでます
再インストールしてください
C:\何とかかんとか\text>cd .. C:\何とかかんとか>java Main これでおk
>>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 のパッケージ宣言を消すと普通に動くんですが…
C:\何とかかんとか>java text.Main うごかなかったらごめん
みすった >>C:\何とかかんとか>java text.Main C:\何とかかんとか>java text.Test
だめみたいです>< NoClassDefError がでます…
java -cp (Main.javaを置いているディレクトリをフルパスで) Test
おおおおお 動きました! ありがとうございました!
たびたびすいません 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\ の中をみにいってしまいます…
うぅ… すみません… ディレクトリ沸けるプログラムはじめてかいたので… 今回は別に自分だけが動かすトイプログラムなので絶対パスでうめこめばすむ話なんですけど パッケージは配布したりすると当然おく場所はかわるものだから相対パスで動かす方法をおぼえたくて よく考えたら実行中に実行してるカレントディレクトリはとれるんですけど どこにおかれるかわからないパッケージのクラスファイルが取得できるはずないですよね…
SetCurrentDirectory というのはjavaにはないのだよ
SWT WIN32 EXTENSION これでできるけどnativeがWindowsのみ対応になってる
>>903 そのプログラムをEclipseのRunで実行したら
カレントディレクトリはデフォルトでプロジェクトディレクトリなので
MainとTestのいずれを実行してもimg\test.pngを見つけてくれるぞ。
>>907 環境依存な方法じゃないとできないものなんですね…
>>908 eclipse じゃなくて
コマンドライン実行なんですけど
挙動が違うんですか…
調べてみると Class.getResource() っていうのを使えばできそうみたいなんですが
うまくいかなくていろいろ試行錯誤中です><
うーん… パッケージ配布したときにどこからインポートされてどこから実行されるか分からないけど パッケージ内のクラスからパッケージ内データファイルにアクセスできないってことはないと思うんですけど… やり方がわからない…
911 :
デフォルトの名無しさん :2013/07/21(日) 03:49:08.99
>>909 getResource使えばできるけどその程度のテストでわざわざ余分なコードを書くくらいなら
linuxならカレントディレクトリ変えてjavaを実行するスクリプト書いた方が楽だし。
Windowsなら統合環境入れた方がラクダよ。
javaの場合スクリプトよりantの方が相性いいかな?
>>911 それ言い出せばそもそもパッケージわけずに2つ同じフォルダにおいちゃえばいいだけなんですけど…
今回 Test 側のパッケージだけ将来使いまわすかもしれないので
パッケージの書き方の勉強もかねてディレクトリわけるプログラムのかき方覚えようと思っただけなんです…
Swing の JAVA で GUI のソフトを作成しています。 ウィンドウを2つ表示しているのですが、ボタンを押したときに片方のウィンドウをアクティブ化(ウィンドウをクリックした時のように)したいです。 「ボタンを押したとき」というイベントは分かるのですが、アクティブ化が分かりません。 分かる方、よろしくお願いします。
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; }
916 :
デフォルトの名無しさん :2013/07/21(日) 04:14:44.41
出来るけど、そのためにはまず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を使った方が楽。
うーん… ただディレクトリわけるだけでこんな大変なんですね;;… (new Test()).getClass().getResource("img/test.png) も ./img/ をみにいってて test/img/ をみにいってくれないし… パッケージ内のクラスからパッケージフォルダ内のファイルに相対パスアクセスしたいだけなんですけど 今日はあきらめます>< 相談にのっていただいてありがとうございました
919 :
デフォルトの名無しさん :2013/07/21(日) 04:20:58.87
いやだから統合環境使えば何も考えなくてもできるんだってw
なんかレスしてもらってたみたいでありがとうございます
>>915 どちらかというとアプリを実行されたパスを知らずにデータにアクセスしたい…
毎回そのパスをプログラム側で取得しないとダメなんでしょうか…
>>917 なるほど
参考になります
いわれてみると jar で配布されてる java の追加ライブラリって長い階層構造になってるの多いですね…
> -cpでresourceディレクトリもクラスパスに指定すればOK。
ということはパッケージ内でしか使わないリソースでも
メインから見た階層の中に位置付けてアクセスしないといけないってことなんですね
隠蔽する必要まではないにしても他のパッケージからみえても仕方ないリソースファイルが
パッケージ内で完結できないってちょっと不便な気もしますけど…
921 :
914 :2013/07/21(日) 04:36:43.23
>>917 ごめんなさい
自分の勘違いでした!
getResource を使って思ったとおり相対パス指定で動きました!!!
他の方もいろいろ教えていただいてありがとうございました!
>>920 > ということはパッケージ内でしか使わないリソースでも
> メインから見た階層の中に位置付けてアクセスしないといけないってことなんですね
そうゆうこと。Javaのパッケージは良いところ名前空間程度の意味合いしかない。
そしてパッケージの相対パス指定は出来ない。必ずルート(デフォルトパッケージ)
からの絶対パスで指定する必要がある。
例えばTestパッケージに必要なファイルをひとまとめにして再利用したい場合などは
パッケージではなくモジュールなどと呼ばれる別の階層の仕組みが必要になる。
ビルド環境としてはMavenがモジュールの考え方を持っている。
あ、ごめん、間違えた。相対パスも行けるね。 あと将来を考えるとgetResourceではなくgetResourceAsStreamで動くようにして おいた方が良いよ。画像も含めたJar等に固めて配布する場合はこちらしか動か ないので。
>>914 窓A,BがあってAを押したらBをアクティブにするってこと?
一つのmainから派生した窓なら簡単にできるけど
それぞれ別プロセスだとめんどいよ
926 :
デフォルトの名無しさん :2013/07/22(月) 15:40:28.63
ストップウォッチのプログラムを作ったのですが 60秒を超えると61、62のように増えていくのですが それを01.59.23みたいに分表示?みたいな感じにしたいときには どうすればいいのでしょうか? よろしくお願いします。
60 で割る hour = second / 3600 minute = second % 3600 / 60 second = second % 60
928 :
デフォルトの名無しさん :2013/07/22(月) 16:02:38.63
>>927 回答ありがとうございます。
codepad.org/LhJnfuLJ 忍法長のレベルで貼れないので前にhttpをお願いします
このようなプログラムなのですがどこに入れればいいですか?
質問ばかりで申し訳ないです。
Thread.sleep(10); を Thread.sleep(1000); にすればいいと思うよ
>>928 問題ありすぎ
sleepメソッドで時間計るな 開始時刻と現在時刻の差を計算しろ
ボタンのリスナーは分けて匿名クラスにしろ
clockThreadも匿名クラスに
わざわざ別クラスにmainメソッドを書く必要ない
馬鹿は黙っててくださいね^^
>定説に異論を唱え、議論を挑む姿勢 は評価してもよいのではなかろうか
>>930 ふうん。すごいね(棒)。ネット知識(笑)?
>>934 ループさせたら表示は動く
実際止めたときは開始した時間から止めた時の時間差し引いてフォーマットすれば
ストップウォッチとしては成り立つ
>>930 は正しい。だがまだ敷居高いから後で読み返すとよいかも
>>963 えっと、それでもまだ鏡像ポテンシャルは記述しきれてないよね
long baseTime; に計測開始時点でSystem.currentTimeMillis()を代入して、 long nowTime = System.currentTimeMillis(); との差で測ればいいんでないの? if(nowTime - baseTime >= 1000) { // 計測開始から1秒以上たっていたらする処理 .... .... baseTime = nowTime; } で、より精度上げるにはこれを元に考えていけばいいんじゃないかな。 ちなみに精度を上げるためにSystem.nanoTime()を使うのはもしかすると情弱だと思われるかもしれないので注意。
馬鹿は黙っててくださいね^^
情弱な私のためにSystem.nanoTime()を使うとどうして情弱と思われるのか教えてください
ちなみに世界最先端を行っている俺はいままでずーと沈黙を保っていた。
そんな時代もあったことかと思いますが ...
これだけの書き込みでまたずーとROMる。まるで宇宙人がアリンコみたいな人間を見ているようだ。
こんだけNTP普及してる時代なのに いーかげんカレンダ暦使ってインターバル計るのやめれ。
そもそも「カレンダ暦」が意味不明
普通に言わんとする意味は解るけど。
NTPはネットワーク遅延あるから精度を要求するインターバル測定用途じゃ使いものにならないじゃん
>>950 じゃ、どういう意味なのか言わないとわからないんだけど。
カレンダ時計というかリアルタイムクロックというか要するに年月日時分秒基準で表現されている時刻 (System.currentTimeMillis() など) は いつ何どきバックグラウンドでNTPが動いて勝手に時計動かしちゃうかわからないから計時には適さない ってことじゃないの?
Javaはパフォーマンスカウンタから取れないの?
>>952 あー、なるほどね。
だとすると、どういう時間計測がいいんだろうか?
nanoTimeはそのためにある。
でも
>>938 によるとSystem.nanoTime()を使うと情弱らしいよ?
理由が 「精度を上げるため」 だからでは? 本当の理由は 「カレンダ変更の影響を受けないため」 だから コイツわかってないなと思われる可能性はある
javaの基本は一年かけてマスターしたんですが、いざ実戦的なプログラム書こうとすると、全然できません。 お勧めの参考書や練習法はありませんか?
1年もやってできないならもう方法はありません
960 :
デフォルトの名無しさん :2013/07/23(火) 19:02:06.50
javaEE7にwebsocketが含まれたとのことでSDKをダウンロードしてみたのですが、 jreにパスを通してwebsocket関係をimportしようとしてもライブラリが見当たりません。 javax.websocket..はどこにありますか?
>>958 A.土方に徹する。
B.分析設計を勉強する。
好きな方を選べ。
>>958 実はマスターしたというのは気のせいでは
どんな教科書を使ったのか知らないけれど、例えばその教科書に載っている例題のプログラムと同様のものは自力で書けますか
何をもって「実践的」とするのかがまずわからん
GUIアプリとかか? 少し上の方で話題になってるストップウォッチを誰かのコードパクらないで書いてみれ
javaの基本は一年かけてマスターしたんですが = 文法を覚えて、標準APIの使い方がわかる という意味でとらえてみた場合 Windowsについてくるメモ帳と同等のものを書く 書けそうなものから徐々にレベルアップしていく感じでどうだろう javaばっかりいじって5年の選手だってjavaの全部は知らないと思う。し知らなくてもどうにかなる
GUIアプリよかDBの扱いを伴うウェプアプリとかのほうが良いと思う。
GUIアプリ作りたいならJavaを選ぶべきじゃないよね 情報も少ないし
実務的に考えるとDBつかうサーバサイドに同意 GUIやるならVSで書けるC系がおぬぬめ
だが土方なら最初は細かい仕様をコードへ翻訳する単純作業だから
実践的なアプリが作れないとはまずならないだろうし
先輩に聞いたりもできるだろうし
>>958 みたいなことを聞くってことは趣味か?
そうならJavaはAndroid(正確にはJavaではない)くらいしか使い道がないからやめとけ
Webならスクリプト、GUIならC#かC++
970 :
デフォルトの名無しさん :2013/07/23(火) 22:24:43.76
>>958 です。
皆さんアドバイスありがとうございます。
これを参考にもう少し頑張ってみます。
web+DBって仕事自体がドカタ これより簡単な仕事ないだろw
972 :
デフォルトの名無しさん :2013/07/23(火) 23:53:05.21
>>960 含まれている ≠ importすれば使える
せめてフォルダ内くらい全探索しろ
973 :
デフォルトの名無しさん :2013/07/24(水) 00:02:39.85
駄目元で聞くけど、チャットやウェブappでセッション管理するとき どのクラスでラップするのが定席なの?HashSet? 自作クラスなら何を根底に考えて作るのか教えて欲しい
あとそういうのをラップとはいわない。
>セッション管理するときどのクラスでラップするのが定席なの? 何をラップしたいのか、日本語でお願いします
下手なブロック処理書くよか、何も考えずにコンカレントでだいたいうまくいく スレッドプールつかったキュー方式ならソースいじらずにチューニングできたりするし 置き去りスレッド問題にも効果は大きい。ただしワークスレッドの書き方がダサいとリソースががが
>何も考えずにコンカレントでだいたいうまくいく んなこたーない
>>979 このまえSocket指南してくれたかたかな?
>>んなこたーない
ごもっともです
メソッドの頭にシンクロで何個もロックかけちゃったり
よくわからずにロックかけちゃった的なソースを多々みてきたので
とりあえずコンカレントしてからロック考えてくれ的な意味合いでした><
あ
並列の怖さは高確率でたまたま問題なく動いてしまうこと 後で地獄を見るんだよね
javaドカタですから
うめ
コンカレントというか、なんでもかんでもスレッドセーフにしようとするのはアホ 本当にコンカレントに使う場合は、スレッドセーフなクラスを使ってたとしても 結局は利用する側で改めて排他制御を行う必要がある場合が多いしな
どんな場合だよ
987 :
デフォルトの名無しさん :2013/07/24(水) 22:32:21.63
文字コードを指定してテキストファイルのすべてのテキストをできるだけ 速く読み込みたいのですが、どのように実装すればいいのでしょうか。教えてください。
StreamReaderを使う 土方や素人がオレオレ実装するより遥かに速い
989 :
デフォルトの名無しさん :2013/07/24(水) 22:39:35.04
>>988 InputStreamReaderだと配列で読み込みますか?
どうやって全部読み込めばいいのでしょうか。教えてください。
調べる気ゼロ
991 :
デフォルトの名無しさん :2013/07/24(水) 23:14:53.99
いえいえどういたしまして
993 :
デフォルトの名無しさん :2013/07/24(水) 23:39:57.61
いや、おそらく物の見え方が各位違うんだろ
>>985 は既存のソースに追加実装するときのことを言っていて
>>986 は新規実相のことを指している
問題は
>>977 のような輩がパフォーマンスのことだけを考えて、後任のことを考えないソースを書くから
>>985 がわりをくってるんだろ
うめ
997 :
デフォルトの名無しさん :2013/07/25(木) 20:32:48.01
アンズよりウメが安し
Javaやればやるほど嫌いになる…
999 :
998 :2013/07/25(木) 23:01:34.09
自己解決しました
J A V A
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。