>>1 乙
>String に == は使うな。equals() を使え。
真に受ける人がいるからテンプレから削除するか
補足が必要
定数のcommand文字列と同一オブジェクトを比較する場合
==で比較するほうが可読性が良い場合がある
なんでもかんでもequals()つかってはいけない
同一クラス内において文字列リテラルは同一インスタンスである
String a = "adb";
String b = "adb";
a==bはtrueになるので初心者は罠にはまることがある
余談
1.7でスイッチ(String)が使えるようになったが
String key = null
swhich(key)はぬるぽになるのでcese null:とかできない
聞かれたことにだけ回答しろ。わかったかこのクソヤロー
4 :
デフォルトの名無しさん :2013/07/26(金) 12:15:51.77 ID:fksBQ7U6!
javaで文字などの長さを求めたいときにhoge.lenghtを使うと思うのですが、 どうやったらそのメソッドlengthを自ら定義出きるのでしょうか? Haskellであれば length' :: String -> Int length' string = case (string) of [] -> 0 (_:xs) -> 1 + length' xs みたいにして自分で作るのですが。
>そのメソッドlengthを自ら定義 日本語でお書きください
hoge.length() じゃいかんのか?
$len = String.length(); int a = len; こうしたいってこと?
8 :
デフォルトの名無しさん :2013/07/26(金) 13:19:39.27 ID:fksBQ7U6!
書き方がまずかったかな。
>>6 のlength()を自分で作った関数(メソッド)で使いたい?
>>7 $がよくわからないのですが、ちょっと違うようなきがします。
例えば、length'に"Hello, World!" と入れたら12が帰ってくるみたいに,
メソッドが何かしらの入力値を取り、その入力値の長さを返すみたいな。
length()ってどうやって書かれているのでしょうか?
ざっくり説明すると 単純にchar[].lenghtを返しているわけではなく byteに収まらない文字もあるわけでそのために文字数を countした値を返しているようです コード自体はこれだけです public int length() { return count; }
ちなみにStringはファイナルなクラスなのでおーばライドはできますん
おぶじぇくと指向からおしえるべきでは
それなら static int length(String s) { return s.length(); } これでどうだ!!・・・
13 :
デフォルトの名無しさん :2013/07/26(金) 15:38:02.26 ID:fksBQ7U6!
うん。自分は何か根本的に間違ってたみたいです。
>>9 ~12
ありがとうございます。
けど、これreturn s.length()はな〜。
Date and Time APIはSQLやXMLデータ型に透過性がありそうでいいな JPAでTemporalなしで使えるようにならんかな
前スレ998だが、999は俺じゃない。でも面白かった
標準APIのこのあたりのソースみておけって部分あれば教えて下さいな 入出力あたりはみたのでそれ以外で
なぜAPIのソースをみようとするのかわからない
同意。ああいうのはどうしても知りたい特定の部分があるときに読むもんで、 目的がないならあんな細切れなソース読んでも意味ない。 オープンソースのアプリのソースを読んだほうがいい。
>ああいうのはどうしても知りたい特定の部分があるときによむもんで 今までそうしかしてこなかったので… 何よりデザインパターンの有名な本にクラスライブラリには デザインパターンが沢山活かされていることが書かれていたので。 swtはそこそこ読みました オープンソースでもよろしいので教えて下さい
標準クラスだけど多態性のすべてが入っている気がしたので java.awt.image.Raster public DataBuffer getDataBuffer().getData() 関連クラス DataBufferUShort DataBufferByte
>>20 中身見たことなかったので見てみます
BufferedImage等のデータ配列に直接アクセスして高速化したい場合によく使われてるやつですよね
標準APIって全体的にAdapterパターンがうまいな〜と思います
swingで質問なんですけど、背景として画像を設定しつつその上に他のコンポーネント貼る方法ありませんか?
>>22 javax.swing.OverlayLayout
1.7から透明色が動くようになってたりする カラーモデルによって配列の型が変わるから一概には言えないけど 1920x1080を配列に置き換える場合 int getRgb(x, y) 500ms Bufferのデータから再配置 35ms
25 :
デフォルトの名無しさん :2013/07/28(日) 15:55:41.31
Javaの画像処理が速いということがバレてしまうので これ以上ラスタ使うBufferedImageの話は禁止で。
解決しました。 ありがとうございました。
27 :
デフォルトの名無しさん :2013/07/29(月) 12:45:56.22
interfaceとabstractの違いが良く分かりません サンプルプログラムなどで明快に説明してあるサイトを教えてください
>>27 protectedメソッドを持てるのがabstract class
持てないのがインターフェース
これ以上明快な説明は存在しない
ちょっと何言ってるかわかんないです
>>28 確かにそうですね。
しかしなぜそういった仕組みが必要なのかを明快に示してほしいです
そういうのはプログラムの実例を用いてこのような理由から機能美としてそうなっているという風に
説明してほしいです
>>29 インターフェース
…publicメソッドのみ持てる
abstract class
…制限なくあらゆるメンバ・メソッドを持てる
privateメソッドを持てるのがabstract class 持てないのがインターフェース これ以上明快な説明は存在しない
>>27 インターフェースを定義したものがinterface。
それ以外の抽象クラスがabstract。
>>30 Javaにインターフェースや抽象メソッドが実装された理由はJCPの該当の議論を見るしかない
複数継承できるのが interface 1つしか継承できないのが class
インターフェイス ・全てのメソッドはpublic abstract。つまりメソッドの実装は持てない 具象クラス ・全てのメソッドはabstractではない。 インスタンスを作ることが出来る。 抽象クラス ・abstractではないメソッドに加えてabstractなメソッドも持てる。 継承する具象クラスにその実装を強制できる。 インターフェイスと抽象クラスの使い方について明確に説明しているサイトは 知らないけれども明確に説明して本としてEffective Javaがある。 「Effective Java 項目18」でググると解説したページが幾つか出てくるかも。 この本にもあるように、インターフェイスか抽象クラスかどちらか、というわけ ではない。まずインターフェイスを定義して、それを実装する手間を減らすため に骨格となる実装を抽象クラスとして定義することがある。
>>37 > つまりメソッドの実装は持てない
それJava 7までの古い知識
デフォルトメソッドもてるようになるのJava8からだから。
tes
Java8はまだ出てないから最新はJava7のはず
>>42 これから古くなって使えなくなる知識を教えるなってことだよ
これから古くなって使えなくなる知識って、いつ古くなるかも分からないのにね Java8が出るのって早くても来年3月以降だろ?
46 :
デフォルトの名無しさん :2013/07/29(月) 18:21:43.67
java8だって将来は古くなって使えなくなる技術になるんだから java8を教えるのはあまりにも酷いよ java9を教えてさしあげなさい
揚げ足取りとか人として最低の行為だと思うよ
interfaceはステートを排除してるから規約さえ守れば誰がどう実装してもいいのが利点だな 依存するオブジェクトがお前どこから生成されてくんねんって状態でもinterfaceベースならテストできる
>>46 互換性の問題があるからインターフェースが実装を持てるようになる仕様が廃止される可能性は極めて低い
つまり今後はインターフェースが実装を持つ時代が長く続くので、そっちに合わせて解説するのは人間として当たり前
50 :
デフォルトの名無しさん :2013/07/29(月) 19:23:45.47
インターフェースが実装を持つって Visual Basic 6.0がやってた技術か やっとVB6に時代が追いついたか
java7があまりにも普及しなかったため java7は無かったことに
ただ廃れていくだけのjava セキュリティ上の問題が多く敬遠されがちなjava java8なんてjava7以前のシェアを塗り替えられるほど普及するのか
新しいバージョンが古いバージョンと互換性を損なう場合があったとき 古いバージョンを頑なに使い続ける老害が必ず発生する
>>52 Javaと他言語のアプリケーション、どっちの方が脆弱性の届け出が多いか知ってるかい?
java
C言語に決まってんだろアホ
Java自体の脆弱性はアプリの脆弱性としてはカウントされないからね Javaに脆弱性が発見されるたびに影響を受けるアプリの数だけインクリメントしてたら膨大な数になるよ
そりゃC言語でsandboxの脆弱性は報告されないだろうな。
無駄な層が挟まって そいつが無駄な機能を山ほど抱えて 無駄なリスクを発生させる それこそが病根
まだverアップを否定できる程の能力があれば納得できるけど、 そういう層に限って各verに互換性を持たせる設計をしてこなかっただけだったり ましてやそういう設計法があることすら知らなかったりするんだよね 更にそういう人こそ、OSの更新等を常に裏で自動更新にして最新版に保っていたりw
3行目はリファクタリングという意味で
クライアントのsource&targetはjava6、サーバはjava7にする予定 クライアントは組み込み用途だからしょうがないね
好きにしてください
マルチキャッチやStringスイッチは使っていいものなのか迷う
古いバージョンのJavaを使う意味が分からん
67 :
デフォルトの名無しさん :2013/07/30(火) 20:33:28.01
例えば7はVeiwにいかなる妥協策でも修正不可能バグがあるからね 6にはlinuxでキーフォーカスが死亡するバグがあるが 7で必死に直そうとした形跡はあるがなおってない
if(value != null) スイッチ(value) { case 何とか } それだったらenumにしよう フォールスルーはファインドバグが怒るのでとりあえず回避してしまう
69 :
デフォルトの名無しさん :2013/07/30(火) 21:40:57.59
ポリモーフィズムとは interfaceやabstractクラスを使って他のクラスにextendsやimplementsをする。 1つの元手で複数継承できることで多様化という意味合いがある。 引数の数や種類が違う、同じ名前のメソッドやコンストラクタも ポリモーフィズムの一種である。 現在自学自習でjavaを勉強しているのですがポリモフィズムの解釈は こんな感じで合っているのでしょうか? どなたか採点よろしくお願いします。
100点
-50点
オーバーロードって多態性の内に入るのか?と思ったが賛否両論だが入るっぽいな まあ所詮は言葉でアップキャストに言及してるわけじゃないしな
はいらねーよタコ
>>69 個々の技術については大体合ってはいるけど本質的な部分に触れられてない
もし試験だったら30点の回答だな
オーバーロードは入らんだろ
>>73 その根拠は?思い込みレベルなら俺もそう思ってたから根拠があるなら言ってくれ
77 :
デフォルトの名無しさん :2013/07/30(火) 22:11:09.43
ボケとツッコミが素敵だ おまえら関西人?
自称中級者なんてこんなもんか
>>76 初心者すぎるw
呼び出す側から見たときに、オーバーライドされたメソッドのどこが多態なの?
そもそもインタフェースが違うじゃん
ものほんの馬鹿だ 意味論を分かってない
多態性とはなんぞやの話で継承限定でものを考えてるから馬鹿と言った 同名のメソッドを複数持てることは多態性ではない言える根拠は何か? 俺は多態性ではないと言える根拠がないから聞いている
キチガイ現る
自称中級者の逃げ宣言か、つまらん結末だ
プログラマなら日本語だけではなく 具体的なソースコードを照らし合わせて語りあうんだ System.exit(0)
>>86 System.out.println("了解!!");
88 :
デフォルトの名無しさん :2013/07/30(火) 23:25:59.79
69です
ポリモーフィズム=多様化 とイメージしており
一つの宣言(同じ言葉)で 数多くの道具が使えるというイメージがありました。
ですのでインタフェースを使った多重継承、オーバーライドなどがこれにあたると
思っていました。
一つ気になりましたのが
>>74 さんの本質的な部分とはなんなんでしょうか?
分かる方いたら答えてください。
言ってみただけ
91 :
デフォルトの名無しさん :2013/07/30(火) 23:36:13.58
多態がどんなときに役にたつかといえば 例えば描画処理マネージャに対して描画したいコンポーネント群をぶち込むとき コンポーネント群のもつ共通の描画メソッドpaintをオーバーライドし多様な形態(多態)にしとけば描画マネージャはぶちこまれたpaintを同様に実行すればいいだけで応用がきく またこれにより条件分岐が減りプログラムがシンプルになる 一方オーバーロードとは同じ名前のメソッドを引数の違いによって分け記述をシンプルにするだけであり名前をf1,f2,f3と分けても実質的な違いはない 全然違う
>>91 お前の中では多態性=アップキャストってなってるだけだな
何の説明にもなってない
94 :
デフォルトの名無しさん :2013/07/30(火) 23:49:32.27
いや役にたたない学者の理屈をけずったら多態の存在意義はこれしかない
>>88 ポリモーフィズムという概念はJavaより前に生まれたもの
だからJavaの用語(extendsやimplements)を使って解説してる時点で
本来のポリモーフィズムではなくJavaのポリモーフィズムの説明にしかなってないのよ
employee.fire() とメソッドを呼ぶとき、「employeeをクビにする」と漠然と指示して その中でどういうデータベース操作が行われるかなど細かいことは気にしないのがカプセル化だ。 fire()メソッドを持ってればemployeeの実体は別に何でもいいわけだが、Javaは静的型言語なので コンパイル時に型がはっきりしてないとエラーになる。 だからインターフェースを使って「ここにはfire()メソッドをサポートしたオブジェクトを寄越せ」 と明示することでコンパイラをごまかす。
>>94 って何者なんだろう
相当役に立つものを作ったん凄い人なんだろうなあ
>>88 継承はポリモーフィズムを実現する手段であって、ポリモーフィズムそのものではない。
呼び出しに対して多様な振る舞いで応答することができる性質がポリモーフィズム。
>>95 こういう原理主義みたいなこと言い出す人って必ずいるけど何なんだろう
老害って呼べばいいのかな
土方とアカデミックの違いだな 土方は定義を語っちゃあかんよ
103 :
71 :2013/07/31(水) 07:04:55.34
102 いや俺も74見て同じことを思った。 OO信者はまず概念から入るので、 69は「概念の説明がない」と指摘される典型的な例。
Androidが世界制覇してるのにそれでもjavaはオワコンだというのですか?
何となく話の中核が見えてきた
>>69 はポリモフィズムとは?の回答にjavaの実相や概念に絞って、ポリモフィズムのことを指して答えた
そのため100点の回答とはならないのは俺も賛同
オーバーロードは多態性なのかと聞かれたら多態性だと答える(javaの話ではない)
不特定のファイルを与えて実行したとき、ファイル形式がなんであれ。未知のもの、非対応でなければ
動画なら動画を再生、音声ファイルなら音声を、画像ファイルなら画像を表示といった動作になる
ファイルを開くという一連の動作からこれだけの多様性がry
>>105 信者のうめき声が聞こえてくるようだわwwwww
さて仕事するか
androidのまがい物javaはお子さまドカタに愛され 正当javaは業務アプリおじさんドカタに愛されています
高級言語は疲れる。コンピュータとは何か?を知ってても役に立たずJavaとは何か?のみで決まる
111 :
デフォルトの名無しさん :2013/07/31(水) 17:58:58.40
高級言語は疲れる?どういう意味で言ってるのだろう。 いきなりローカルに開発していくときほど疲れると思うんだけどなー
>>111 いきなりローカルに開発していくときほど疲れる?どういう意味で言ってるのだろう。
日本語すら不自由なjavaドカタw
>>111 おそらく、C言語やってもポインタで挫折するタイプなのだろう
117 :
デフォルトの名無しさん :2013/07/31(水) 22:58:19.14
質問があります。 ・Listで、あるオブジェクトが管理されている。 ・画面があると仮定し、その画面には3つのオブジェクトしか表示できない。 ・戻るボタンと次へボタンがあり、次へボタンを押すと次の三つをその画面に表示したい。 こういったとき、どのようなListやQueueを使うのがいいのですか?またどのように実装すればよいでしょうか List<Object> objects = new ArrayList<Object>(); objects.add(new Object()); ..... for(int i=0; i<3; i++) { objects.get(i) } 理想はこのように常に0〜2番目を取り出すだけで、objectsリスト内をぐるっと一周できるようなソート?法を知りたいです。 [0, 1, 2, 3, 4, 5, 6, 7] [3, 4, 5, 6, 7, 0, 1, 2] [6, 7, 0, 1, 2, 3, 4, 5] .... 見たいな感じです(数字は最初にaddしたときのindex)
自己解決しました
>>117 ArrayListで管理してlocalCursor = cursor % list.size() でやりくりでいいんでない?
cursorがどれだけ大きくなっても行けるとおもわれる
localCursorに負数が来た場合は list.size() - localCursor で正しい添え字に直せばいい
122 :
117 :2013/07/31(水) 23:37:23.99
>>118 型に指定したObjectクラスのフィールド変数等で比較するつもりはなくてもコンパレータでできるのですかね。
コンパレータって隣り合う2つのオブジェクトの、とある変数同士で並び替える以外にうまい使い方があるのですか?
(この場合のような単なるlistのindexだけを考慮すればいい時でも)
>>121 すみませんちょっと変数の意味がわからないです
localCursor = cursor % list.size()
が急にでてきて・・・
localCursorはdouble型?
添え字だっつってんじゃん 自己解決したんなら無視していいよ
調べる気なし
125 :
デフォルトの名無しさん :2013/08/01(木) 00:05:41.75
>>123 cursorは何を表していますか?
急に出てきて意味がわかりません。。。
JavaFXってどれくらい普及してますか?JavaFXを前提とした開発に未来はありますか?
写真の日本人はどいつもハゲ
クライアントJavaのGUIにHTML5使えるようにするプランもあったんだろ? 誰がどう考えてもそっちが正解だった どっちにしろ普及はしなかっただろうけどね
JavaFXにWEBブラウザ入ってるんじゃなかったっけ? あれコールバック仕込めないのか
Trust me - I know what I'm doing Manawatu Standard? - 2013年7月23日 JavaFX is part of Java, which almost every computer runs. It's technical stuff. But fortunately Giles has ... Giles writes a successful blog rounding up weekly developments within JavaFX. He has legions of Twitter followers from ...
FXって外為かよ
ジャワ国の外国為替か
クライアントJavaって本質的に存在意義が薄いんだよ Javaのマルチプラットフォーム性を活かそうとすれば、やれることが制限されてWebと大差なくなる 動作環境(周辺機器やOS)との連携を重視すれば、Javaを選ぶのは面倒なだけ
webアプリ開発専用言語とスマホアプリ開発専用言語へとそれぞれ進化しました
ジャワ島・・・Java言語はプログラミング言語海の孤島、という意味である ジャワ原人・・・Java言語をメイン言語とするプログラマのことである
ホモエレクトゥス さび付いたJAVAにすがる時代遅れの痴呆 ホモサピエンス Android島に移住した知性的な進歩人
androidの案件も負けず劣らず猿でもできる仕事ばっかりだろ
>>137 ・クライアントアプリ
・マルチプラットフォーム
・スクリプト言語以外
この条件ならJavaしか選択肢はないだろ。
マルチプラットフォームなクライアントなぞ目論むのがおかしい どうしてもやりたいならWeb
145 :
デフォルトの名無しさん :2013/08/01(木) 10:19:22.48
Webにしたら、セキュリティーソフトウェアに邪魔される
>>144 Webはサーバー必須だからそもそも用途が全く違うだろ
なんでもできるようにして結局何にもできなくなるのは世の常
なんでもないようなことがあぁぁ
ActionScript3+Flex(昔Adobe今Apache)が不完全燃焼のまま終了しつつあるのが辛い。 これ本当に生産性が高かった。 ActionScriptとか言うとよく馬鹿にされるけれども実のところ3はDart等と同様に Java的な文法のオプショナル型付け言語で、手続き的なロジックはJava風に静的 型付けでカッチリと書きつつ、UI設計の宣言的記述であるMXML内には同じ言語で コンパクトに記述したインラインコードを埋め込むことが出来た。 Flexも素直な設計で部品が充実したフレームワークだったし。 この点JavaFXは出てきた時から宣言的UI記述にはJavaFX Scriptという別の言語を 使う時点で面倒だなと思ったし、後にJavaFX Script自体が無い事になった。 同様な問題はJavaとは別にJSP等ではELも使うJavaのWebアプリ開発関連にも言える。 なのでGrailsお薦め。
CUIもGUIも作れるJAVA、JAVAならJAVAアプレットでウェブも対応!サーバーサイドならサーブレットもあるし!JAVA最強伝説 ガラケーのアプリやアンドロスマホのアプリもJAVA!ほんと最強すぎるJAVA!至高のJAVA!俺たちがJAVAだ!
相談でっす。 Graphics+swingで解決できない問題が。 ゲームを作ってて、 メイン画面にGraphicsで描画(30FPS)しているとします。 で、そのメイン画面上に 背景を透過したJTextPaneやらJTextFieldを乗せたいんだけど メイン画面の描画の度に、swingのコンポーネントが汚くなる。 これを解決する方法って何かないかなぁ? ちなみにAWTを使うのはナシで。 苦し紛れに描画の度にリペイントとかしてみたものの 描画タイミングがずれるせいでチラチラチラチラうざい事に。
1.7の話だと思うけど透明以外の時、どのように見えるのかな? 透明特有だったら対処法はないという切り分けにはなるよ
>>152 早速ありがとうございます。
1.7の話です。
透明だろうが不透明だろうが、見え方は一緒ですねぇ。
うまく説明できないのですが・・
JPanelにJtextAreaが乗っている構成で、
GraphicsはJPanelにダブルバッファで書き込みをしています。
現象としては
JtextAreaの再描画(リペイント)をしない場合は
メイン画面再描画(draw)でJtextAreaが消える。
JtextAreaの再描画(リペイント)をする場合は
JtextAreaがチラチラチラチラする。
JtextAreaの絵が塗りつぶされているんだとは思うのですが・・。
1.7の透明色特有ではなさそうなので、知ってる人はもう少し書いたら
レスくれそうですね
リペイントってどんなサイクルだったかわすれましたが
invalidateこんなの呼んで再描画するんじゃなかったかな・・
>>114 は解決しました
というかPCにステミキ入ってなかったORZ
音だせるやつのinfo情報
getName "XeI ~LT[ (Realtek Hig"
getDescription"Direct Audio Device: DirectSound Capture"
toString interface TargetDataLine supporting 8 audio formats, and buffers of at least 32 bytesgetFormat PCM_SIGNED 8000.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian
結局PORTから音はとりだせなかったけど、ミキサーからはとれますた
読めないデバイスだと思ってたら文字化けしてたのか・・ 貼ってから気が付くレベルの俺
156 :
デフォルトの名無しさん :2013/08/01(木) 23:42:09.70 ID:5J+mkZgJ!
なぜforループがDeadcodeになるのでしょうか? import java.util.Scanner; public class Test { public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.print("Max :"); String input = in.next(); int x = Integer.parseInt(input); for (int i = 1; i <= x; i++){ if (1%2 == 0){ System.out.println(i); } else { continue; } } } }
if (1%2 == 0){ なにこれ
nextInt()は使えないのか?
159 :
デフォルトの名無しさん :2013/08/02(金) 00:09:57.85 ID:pU3LTo83!
>>157 二の倍数かどうかの判定をしたかったのですが。
>>158 countinueのかわりにnextInt()ということでしょうか?
160 :
デフォルトの名無しさん :2013/08/02(金) 00:20:46.55
ID出てるし釣りか
>Scanner このクラスの存在、今日初めて知った すごく便利そうなクラスだね 正規表現でのパースするとあるけど実装はネイティブコードとかでされてるのかな それなら自分でJavaのコード書いてパースするより捗りそう
ジャバ8ではjre/binにもjjsがあるのですが、jreで配布は、ライノーはやらないけど、ナズホーンは配布することになったんですか?
はい
次はジャバFXもあるし、HTML5もあるし、リリース8の本命はラムダとかストリームではなく、実はナズホーンだったりするので、ランタイムに同梱は必然ですよね^^
まあNashornはブレークポイントが止まるようになるらしいからコールバックの実装はJavaScriptでってのはいいかもな
166 :
デフォルトの名無しさん :2013/08/02(金) 14:07:14.02
ごめん初歩的な質問なんだけど eclipseってJavaをインストールしていないと 起動自体出来ない?
>>166 eclipseにも色々あって、
java(厳密にはJRE)を内包しているものは、PCにjavaが入っていなくても大丈夫。
内包していない奴は、PCのjavaで動くので
インストールが必要。
168 :
デフォルトの名無しさん :2013/08/02(金) 19:22:29.15
JavaFX8が楽しみだな〜。
個人的にはKeplerで良いと思う。 Junoで無駄に鍛えられたので感覚が麻痺しているという説もあるけど。 それとPleiadesとかAll-in-oneが許されるのは小学生まで。 とっかかりはともかく早めの卒業を推奨。
高級言語なのに手続きが物凄い量
全然quickstartじゃないんだよな 環境構築を覚えるまでが一番大変 覚えた後はさすがに楽なんだけど
>>171 例外処理と粒度の小さすぎるAPIが原因
最近は新しいAPIがチェック例外を敬遠しだしたな まあ外部リソース依存の例外以外は個人的にやり過ぎだと思ってたが
175 :
デフォルトの名無しさん :2013/08/03(土) 01:46:09.32
script言語信者が元気ですね。
意識高い系(笑)のJavaドカのみんなが大好きなScalaもチェック例外は捨てたんですよ
チェック例外は手続き型に関数型を取り入れた最近流行りのスタイルでは全く使い物にならないんだよな ラムダが難航してた大きな一因だし、結局は検査例外の存在を無視した仕様に決まってしまった
javaドカタはどうせcatchして無視するだけだから全部RuntimeExceptionにしとけばよかった
179 :
デフォルトの名無しさん :2013/08/03(土) 03:19:45.33
Javaやってるといかに日本人がサービス精神薄いというか、オープンソースにあまり向いていない?かが実感できる。 海外のフォーラム等のボランティア精神がまったく違うんだよね〜。 日本人は陰湿なコード(自分は端から端まで把握してはいるがそれをコードで表現していない)が大好きな人が多い。 妙な悦に浸っている。良い設計の本にはその辺りが書かれている気がする。
2種類以上のjavadocを統合って出来ますか? あるパッケージのjavadocファイル群と別のパッケージのjavadocのファイル群が別々にあって それと統合したいんです
181 :
180 :2013/08/03(土) 06:11:19.93
どちらもソースコードは無いのでソースコードから生成し直すってのは出来ないです
androidの話になっちゃうけど
例外をスローしないでスタックトレース出して終わりという
お粗末なandroid標準APIがあるよ
>>180 1.htmlを自分で編集する。互いにソースリンクがないなら超簡単
2.jadでシグニチャ取り出して自分でドキュメントコメント書いて・・・・
>>180 コアのAPIのサイトをリンク先にしたことあった気がしたけど、自前のサイトでもできるかな。Javadocのオプションで。
184 :
デフォルトの名無しさん :2013/08/03(土) 10:49:13.99
おはようございます。 7月から自学自習でjavaをしており 「解きながら学ぶjava入門編」という参考書を終え、ぼちぼち理解ができてきました。 次のステップアップのためのお勧めの参考書はなにかありますか? どなたかお答えお願いします。
勉強はもういいからモノ作れよ GUIやるのは無駄だからやるならコンソールでDBアプリとかな
解くという考え方が既に間違っている イメージを持って組み立てるものだ
188 :
デフォルトの名無しさん :2013/08/03(土) 15:54:33.89
Javaのチェック例外、俺はいいと思うけどな。 例外処理を考えてるときが一番勉強になってる気がする。 APIや他のオープンソースの設計見にいきたくなるし。
検査例外のアイデア自体が良いか悪いかはともかく、ラムダとの相性が絶望的に悪いのは事実 Java8で積極的にラムダを多用すればどうしてもRuntimeExceptionやthrows Exceptionだらけになるので 検査例外はほとんど意味がなくなるよ そうならないように長いこと議論して対策考えてたんだけど結局特に対策はなし
190 :
デフォルトの名無しさん :2013/08/04(日) 03:54:58.40
質問があります。 ほとんど設定しなくてもいいのでJOptionPaneを使っているのですが、 このダイアログが表示されたときのコンポーネント(ボタン等)を個別に取得してサイズ等をを変更する方法が知りたいです。 機能はまったくいじるつもりは無く、内装を少し変えたいです。
次の質問どうぞ
class CLS { public static void main(String[] args) { func1(1); } void func1(final int arg) { func2(arg); } voi func2(int arg) { arg = 9999; } } 上記のarg = 9999;のように、final引数→通常引数とわたされた変数は、通常引数の場所で変更可能ですか?
試せばわかるだろ死ね
>>192 渡されるのは値っす。
func2の変数argの値は変えることができる。
func2の変数argの値を変えてもfunc1の変数argの値は変わらない。
>>192 この例だと参照渡しでなくコピーなので変更可になるかな?引数がintでなくクラスの場合にはfanc2の宣言のところで、final変数を通常変数で渡してる、ってエラーがでそう
196 :
デフォルトの名無しさん :2013/08/05(月) 23:00:00.33
for(int i = 0 ; i < 10 ; i++){ system.out.println("i") if(条件式){ i = 0; } } このようにとある条件の時のみ変数iを戻したいのですけど この書き方はよくない(一定で上がり続けるiを勝手に変更するのは御法度) と指摘されました。 なにかほかに言い書き方はありますか?
はいはい、参照の値渡し参照の値渡し。
>>196 無限ループの原因になりがちというこそなら、forをbreakしてその外で戻せば(return?)問題ないんじゃない。
>>196 その条件をクリアするだけなら下みたいにラベル付きループとかも使えるけど
意図が分かりにくくて比較的バグの温床になりやすいコードってのはあんまし変わらんよ。
loop: while(true) {
for(int i = 0 ; i < 10 ; i++){
system.out.println("i")
if(条件式){
continue loop;
}
}
break loop;
}
その部分をメソッドに抜き出して正常完了か異常終了したかを戻り値で返す、
異常終了なら再度そのメソッド呼び出すみたいにした方がいいんじゃね?
ビーンズの特定のプロパティ(複数指定可)のみ比較するライブラリってありませんか?
201 :
デフォルトの名無しさん :2013/08/05(月) 23:40:30.58
>>195 func1のfinalはfunc1の変数の書き換えを制限するもの。
func2の変数はfunc1の変数とは別のものなんでfunc2の変数を
書き換えてもfunc1の変数は変わらないっすよ。なのでたとえ参照型で
あってもエラーはでないっすよ。
>>196 int i = 0;
while (i < 10) {
if (条件式) {
// 処理
i = 0;
} else {
// 処理
i++;
}
}
これなら誰が見ても意図は明らか
数字だけで構成されたString型のcodeという変数(例えば"02134") をInteger型の配列に一文字ずつ格納したいんですが([0,2,1,3,4]) 以下のようなコードを書いたのですけれど、もっとスマートな方法ありませんか? Integer[] Q = new Integer[code.length()]; for(int i = 0;i<code.length();i++){ Q[i] = Integer.parseInt(String.valueOf(code.charAt(i))); } よろしくお願いします
>>201 まじっすか!すまぬ&ご指摘ありがとう!
>>203 文字コードが連続しているのを利用して
char[] charArray = code.toCharArray();
Integer[] Q = new Integer[charArray.length];
for (int i=0; i<charArray.length; i++) {
Q[i] = (int)charArray[i] - '0';
}
>>205 codeが2GBあると2GBのメモリーとコピー時間の無駄遣いだからtoCharArrayやめれ。
>>203 Characterクラスのstaticメソッドにcharを数にする適当なものがあったはず。
208 :
205 :2013/08/06(火) 01:16:24.49
Character.digit(code.charAt(i), 10); これの方がいいな
209 :
靖国参拝、皇族、国旗国歌、神社神道を異常に嫌うカルト教団 :2013/08/06(火) 03:11:33.71
★マインドコントロールの手法★ ・沢山の人が偏った意見を一貫して支持する 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法 ・不利な質問をさせなくしたり、不利な質問には答えない、スルーする 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法 ↑マスコミや、カルトのネット工作員がやっていること TVなどが、偏った思想や考え方に染まっているフリや常識が通じないフリをする人間をよく出演させるのは、 カルトよりキチガイに見える人たちを作ることで批判の矛先をカルトから逸らすことが目的。 リアルでもネットでも、偽装左翼は自分たちの主張に理がないことをわかっているのでまともに議論をしようとしないのが特徴。
2GBもあるわけないだろ馬鹿か
たとえ2Bだろうと丸々無駄コピーなんだから一緒。
java使っといて無駄もくそもないわー
まじめな話ジャバ使っといて効率とか速さっていう奴は馬鹿でしょ
低速な環境こそ、チマチマした効率の追求に意味がある。 デスクトップPC用のGUIアプリで、 Cを使っといてインラインアセンブラを使うとかいう方がどうかしている。
インラインアセンブラ使ってない環境で効率とか速さとか言う奴は馬鹿でしょ
Javaでもうまく作れば普通に書いたCよりは速いこともあるよ どうしてもFORTRANみたいな糞コードになるけどw
GCJすごいな。実行ファイル作れるんだ
GCJってもう終わってるんじゃね?
222 :
デフォルトの名無しさん :2013/08/07(水) 21:51:33.96
javaのGUIプログラムを勉強中です frameとpanelの2種類あると思いますがpanelを使う意味ってあるのですか? webページを見ていたらpanelはオブジェクトのおくところと書かれてますが、 べつにframeにもlabelやら貼れますよね? 勉強期間はまだ短くてよくわかってませんが、どなたかpanelのあるとないとの 違いを教えてくれませんか?
>>217 Javaっぽい記述ではなくなるけど強引に速くなりやすいように書けるのかな。
興味あります。
なるわけないだろ。たまたまその時速かったとかだろ
実行時にコンパイルし直したりするからサーバサイドならC++より早いが触れ込み まあサーバサイドのボトルネックは9割方がデータベース(≒Disc I/O)なんだけど
>>222 panelは無地の板
複雑なレイアウトを行ったり関連する部品をまとめたりするために使う
InputStreamのデータをOutputStreamに高速に転送する方法が知りたいです。 現在はこのように単純に転送しています。 int length; while((length=input.read(buf))!=-1){ output.write(buf,0,length); } しかしこの方法だとreadとwriteが同時に行えないため、 readとwriteを同時に行って欲しい状況だとパフォーマンスが半減してしまいます。 マルチスレッドでも構いません。
チューニングのためにjni使ってるプログラムに素のjavaが勝つなんてことは 下手くそが書いたプログラムとかでないかぎりあり得ない
>>227 無理。というか read と write を同時には行えないよ普通。
read と write を交互にやるのをユーティリティメソッド内に閉じ込めるとかはできるけど。
高速転送に関して言えばファイル限定で
java.nio.channels.FileChannel の transferTo とか transfetFrom とかがある。
これは java の配列を介さずに転送するため javaの配列を介するより高速化する、
とされているもので内部では read と write を交互に行ってる。
あと必ず高速化できるとは限らない事に注意。
>>228 下手くそはごまんといる。たぶんオマエもその一人。
231 :
227 :2013/08/07(水) 23:00:55.68
>>229 ファイルではないのでFileChannelが使えなくて困ってます
> read と write を同時には行えないよ普通。
マルチスレッドで、readで一定数読み込んだものを次々とバッファに貯めていき、
並行してwriteはバッファから取り出して書き込むという流れではどうでしょうか?
232 :
227 :2013/08/07(水) 23:10:21.13
情報を具体的に開示します。
HDDが二台あり、片方のドライブからもう片方のドライブにコピーするとします。
どちらも読み込みと書き込みが50MB/sで行える場合、
理論上は50MB/sで読み込みをしながら、
それと同時に50MB/sで書き込みを行えるはずです。
しかし
>>227 のコードでは読み込んでいる間は書き込みが停止するので、速度は明らかに低下します。
単純なファイルのコピーならFileChannelが使えますが、
今回はFTPなどのプロトコルを介するためStreamしか使えないという条件です。
どうしましょう。
>マルチスレッドでも構いません 最初から答えが出ているようなものだが
234 :
227 :2013/08/07(水) 23:24:28.21
>>233 マルチスレッドの場合は読み込んだデータを一時的に保持しておくバッファを
どのように実装するかが問題になります。
最初はByteArrayOutputStreamを使おうと考えましたが、
ByteArrayOutputStreamのtoByteArrayは内部配列のコピーを行うため非効率とのことです。
そうなると一体どのようにバッファを保持するべきなのかわからず、質問させていただきました。
きゅーうえうえじゃなかった、Queueを使えばいいじゃない Queue<byte[]>とかQueue<ByteBuffer>とかでスレッドで同期させる
そういやパイプストリームとかいうそのためのソリューションがあったな 使ったこと無いから詳しくないが
>>217 間違っている。javaっぽくポリモーフィズム使いまくりでだとC/C++よりも倍近く早い。
算術演算や配列処理などの組み合わせでゴリゴリ糞コード書いている限りC/C++よりも倍近く遅い。
java1.7では1.6よりも1.5倍ほど速度改善しており、
ループの回数が多くなるとどんどん速度アップするので動的に最適化していると思われる。
238 :
227 :2013/08/08(木) 00:15:14.81
どれも一筋縄では行かなそうですね。 諦めてC++で実装したところ理論値に近いパフォーマンスが出たのでこれで回答は締め切らせて頂きます。 Java…(笑)
239 :
227 :2013/08/08(木) 01:14:28.27
>>235 さんの方法で実装したらC++と全く同じ理論値そのままのパフォーマンスが出ました。
IOが障害になってるならいくらドカタ専用言語javaでも遅いはずないだろ
読み込んでいる内容を読み込んだ脇から書き出していくのか 全く想像もつかない処理だは
入力したキーがリアルタイムで送信されるチャットシステムとかかな
てst
ここまでデータ圧縮の話なし。
1 → 1B 12 → 12B 123 → 123B 1234 → 1.23KB 12345 → 12.3KB 123456 → 123KB 1234567 → 1.23MB 12345678 → 12.3MB みたいな感じで整数を3ケタくらいの大きさ単位を含む数字に変換するクラスとかメソッドってある?
intの8ビットをそれぞれフラグとして使いたいのですが、ネットで調べてもどうしても理解できません。 int flgInts = 0; に 01010101 というフラグを設定して、 boolean[] flgBooleans = new boolean[8]; にそれぞれフラグを代入するにはどうすればいいでしょうか。
flgBooleans[0] = flgInts & 0x1 > 0 flgBooleans[1] = flgInts & 0x2 > 0 flgBooleans[2] = flgInts & 0x4 > 0 flgBooleans[3] = flgInts & 0x8 > 0 flgBooleans[4] = flgInts & 0x10> 0 flgBooleans[5] = flgInts & 0x20 > 0 flgBooleans[6] = flgInts & 0x40 > 0 flgBooleans[7] = flgInts & 0x80 > 0
>>245 そんなもん5分で書ける
それ丸めかたとか1024単位or1000単位とかアプリの要件によって様々だから
標準で用意されてても意味ない
5分で書けるとか天才か
一心不乱にタイプでもするのだろうか
>>247 下位4ビットまでは、0x01、0x02、0x04、0x08と乗算なのに
4ビット→5ビットで0x08→0x10と乗算でないのは、なぜなのでしょうか?
0x8 * 2 → 0x10
0x1 = 1 0x2 = 2 0x4 = 4 0x8 = 8 0x10 = 16 0x20 = 32 0x40 = 64 0x80 = 128 0x100 = 256
>>252 なるほど!
ならflgIntsに01010101を設定するのは、
int flgInts = 0;
flgInts += 0x01;
flgInts += 0x04;
flgInts += 0x010;
flgInts += 0x040;
ってことでしょうか。
>>254 int flgInts = 0;
flgInts += 0x01;
flgInts += 0x04;
flgInts += 0x010;
flgInts += 0x040;
×この方法だとflgIntsに同じフラグを立てられない
int flgInts = 0;
flgInts |= 0x01;
flgInts |= 0x04;
flgInts |= 0x010;
flgInts |= 0x040;
○ビット操作であることを意識する
>>255 int flgInts = 0;
flgInts |= 0x01;
flgInts |= 0x04;
flgInts |= 0x010;
flgInts |= 0x040;
○ビット操作であることを意識する
というのは理解できました。
×この方法だとflgIntsに同じフラグを立てられない
というのはどういった意味でしょうか?
>>256 すでに1だった場合
繰り上がりで値が変わる
>>257 理解しました。ありがとうございました!
ガチなのか釣りなのか分からんな
ビットでフラグ管理しようとする人間がする質問じゃないわな
ビット操作ならBitSetを使えばいいよ
>ビットでフラグ管理 これって旧時代の超低スペックのメモリ1MB未満時代のテクニックじゃないの?数GBのメモリの現代でいらんことだろ
1+2+4==7
>>262 メモリの節約はパフォーマンスの向上につながる
バイナリでファイルを読み書きしたり送受信したりする場合、IOを減らす意味で大きな効果があるよ
超ガチな計算ならメモリアクセスがボトルネックになったりするのでそれを減らせれば速くなる場合も
ネットワーク通信周りだとビット管理せなきゃならんでしょ
EnumSet使えよ。
>>267 スクリプト言語ならメモリアクセスのコストは命令の実行コストとくらべて無視できるけど
Javaはそこまで遅くないぞ
スクリプトでもIOを減らすのは効果あるし
メモリ節約は情報圧縮の技術がふんだんに使われるから圧縮された情報を伸張するのに処理コストが
Web土方にマイクロベンチマークは不要 JOIN禁止とか特殊なSQL最適化をやった方がリターンが大きい
>>248 5分のコードください
GPLでお願いします
ネットからコピペに5分かかるってことだろ
一心不乱に打ち込めば1万行のコードくらい5分で書ける
そういう行数って空白行やコメント行や鉤括弧だけの行とかもカウントされるん?
まず単位を調べるのに5分掛かる 1024モードの小数点数部をどう丸めるか考えるのに20分掛かる
1|2|4==7
はいはい、複数のフラグの検査が一度に行えるって言いたいんでしょ
flgInts == 7 と flgInts & 7 == 7 では意味が違います
その変数の命名の仕方はアウト
バカにはムリw
どのビットが何のためのフラグか分かりにくいから こういう管理はよろしくない 何のフラグか分かりやすいよう一つ一つbooleanで定義してやるべき
android APIでは使われてるよな。1つの引数で複数のフラグ渡せて便利だからかな。
すみません質問があります。
GWTよりデプロイした複数のwarフォルダを配置させる方法がわかりません。
http://****/ここ に複数置きたいです。
RPCを使っていない場合は問題ないのですが、RPCを使うとき、○○○Serviceが見つからないというエラーがでます。
○○○ServiceというのはClientパッケージに置く、RemotoServiceインターフェースを継承したクラスです。
もっというと、そのクラスのこのアノテーションに指定したvalueだと思います。
@RemoteServiceRelativePath("○○○");
非同期通信を使う場合、web.xmlに
....
<url-pattern>/モジュールファイルのrename-toで指定した値/○○○</url-pattern>
のように指定しなければいけません。この辺りが原因かと予想しているのですが解決策がみつかりません。
@GWTでRPCを利用しweb.xmlファイル、@RemoteServiceRelatiovePathを一般的な方法で使う場合、デプロイしたwarフォルダ名は変えて良いのか?
Aそもそもデプロイ後にweb.htmlを編集してurl-patternを変えることが有効なのか?(RPCを使う場合)
この辺りがわかりません。助言願います。
状況が良く読めないのだけど、(1)(2)はとりあえず運用上面倒臭いこと事欠かないので 他の解決策を模索した方が良いように思える。 「複数のwarフォルダ」というのがよく見えないのだけれども、 ・複数のGWTプロジェクトがあって ・故に複数のwarファイルがあって ・それらを一つのサーブレットコンテナ、例えばTomcatにデプロイして ・一方のプロジェクト内clientから他方のプロジェクト内で定義されたサービス を呼ぶ とかいう話かな。・・Serviceが見つからないというのはデプロイ後にサービスを クライアントから呼んだときに出るエラー? それとも開発時に出るコンパイルエラー? @RemoteServiceRelativePathアノテーションの値を・・Serviceとは別の値にして RPCの呼び出しに失敗しているのかそれともJavaScript生成も含めたコンパイルの 問題なのかはっきりさせた方が良いと思う。
285 :
デフォルトの名無しさん :2013/08/09(金) 05:31:37.68
セキュリティスレは立てないんですか。
intの32個あるbitをフラグにする話 もう終わってるかもしれないけど 下位4ビットを立てる場合 int flag = 0; flag = flag | 1; flag = flag | 1 << 1; flag = flag | 1 << 2; flag = flag | 1 << 3; 立ってるか確認 flag & 1 flag & 1 << 1 flag & 1 << 2 flag & 1 << 3 7から2進数リテラルが使えるので static final int MASK1 = 0b0000000000000000000000000000000000001; static final int MASK2 = 0b0000000000000000000000000000000000010; flag = flag | MASK1; MASK1 & flag こんな書き方もできるようになってたりする
いや、他のライブラリや言語とやり取りするのに必要とかよほど尖った処理をするので 無い限り、使えるところは普通にEnumSet使おうよ・・・
>>284 プロジェクト名ディレクトリ/war/welcom.html,WEB-INF等
みたいな配置が一般的なのですかね?それだと確かにwarディレクトリ名が干渉しあわないですね・・・。
実は一番やりたいのは、デプロイした一つのwarフォルダの中に二つ目のwarフォルダを収めたいです(おそらく異様?だと思うのですが出来ればあわせて一つのサービスのようにしたい)。
それをしようとすると、どうもRPCを使う場合で二つ目のパスがうまくいかないです。
/war(一つ目)/二つ目プロジェクト名/war(二つ目)/WEB-INF/web.xml
見たいにしたいということです。ですが、お決まりどおりに二つ目のweb.xmlを設定すると、
<url-pattern>/rename-toした値/○○○Service</url-pattern>
となり、「/」からはじまるため、期待する
/war(一つ目)/二つ目プロジェクト名/○○○Service
ではなく
/○○○Service
になっているのでは?と考えました。それにあわせて色々設定しているんですが中々うまくいきません
やはり、GWTで作った一つのサービス毎に並列に同じ階層に並べた方がいいのですかね?
webappとしてのマッピングはサーバーを書くときにまとめてしようと考えており、これら二つのサービスは二つで一つのものにしたくてこのような考えに至りました。
>>245 数値ではなく数字でおkなら
java.text.デシマルフォーマットみたいなクラスがあるけどどうだろう
>>245 org.apache.commons.io.FileUtils.byteCountToDisplaySize
自己解決しました
java.util.Vectorのインスタンスを内包するクラスで 最初の要素を取得するメソッドで最初の要素が無い場合nullを返したいとき サイズ見て返す処理と、例外拾って返す処理のどっちのほうがいいの? //サイズ見て返す public Foo firstFoo() { if (vector.size() > 0) { return vector.firstElement(); } else { return null; } } //例外拾って返す public Foo firstFoo() { try { return vector.firstElement(); } catch (NoSuchElementException e) { return null; } }
>>292 最初の要素がない、というケースがどれほどあるかにもよるけど、
基本的には前者のがいい。
後者なら例外そのまま投げちまうのもアリ。
>>292 例外は、名前の通り、例外的な状況で使おう
「最初の要素が無い場合」 というのが、あまり発生しない例外的な状況なら、例外でもいい
普通に頻繁に発生する状況なら、サイズを調べる方がいい
295 :
292 :2013/08/09(金) 19:13:37.10
引数がnullであって欲しくない場合に出す例外は NullPointerException?IllegalArgumentException?どっちがいいの?
System.err.println("null");
>>296 IllegalArgumentExceptionがいい。
IllegalArgumentExceptionなら引数が不適切だってわかるけど、
NullPointerExceptionだと何が不適切なのかわがんねっす。
>>296 throw new NullPointerException("仮引数名") でよくね?
例えば java.io.FileのコンストラクタFile(URI uri)を見てみようか これはuriがnullだったらNullPointerException、uriが前提条件を満たさない場合はIllegalArgumentExceptionを返す すなわち、ぬるぽが正しい
全くもって正しいとは思わないが従うより仕方がない 明示的にnullチェックしないのはJavaの悪しき慣習だよ
>>296 causeにnullpointerexcetion入れとくと…めんどくさいか。
java.util.CalendarのメソッドcompareTo(Calendar anotherCalendar)も anotherCalendarがnullならNullPointerException、anotherCalendarが無効値ならIllegalArgumentExceptionと コンストラクタでもメソッドでもぬるぽが正しいとこれで分かるはずだ
むしろ引数がnullでIllegalArgumentExceptionを吐き出すクラスがあったら教えてほしいくらいだ
nullと他の異常値を区別する合理的な理由はなく、 引数以外のぬるぽと紛らわしいだけだよね nullチェックをサボれる場合があるという利点なのかわからん利点があるくらいか
306 :
デフォルトの名無しさん :2013/08/09(金) 20:56:56.14
>>305 そうなんよね。
IllegalArgumentExceptionだと引数がまずいって限定されるのだけど、
NullPointerExceptionだとこんだけある。
null オブジェクトのインスタンスメソッドの呼び出し
null オブジェクトのフィールドに対するアクセスまたは変更
null の長さを配列であるかのように取得
null のスロットを配列であるかのようにアクセスまたは修正
null を Throwable 値であるかのようにスロー
ぬるぽ使ったら負けだと思う。
.NETだとArgumentExceptionを継承したArgumentNullExceptionを投げるルールになってて ぬるぽ例外とは別だったりする Javaの設計当初はこんなに土方がぬるぽ飛ばしまくる言語になるとは想像もしてなくて ちょっと記述を楽しようとしちゃったんだろうな
じゃあIllegalArgumentExceptionから派生させてArgumentNullExceptionを作ってやればいいってことかい?
NullArgumentException
>>299 俺はこれだな。↓みたいなボイラープレートコードが大量にある。
@NotNullでBean Validationなしで同じ事してほしいわw
if (param == null) {
throw new NullPointerExpection("param");
}
ぬるぽはキャッチする馬鹿がいるしなあ
NullArgumentExceptionでググると統一されてないのな NPEで作るのかIAEで作るのかはっきりさせてほしい
情報量が多いって意味では throw new IAE("param: " + param) がいいのかな
そもそもnullが存在するのが悪い finalじゃないフィールドの宣言時に初期値としてヌルオブジェクトを入れてnullを返すメソッドはヌルオブジェクトを返すようにラップしてしまおう
>>317 クラスの外から引数にnullが渡されるのは防げないだろ
わざわざチェックして例外を投げるのは呼び出し元を信用できないからだ
自分やお約束の通じる相手からしか呼ばれないなら極端な話チェックなんかしなくてもいい
Javaって無駄な処理が多いよね
>>292 のなんかも結局VectorクラスのfirstElement()メソッド内でもサイズのチェックするわけだし、二重のチェックしてることになる
elementAt(index)を使ってもindexが有効範囲内にあるかチェックするわけだし
無駄な処理大杉
Javaの標準ライブラリの慣習がNPEなんだからNPEかNPEの派生クラス作って返すべき
void hoge(HogeClass a) throws NullPointerException { if (a == null) throw new NullPointerException("param a"); //←これ必要か? a.method(); //aがnullならここでNullPointerExceptionが発行されるんじゃないの? }
凡プログラマ量産言語と化してる。しかも柔軟性皆無。オブジェクト化の意味あんのか
フェイルファストの利点は副作用が起きる前に事を止めることにある
>>321 それだと何が原因でぬるぽが発生したのかわからん。
仮引数名書いてないなら無駄だけど、仮引数名書いておくなら全然無駄じゃないぞ。
325 :
デフォルトの名無しさん :2013/08/09(金) 22:53:40.66
>>317 nullを発明したアントニーホーアさんも謝罪してたねw
私がnull参照を作ってしまったばかりにすまぬ(´・ω・`)と。
>>318 俺が作るものを他人が使うわけがないから全く問題ない
配列があふれても平気な顔している言語は初学者に妙な癖を与えてしまうと思う 初学者ならまだしも、配列の足し算が大好きな(?)妙なコードをたまに見る
自分しか使わないものなら 細かいエラーチェックなんてしなくていいしな
自分しか使わんもんでもどっかでミスしてnullを渡すかもしれんだろ!
330 :
デフォルトの名無しさん :2013/08/09(金) 23:48:21.53
まぬけ
引数のチェックで複数のメソッドで共通するチェック項目があるんだけど チェックで引数で違反があった場合に例外を投げたい boolean checkArgs(Foo arg1, Bar arg2) { 〜 } void hoge(Foo arg1, Bar arg2) throws IllegalArgumentException { if (!checkArgs(arg1, arg2)) throw new IllegalArgumentExceptino(); } void hoge2(Foo arg1, Bar arg2, Hoge arg3) throws IllegalArgumentException { if (!checkArgs(arg1, arg2)) throw new IllegalArgumentExceptino(); } とするのがいいのか void checkArgs(Foo arg1, Bar arg2) throws IllegalArgumentException { 〜 } void hoge(Foo arg1, Bar arg2) throws IllegalArgumentException { checkArgs(arg1, arg2); } void hoge2(Foo arg1, Bar arg2, Hoge arg3) throws IllegalArgumentException { checkArgs(arg1, arg2); } とするのがいいのか それともチェックする内容同じでもcheckArgs()みたいの作らないでhogeとhoge2それぞれでチェックしたほうがいいのか
1番目。 引数をチェックするのが checkArgs の役割だから、checkArgs が「おっと、これは想定外!」って例外を投げるのは意味的におかしい。 ただし checkArgs だと引数をチェックして何がどうだったら true なのか false なのかが明確でないから、メソッド名は工夫した方がいいかも。
検査例外
FooとかBarとかhogeという名前は良くてcheckArgsという名前だけツッコム
>>334 今は引数が何なのかは議論してないからな。
揚げ足取りにしてはレベルが低いぞ。
ちょっとした質問するときも こじゃれたメソッド名を考えろと
回答が欲しいなら質問者は回答者がパっと見で分かりやすい名前をつけるべき
checkArgsという名前は何をしたいのかサッパリ分からない悪い名前、本来なら回答もなくスルーされるべき質問。回答もらえただけで感謝すべきレベル。
なら黙っててくださいね^^
340 :
デフォルトの名無しさん :2013/08/10(土) 01:52:10.77
はよ次の質問
自演くさい
DB的なものからDataを取り出すとき List<Data> getDataList(String key, int value) keyがnullだったら検査例外イリーガルアーギメントでぶっ飛ぶという内容の話題をしてるの? valueの範囲が0以上とか明確に決まっているなら、範囲外でイリーガルならわかるけど keyはnullチェックしないで、そのまま処理継続したけっかヌルポというスタイルでいいと思う 結果size0のList<Data>を帰しても問題ない が、size0のList<Data>ではなくnullを帰すのは断固反対する
何が検査例外だって?
swingで質問なんですけど、panelにlabelとbuttonを重ねたいんですけどいい方法ありませんか
ありません
>>344 z-index使えるべ
他にも手法はいくらでもあるしggってみて
透過もできる
本当にnullチェックが必要なら仕方ないが、その必要が無いのにチェックしているのはリファクタリングの対象として定石 また、必要な場合はnullオブジェクトが適応できる可能性あり
チェックしないと静的解析でNGになる
>>348 1行目の通り。
だけど静的解析でNGになる場合でのそれは初期値代入でスマートになることのほうが明らかに多い
>>332 checkArgsとhogeは引数に対して同じ条件を要求するメソッドと考えれば
例外が連鎖してるだけでなんら不思議はないはず
普通はcheckとdoとcheckAndDoを作るだろうな
>>346 ありがとうございます。
取り敢えずoverlaylayoutで試して見たんですけどうまく重なりませんでした。他の方法も試してみます。
>>346 ありがとうございます。
取り敢えずoverlaylayoutで試して見たんですけどうまく重なりませんでした。他の方法も試してみます
暑さのせいで朦朧としているのか同じレスが2連続して見える
>>346 ありがとうございます。
取り敢えずoverlaylayoutで試して見たんですけどうまく重なりませんでした。他の方法も試してみます
馬鹿回答者はちゃんとテストして動くの確認してから回答書くように
>>354 それはやばいな。俺はクーラーつけてないせいか、3連続みえる
老眼だろ。 俺が老眼だから間違いないw
爺さんがjava7についてこれるわけねえだろ!java1でも使ってろ!
読点
Java7って本当は7じゃなく1.7なんでしょう?2.0はいつ出るん?
Java10は1.10か
Windows 100 これはさすがにダサい
Javaはまだマイナーバージョンアップしかしていない未来ある言語。メジャーバージョンアップしたときJavaの時代が始まる
既存のクラス(String)にメソッドを追加したいのですが、 javascriptでいうprototypeのようなものはjavaにはありませんか?
オリジナルJREを作る
スタブクラスって言うんだっけ ブートストラップクラスパスとかいうので指定してコンパイルするとかなんとか
eclipseでエクスポートしたrunnableなjarファイルとは誰にとってrunnableなのですか? 確かに自分でダブルクリックすると実行してくれます。 違うOSのパソコンで試してみても確かに実行できました。 @これはJavaがパソコンに入っていたからという認識でよろしいでしょうか? Aまた、自分が開発時にしようしたjdkやjreのバージョンと、実行者の環境のJavaのバージョンが一致していない場合、どのように振舞うのでしょうか? B標準API以外のライブラリを使った場合、そのライブラリも含めて書き出せば使用者がライブラリをクラスパスに指定する必要はないと考えてよろしいですか?
jarファイルをアプリとして実行させるには環境へのJVM(JRE)のインストールが必要
LinuxやUNIXにも拡張子の関連付けってあるの?
そもそもアプリのアイコンをダブルクリックして起動するという発想自体があまり… Javaを扱うのはサーバー管理者だからね
ユニックス系はシェルでの設定次第とかじゃないの やり方によってはパーミッションで実行可能フラグ立てたりとかかな ユニックス系のシェルって拡張子じゃなくてファイルのヘッダとか見てファイルタイプ識別してるぽい印象
374 :
366 :2013/08/11(日) 02:04:00.16
どうやら、まともにやる方法はないようなので、 諦めて適当なメソッドに引数として、渡すことにしました。 ありがとうございました。
最近の若い奴はすぐ諦めてしまう
>>369 我らjavaドカタにそんな難しい質問しないでください
互換性の無いバージョンならエラーメッセージとか出るんじゃね
下位互換性が無いと困るから上位互換なら確実としてJava7じゃなくJava1でコンパイルしてやるべきだな!
デスクトップアプリとして配るんならアプリ自体にJREを同梱しとけ バージョン気にしなくていいしシステムにJREをインストールさせるのは想像以上に嫌がられる eclipseみたいに起動用アイコンを用意することもできるし
javaドカタはwebアプリとスマホしかつくれません
381 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/08/11(日) 02:13:44.64
>>369 @はい。
Aマニュアルを参照。
Bはい。
>>380 ほんと、なんで初心者向けのJava本ってSwing教えるんだろうな
あれこそが誤解の元
>>369 @知らんがそんな関連付けしやがるのはOS組み込みかJavaのインストーラ以外考えられんよね
A古い環境で新しいバイナリは動かん。
BMANIFEST.MFに書いておけばね。Netbeansでビルドして中のjarのMANIFEST.MF見ると勉強になる。
Cマルチプラットフォーム意識するなら丸数字使うな
MS-IME2010なら変換の際に環境依存文字と出るのだがな
WindowsのJREインストーラが勝手にjarを関連付けるのって セキュリティ的に問題あるよね 普通の人はexeは警戒するけどjarなんて知らないだろう
言葉尻をとらえる前にちゃんと質問に答えてやれよ。
>>369 (1) Java、正確には「Java Runtime Environment(JRE)」「Java実行環境」がパソコンに入っているから
(2) 詳しくは知らん。だが基本的にJavaは互換性を非常に重視するため、バージョンが違っても問題が起きるケースは少ない
(3) クラスパスを指定していない場合は「カレントディレクトリ」がクラスパスとして指定される
ゆえにクラスパスを「明示的に」指定する必要はないが、その場合は自動的にカレントディレクトリに設定されることになる
>>385 例えばPerlが.plを関連付けるのと何が違うんじゃ?
インストーラがシステムに対しての拡張子との関連付けやってくれる場合は拡張子ついてるファイルダブクリで起動したりするけど 手動でも拡張子の関連付けの設定できるんよ、インストーラがついてない手動インストールとかだと自分でやったりするし
パソコン初心者相談室か
オプション指定無しのJavaって64MBくらいでメモリ不足で落ちなかったっけ? 今のJavaは知らんけど
Vectorとかに古いJRE同梱アプリとかあるかな
JRE同梱はアホの極み 何のためのJavaなんだよ マルチプラットフォームである意味が全くないだろ
DLLランタイム同梱のアプリとかいっぱい出回っていたけど JRE同梱は流石に無いのか・・・ と思ったけど ちょいと前に存在してたauのPC用アプリのLismo PortとかいうやつのインストーラがJRE同梱だった希ガス
EclipseとかV2Cとか同梱バージョン付いてるのは珍しくない
JRE同梱じゃなくてJREインストーラ同梱の間違いだったわ
>>394-395 インストーラなんて同梱すんなよ。あほちゃう?
各OS向けに別のインストーラ入れなきゃならんわけで
Javaである意味がない。dll同梱してんのと変わらんやん
Oracle Databaseにしろ商用CADにしろ同梱版なんて腐るほどある
>>398 お前Oracleのツールが何で動いてるかしらんのか
Windows「じゃあ実行するよ」
アプレットやWebStartさえ廃止すれば必要以上にセキュリティホールで叩かれることもないのに、 なんでボラクルは今時あんな誰も使ってないゴミに拘るんだろうな Javaのアイデンティティみたいなもんなのか
>>374 Stringクラスを継承したMyStringクラスとか作って
それに使いたいメソッド定義すればいいだけ
Stringはfinalクラスだっての 値オブジェクトだからな
追加したい機能がわからないから回答できないとおもうの finalだから継承はできないけど、文字列を独自のアルゴリズムでどうこうしたいなら そういうStringUtilなクラスを作るべし
406 :
366 :2013/08/11(日) 15:49:17.06
簡単に言うとjavaの正規表現があまりに使いにくいため、 javascriptでいうmatchメソッドを追加したいのです。
アノテーションとstaticインポートの組み合わせてmixinできてもいいのにな 第一引数に拡張したい型を取るstaticメソッドとかでさ、他の言語でもあるだろ
すみません質問があります。 今までプログラミングを一度もやったことがないのですが ネット関係に興味があり何か自分でプログラミングして作ってみたいと思ってます スマホのアプリもjavascriptが必要であるとのことで最終的にはスマホのアプリも作れればいいなと思ってます まず初めにjavascriptの入門書を1冊買ってやってみようかと思ってるのですが 入門書を買わなくてもネット上にjavascriptの使い方はあるのですかね? それともやはり本を1冊かってやってみたほうが身に付くのでしょうか?
>>408 プログラム言語程度ネットで事足りることは多いけど
昨今は裏でかなりトリッキーなことしてることが多いから本買った方がいいよ
入門はネット、中級書を書店・Amazonで
>>409 ありがとうございます
入門書を1冊かってやってみることにします
>>374 Stringクラスを継承したMyStringクラスとか作って
それに使いたいメソッド定義すればいいだけ
>>406 具体的には、今どう書いているのを match メソッドを作ってどう書き直したいの?
String クラスはサブクラス化できないから
>>405 の人が書いているように StringUtils クラスを作ることになると思うけど、Apache Commons とかで代用できそうなのがあるかもしれない。
414 :
366 :2013/08/11(日) 16:58:29.51
>>413 Apache Commonsてなんすか?
>>413 abcDabcEabcF
という文字列に
abc.
で検索した結果を、
["abcD", "abcE", "abcF"]
という形の配列で得たいのです。
これを
配列="abcDabcEabcF".自作メソッド("abc.");
のように簡単に実行したいです。
416 :
366 :2013/08/11(日) 17:01:55.99
>>414 こいつは366じゃないので無視してください。
私もよくわかっていないので自力で調べます。
>>415 public class StringUtil {
public static String[] match(String target, String regex){
ArrayList<String> list = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(target);
while (m.find()){
list.add(m.group(0));
}
return list.toArray(new String[0]);
}
}
418 :
366 :2013/08/11(日) 17:14:11.79
>>417 わざわざコードまでありがとうございます!
理解してから色々拡張してみます。
422 :
デフォルトの名無しさん :2013/08/11(日) 19:23:32.69
swingのクラスを使い、 JFrameのとある一部分の背景色を変更するにはどうしたらいいんでしょうか JPanelとかを使ったりして背景色を変更しようとしても 全面同じ色で塗りつぶされた様になってしまいます。 どなたかアドバイスをよろしくお願いします。
GUIはC#でやってください JFrame f = new JFrame("タイトル"); f.setBounds(0,0,100,100); f.setLayout(null); JPanel p = new JPanel(); p.setBounds(0,0,10,10); p.setBuckGroundColor(Color.色); f.getコンテンツペイン().add(p); f.setVisible(true); スペルとか超怪しいけど気にしない これでだめだった?
>>423 何言ってんだこいつ
GUI使ったらMono使えなくなるじゃん
肝心なことかきわすれてた f.setLayout(null); というのは デフォルトのレイアウトが左詰めのフローレイアウトだから その上にパネルを一枚乗せるとパネルが画面全部を埋めてしまっていると思うので それを回避するためのものです この場合レイアウトは無いということになるのでsetBounds(x,y,width,height)で位置と大きさを指定します
426 :
366 :2013/08/11(日) 20:05:00.09
>>419 そうなんですよ。
どうしてもjava使わないといけないので、
使っているだけで元々畑違いもいいところで...
>>422 setBackgroundだと拡張し辛いからJComponentでpaintComponentをoverrideするか、
awtのCanvasのpaint使うか、CanvasからBufferStrategy取得してBufferedImageで扱うかしたほうがいいと思う
JPanelでやってみた例
http://ideone.com/u5Ce9i 画用紙と図形をまとめておけば余り汚さないかもね〜
super.paintComponent(g)しておいたほうがよかったね スマソ
自己解決じました
え、monoってGUIダメだったの?!
非互換だらけだから大幅な手直しが必要 GUIに関してはJavaとは比べるべくもない
javaより酷いってことはゴミ未満ってこと?
monoはJavaとは思想が違ってて、 マルチプラットフォームなGUIなんてクソだからGUIはネイティブなAPIを使って個別に作れという考え方
.NET系のクロスプラットフォームはそもそもバイナリ互換を重視していない Unityみたいなのですら#if上等だからな
Formはwindowsってネームスペースにあったから心配してたけど驚きの事実だったわ
俺はそっちの割り切った思想のほうが好きなんだけどな 結局Swing製のGUIとか使いにくいし、 いずれにせよwrite once,run anywhereなんてことにはどうせならん
マルチプラットフォームをサポートすると細かいデザインが出来ずに残念なことになるのは javaさんが証明したしな
javaでデスクトップマスコットを作っているのですがバルーンの部分がうまくいきません。何か案があれば教えて下さい。
7なら丸いウインドウも、半透明なpngも出せるからあとは画像用意すりゃいい
ぬるぽ出すとガッされるんですか?
されないがぬるぽは気がゆるんだ時に出るから引き締めろってことだな
以上javaドカタジョークでした
sunの仕様に準拠して作られているという点では、tomcat/glass fishは同じだと思うんですが この2つは何が違うんですか? glass fish = EJB準拠?だけど、tomcatはサーブレッド/jspしか動かせないんですよね 機能的にはglass fish > tomcatってことですか
tomcatに物足りなさを感じたらjettyかGWTかjbossあたりを学ばないとつまらないよ。 サーブレット、jspなんてフレームワーク「内の」一部品にすぎないでしょ。
「学ぶ」だってw
簡単に違いを言うならフルプロファイルとWebプロファイルの違いか Webプロファイルはフルプロファイルのサブセットだから 消費メモリと起動時間はTomcatのが優れると思われる。 私はJBossよりGlassfishのが好き。Web版管理コンソールが使いやすい。
448 :
443 :2013/08/13(火) 21:07:29.47
tomcat + 軽量コンテナで組み合わせて使うってことはわかったんですが、 EJB + 軽量コンテナの組み合わせってあるんですか? 例えば、Glassfish + strutsの組み合わせとか 軽量コンテナ = EJBの代替品って考え方が根本的に違っているのかな
軽量コンテナって言われてた頃の利点はもう他の製品にはないと思う 軽量コンテナと言われてたものはCDIとしてEEにも備わってるし、 トランザクション境界を戦略的に使い分けられるEJBは最近は便利に感じる
初歩的な質問でごめんなさい JAVA SE/JAVA EEでRUNTIMEは別々にあるんですか
EEはSEのアプリケーションサーバーとしての拡張仕様 JSRという団体が作ったAPIをEEというサーバー規格に纏めてる SEのAPIもJSRが作ってるから公式の拡張仕様ということ。 Glassfishは現在のEEの参照実装といってEE規格に沿うと こんな感じのサーバになりますっていうサンプルサーバー扱い 出来が良すぎてこいつを本番で使う企業も多い
つまるところEEのランタイムはサーバーそのもの。
馬鹿だから質問が理解できなのか
454 :
450 :2013/08/13(火) 22:38:02.52
わかりました ありがとうございます
455 :
443 :2013/08/13(火) 23:07:53.39
>>449 最後に1つだけ教えて
java eeとspringで出来る事って被ってるよね
springやhibernateを使わずに、java eeだけってありだと思う?
あり。
>>455 最近のEEだと有りだね。標準規格に合わせないSpringのが小回りは利くと思うが
EEもそういう先進的なアイデアを十分に取り込んで使いやすくなってる。
外部から色んなライブラリを集めてこなくてもいいから環境を整えるのも早い。
458 :
443 :2013/08/13(火) 23:34:48.42
サーブレットとjsp、あとは静的コンテンツとかならtomcatで十分だけど、 サーバー起動までの部分をxml使わずに自分で用意したかったりソケットでhtmlと通信したい場合、jettyのほうが低レベルから扱える気がする
460 :
デフォルトの名無しさん :2013/08/15(木) 21:21:39.32
こういうnullを含む配列をソートするにはどうすればいいですか? Arrays.sortだとNullPointerExceptionが投げられます。 どうすればいいですか? Integer[] a = new Integer[10]; for (int i = 0; i < a.length; i++) { a[i] = Integer.valueOf(i); } a[0] = null; Arrays.sort(a);
Comparatorだかを実装してnullに常に-1か1を与えればできない?
462 :
デフォルトの名無しさん :2013/08/15(木) 21:36:33.23
>>461 なるほどやってみます、ありがとうございます。
463 :
デフォルトの名無しさん :2013/08/15(木) 22:03:09.85
>>461 できました。これです。ありがとうございました。
Comparator<Integer> c = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 == null && o2 == null) {
return 0;
} else if (o1 == null) {
return 1;
} else if (o2 == null) {
return -1;
} else {
return o1.compareTo(o2);
}
}
};
Arrays.sort(a, c);
てst
465 :
sage :2013/08/17(土) 07:29:05.15
すみませんfinalについて質問があります。 while(true) { final Point p = new Point(3, 4); } こういう場合、二回目以降はnewされていないと考えてよいのでしょうか? fieldと遠くなるのがちょっと嫌で、繰り返しで何度もnewされない方法になるのではないかと考えております。
>>465 何度もnewされて実際とっても遅くなるよ
Javaにはユーザー定義の値型がないので、そういうベクトルの計算なんかは工夫が必要
JITが賢いから小さいクラスを多用した処理はうまく最適化されるという触れ込みだが、
実際やってみると全く全然当てにならない
javaを学習し始めて一か月の初心者です。 guiプログラムを一先ず終え、web系を始めようと思っているんでけれど、 webアプリケーション、サーブレット、JSP これらの単語は同じものとして解釈してもいいのですか? 調べているうちにこのような言葉がたくさん出てきて少し分からなくなってきました。
>>466 >何度もnewされて実際とっても遅くなるよ
ホントですか。ということは、フィールド使えということですね。
この例だとそれですぐ済みますが、list等使わないと苦しい場合はでてきそうです。ありがとうございました。
>>467 webアプリケーション:web上のひとつのアプリ全体 (言語を問わない - Javaでなくてもwebアプリと呼ぶ)
サーブレット:HttpServletを継承した普通のJavaのクラス (サーバ上で動く)
JSP:HTMLの中にJavaのプログラム (サーバ上で動く) を書ける
>>468 x, yそれぞれ別の配列に持てばおk
どこのfortranだよって感じになるけど土方言語だから仕方ない
動的再コンパイルが掛かるまで大した最適化は行われないと思うし クライアントアプリでパフォーマンスに拘るなら配列使うのがいいな 最初から60fpsを諦めちまえば気にすることもないのだろうが
>>471 >動的再コンパイルが掛かるまで大した最適化は行われないと思うし
それを当てにして
>>466 みたいな感じで重い計算を書いたらクソ遅かったわ
エスケープ解析は無いものと思った方がいい
>>467 サーブレットとjspは一角にすぎないよ
それらだけじゃAJAXの技術身につかないし
>>467 Webアプリケーションはソフトの分類
サーブレット・JSPはその具体的な実装の手法
勉強目的ならJSPじゃなくてサーブレットを選ぶことになるかな
どちらも「コンテナ」と呼ばれるミドルウェアに組み込んで
Webサーバに載せる形で動かす
jspでmvcをやりたいのですが、EJBだけでできますか springとか使わないと無理でしょうか asp.netだと画面を自動生成出来ますが、jspではhtmlを手書きするしかないんでしょうか
違反コードがちょっと意味不明な例文に見えるが解釈はそれでいいよ 拡張for文はIteratorなりインデックスアクセスなりの操作に置き換わるが ソースコード上でそれらの操作オブジェクトには触れないってのがポイントなのかな 俺はそのサイトの解決より自前でリスト作って置いてコレクションにラップすんなよってツッコミたいがw
>>477 ありがとうございます。
続けて質問なのですが、リスナーを自作しようと考えており、
public interface StateChangeListener extends EventListener {
void stateChanged(StateEvent e);
}
public class StateEvent extends EventObject {
public StateEvent(Object source) {
super(source);
}
}
のように標準APIに従うように用意しました。
ですが具体的な実装の部分(fireの部分?)があまり理解できていません。
public class Obj {
private int x;
public Obj(int x) {
this.x = x;
}
}
例えばこのObjクラスにaddStateChangeListenerメソッド等を持たせて、
xの値が変わると毎回stateChangedメソッドが呼ばれるようにするにはObjクラスをどのようにすればいいのでしょうか?
リスナーを自前で実装したことはないけど一般論で言うなら… public void setX(int x) { this.x = x; fireStateChangeEvent(); } public void fireStateChangeEvent() { StateEvent event = new StateEvent(this); for (StateChangeListener listener : listeners) { listener(event); } } でええんやないの?コレクションは私ならLinkedHashSetを選びそう。 setterが複数ある場合でもリスナ名からすれば都度呼び出すのだろうね
おっと・・・ ×public void fireStateChangeEvent() ○private void fireStateChangeEvent()
>>479 ありがとうございます。参考にします。
標準apiのComponent辺りのクラスを参考にしたいのですが、AWTEventクラスが絡んできて理解できませんでした。
ボタンを押すとカウントが増えるGUIデータが失敗します。 カウントはラベルに表示されるはずです。 eclipce使用で、エラー表示はありません。 カウントが増えない以外は成功してます。 下記のコンストラクタなクラスを別クラスのメインから、 GUI7 frame = new GUI7(); で実行してます。 同じクラスでメインを実行しても失敗します。
483 :
482 :2013/08/18(日) 09:51:31.66
public class GUI7 extends JFrame implements ActionListener { JButton b1; JButton b2; JLabel l1; int count = 0; GUI7(){ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 300); setVisible(true); getContentPane().setLayout(new BorderLayout()); JButton b1 = new JButton("zouka"); JButton b2 = new JButton("zero"); JLabel l1 = new JLabel(count + "clicks"); add(b1,BorderLayout.NORTH); add(b2,BorderLayout.SOUTH); add(l1,BorderLayout.CENTER); b1.addActionListener(this); b2.addActionListener(this);} public void actionPerformed(ActionEvent e) { if (e.getSource() == b1) {count++;} else if (e.getSource() == b2) {count = 0;} l1.setText(count + "clicks");}
484 :
デフォルトの名無しさん :2013/08/18(日) 10:03:50.79
>>483 JButton b1 = new JButton("zouka");
JButton b2 = new JButton("zero");
JLabel l1 = new JLabel(count + "clicks");
これだとローカル変数を宣言してそれにインスタンスをセットすることになるっすよ。
actionPerformedで期待されるのはインスタンス変数にインスタンスがセットされてること
なので、こんな感じで。
b1 = new JButton("zouka");
b2 = new JButton("zero");
l1 = new JLabel(count + "clicks");
485 :
482 :2013/08/18(日) 11:15:54.67
ありがとうございます。現在外出中で携帯から書いてますが、帰宅後に試してみます。
亀だが、
>>27 抽象化されたクラスと、こういうインターフェイス(publicメソッド)を持っているよっていう定義
前者はその子クラスは全て振る舞いを制限されていて、そのインスタンスは基本的に同じような挙動をするもの
後者は、期待した挙動をするメソッドを持ちあわせているが、異なるインスタンスに関連性があるかは不明
前者を便利メソッドを追加する目的で使う奴は後を絶たないけどな(それが悪いという意味ではないが)
>>476 違反コード: for (String s : strings) {…}
適合コード: for (final String s : strings) {…}
違反コードでは
for (String s : strings) {
s = "ハゲ";
}
がコンパイルエラーにならないので、適合コードのようにfinalをつけ、明示的に代入が出来ない事を示すコードにしろ、って内容だよ
違反コードも適合コードも複雑に書かれてるけど、そのページの主題についてはそこまで深く考える必要はないと思う
---
再代入にメリットのあるケースのほうが少ないんだから、
変更可能な変数だけ明示できる仕組みだったらもっと楽だったのにな
別のオブジェクトを所有する不変オブジェクトを作りたいです。 別のオブジェクトをフィールドとして持つ際は new 別のオブジェクト(引数) で防御的コピーをするようにと書いてあるサイトが多いですが、これについて質問があります。 防御的コピーを行うために呼び出したコンストラクタの内部において this参照を引数として渡すような関数を呼び出しているような場合、 防御的コピーで生成されたオブジェクトへの参照が外部のクラスに漏れてしまいます。 このように別のオブジェクトのコンストラクタの落ち度で不変性が維持できないケースについては、 不変オブジェクトの設計者としては無視してもよいのでしょうか? それとも別のオブジェクトのコンストラクタの実装を調べて、参照が漏れていないか確認することも 不変オブジェクト設計者の責任に含まれるのでしょうか?
責任の所在は力関係による そもそも参照の露出がハッキリしてるのなら不変オブジェクトは 実装できないのだからこんなところで燻らせるよりそいつに相談しろよ
クライアント30台程度で、tomcat + apacheを連携させるメリットあるの? この程度のリクエストなら連携させないほうが、色々とメリットがある気がするのですが
>>490 本番レベルでApacheを運用してきた実績があってTomcat単体で実績がないなら
Tomcat単体のオプションを学習するメリットは薄いと言えない?
apacheを連携させるのって静的コンテンツをapacheが 処理できる程度のこと?
>>493 "aiu"の状態を変更して"aiueo"にしたわけでなくて、
"aiu"とは全く別に新しく"aiueo" を作ってその参照を text に代入してるだけだから。
元々の "aiu" の状態は変更されていない。
閉じた多能について質問なのですが、 public interface Bar { } を用意しておいて、Fooを閉じた多能にすれば Foo<Bar> foo = new Foo<Bar>(); このときの型には BarかBarをimplementsしたクラスかBarをextendsしたインターフェースかそれをextendsしたクラスに制限(コンパイルエラー)できる という解釈で良いですかね? Genericなクラスにしたいけど型の自由はある程度制限したい場合等に使えるということですよね。 標準APIで使われている箇所を知っていたら教えてください。
public class Foo<T extends Bar> { } 肝心のFooが抜けていました
× 多能 ○ 多態 public abstract class Enum<E extends Enum<E>>
StringはCharSequenceの実装でCharSequenceは読み取り専用としている
Stringが不変オブジェクトなのは知らなきゃまずいだろ ループ文で str += "うんたら" なんてやられたら大変なことになるぞ
>>499 String text = "";
String line = "";
while((line = br.readLine()) != null) {
text += line;
}
こういうのもダメなの?
よかった。 まぁStringBufferでappendが普通だとは思うけど
>>501 早い遅いじゃなくって、スタックセグメントにやたらと中間生成物の文字列追加しちゃうのが問題なんじゃないの?
なんで遅くないのにそれが問題なの。苦しいよ。
中間生成物が大量に発生するからGCが頻繁に走るってことだろ あとそもそもOracle以外のJava実装ではきちんと+演算子が最適化されているとは限らないので そういう環境では使えないテクニック
506 :
デフォルトの名無しさん :2013/08/19(月) 15:16:06.16
>>501 リンク先のコードと
>>500 のコードって違うよね。
>>500 のコードはループのたびにtextの長さがびにょーんと伸びてくから
StringBuilderを使うよりかなり遅いはずだよ。
507 :
デフォルトの名無しさん :2013/08/19(月) 15:26:57.00
Ropeは文字列を扱うもので不変オブジェクトだけれども、 Stringよりちょっぱやに処理を完了する。インスタンスを生成する回数より インスタンスを生成するときのサイズが重要なんだと思います。
public static void main(String[] args) { String a = "moji"; String b = "moji"; String c = a + b; System.out.println(a == b); System.out.println(c == a + b); String d = ""; for (int i = 0; i < 100000; i++) { d += a; } } これ実行すればStringBuilder.appendの重要性が認識できる
学校の課題で「org.w3c.dom.Elementインターフェースを実装した独自クラスを作りなさい」と言われました
MyElementクラスを作りました
http://ideone.com/GqQF12 エラーが出ました
わけがわかりません。助けてください
Main$MyElement cannot be cast to com.sun.org.apache.xerces.internal.dom.ChildNode これの通りMyElementは com.sun.org.apache.xerces.internal.dom.ChildNodeにキャストできないといわれている パッケージを見比べてみよう com.sun.org.apache.xerces.internal.dom.ChildNode org.w3c.dom.Document org.w3c.dom.Node
511 :
509 :2013/08/19(月) 17:14:20.44
>>510 同じNodeなのにどうしてMyElementだけエラーが発生するのでしょうか?
e1とe2はちゃんと追加できてるみたいです
21行目にこれを追加したら見えてきます System.out.println(document.getClass());
513 :
509 :2013/08/19(月) 17:35:36.78
このDocumentImplってのがバグを発生させている元凶ということですか どうすればDocumentImplを修正できますか?
ルート要素をMyElementに置き換えろとしか言えないかなぁ Node root = new Main().new MyElement(document.createElement("a"));
>>493 String text = "aiu";
text += "eo";
↓
現実
String text = "aiu";
text = new String("aiu" + "eo");
516 :
509 :2013/08/19(月) 17:52:24.68
517 :
509 :2013/08/19(月) 18:03:24.11
Node appendChild(Node newChild) ↑こう書いてあったら「Nodeを引数として渡せばうまく動く」と誰だって思いますよね? 実際には受け付ける型が違い、しかも実際に受け付ける型の名前はドキュメントに書かれていないなんて そんなこと許されるんですか?
ソースの中ではrootのDocumentImpl.Node appendChild(Node newChild)が呼ばれるわけで DocumentImplとは違うNode(MyElement)が混ざること自体ちょっと問題があるのかなと 私としての回答は514としか言えないが。 A社が作ったNodeの実装 com.a.NodeImplと B社が作ったNodeの実装 com.b.NodeImplに互換性があるわけがなす
519 :
509 :2013/08/19(月) 18:44:51.02
たとえばCollections.sort(List<T> list)の内部で、
listをArrayListにダウンキャストしているから、
実際にはArrayList以外は引数に渡せませんとなっていたら、皆さんどう思いますか?
誰がどう考えてもおかしいですよね
>>518 rootをそのように書き換えてもだめでした
http://ideone.com/bJrXak MyElementのappendChildは単なるラッパーなので、これ自体は仕方ないとは思います
520 :
509 :2013/08/19(月) 18:52:31.18
初学者なものでインターフェースについて誤解していたかもしれません > A社が作ったNodeの実装 com.a.NodeImplと > B社が作ったNodeの実装 com.b.NodeImplに互換性があるわけがなす 同じインターフェースを実装したクラス同士であれば、 相互に入れ替え可能であるというのがインターフェースの意義であると認識していました たとえば List list = ArrayList(); これを List list = LinkedList(); に入れ替えても、コードを変更することなくListとして使用可能というのが インターフェースの意義だと認識していました
あなたの認識は正しいが、非常に残念なことに理想と現実は違うということだ・・・
さすがオブジェクト指向言語ですね
今回のパターンは コンセントというインタフェース abstract抜き差があって 100V2極 200V3極 こんな感じになっているので抜き差しはできる 抽象的だけどこんな感じ
public Node appendChild(Node newChild) throws DOMException { if (!(newChild instanceof MyNode)) throw DOMException(DOMException.NOT_SUPPORT_ERR, "てめーのNodeなんて知らんわ!"); }
独自のクラスなんて作らずに標準ライブラリのオブジェクトをそのまま使え! ってことなんだろうね。再利用が可能なオブジェクト指向()
まあ、実際の動きとかは今回目をつむって どうやって課題をクリアするか考えてみよう 1.インポートできないのでソースをパッケージごとコピー 2.1を継承 3.ファクトリを自分で作る 4.インタフェースに矛盾があり作る気が起きませんと突っぱねる 5.引き数無しのMyElementコンストラクタを作る 課題として出るくらいなんだし。当然模範解答があるはずなので4はさすがにない
課題をクリアするだけならすでに十分じゃね 作ったクラスを親ノードにappendしろとは言ってないんだし問題なかろう
>>初学者 とのことなので、新たな実装を求められるレベルの課題なのかもしれない。 SOAPElementのように、新たなパーサやスキーマから作成することを求められているなら 俺はギブアップだ
529 :
デフォルトの名無しさん :2013/08/19(月) 20:39:16.27
diconとconvとBeanで何がつくれるの
>>509 みたいなケースってIteratorインターフェースでも起きたりするの?
自作クラスでインターフェース使いまくってるからキャストで弾かれないか心配
>>509 の模範解答が出てきたら調べてみなくもない
模範解答なんてなくね? 言わばライブラリの仕様なわけで、別のライブラリを使用する以外の解決法はない
533 :
デフォルトの名無しさん :2013/08/19(月) 23:52:40.77
Javaでも{ }の中はスコープって呼び方で良いの?
>>533 Javaでも他の言語でも普通はブロックと呼ぶ
スコープは変数の性質であって意味が違う
>>533 は?
「Javaでも」って、そもそもブロックのことをスコープって呼ぶ言語のことを教えてよ。
int count = 0; for(int i = 0; i < 10; i++) count++; i+=count; あえて{}書かずにfor書いたよ i+=count;はスコープ外 言語関係なくスコープという呼び方で通じる 解説終わり
なんかわかりづらいな int count = 0; for(int i = 0; i < 10; i++){ count++; i+=count; } これだとi+=count;のiがスコープ内になるという違いで納得してもらえるだろうか?
は? countのインクリメントはブロック内の処理であって、 それを「for文のスコープでcountをインクリメントします」とは表現せんだろ
スコープってのは、プログラムのリスト中の特定の領域を表す用語じゃないんだよ。その場合はブロック。 スコープは変数の属性として用いられる用語。 「i【の】スコープはこのブロック内に限定される」 とかいう風にね。 「iがスコープ内」なんて表現は主客転倒。
もう少しまともな解説ぐぐってこいよ。それにもう蛇足すぎる
ひまなら
>>509 の真意と模範解答はよ
509で2時間くらい時間無駄にしたけど。なんだかんだ知識欲はみたされたから許す
ドキュメントに説明がない以上、たまたま動く解答ができたとしても実装依存だろ 解なし
XMLパーサってAbstractFactoryパターンだろうし知らないNodeが処理できんでも仕方ないかな 独自ノードと他所の実装ノードをくるむアダプタノードとでツリーを作って 出力時にダウンキャストされないことを祈るしかないな
544 :
509 :2013/08/20(火) 09:25:15.10
つまりはファクトリから書く必要のある課題だったわけか。なんて高レベル
>>536 { }で囲われたブロックがスコープを持つ。これはつまりブロックスコープ。
例えばJavaScriptは{ }だけで囲われたブロックがスコープを持たず、
関数function(){ }の範囲がスコープを持つ。
これを関数スコープと呼んだりする。
>>544 あぁそっちの仕様の問題か
結局このスレでは正解者ゼロか
情報学部の高レベルな課題だったみたいだな
難しい質問は控えてください><
DOMはもうトラウマだわ D どーせ O おれなんて M もてないし
HttpSessionを作成した直後にSessionScopedビーンを生成・初期化する方法ってありませんか? BeanManagerを使ってもActiveではないと叱られてしまいます。
f.close()がエラーになります。原因が分かりません。 public class try2 { public static void main(String[] args){ FileWriter f = null; try{ f = new FileWriter("data.txt"); f.write("hello"); } catch(IOException e){ System.out.println("エラーです"); } finally{ f.close(); } } }
>>551 ・ファイルが存在しない
・ファイルがロックされており書き込みができない
などの理由によりIOExceptionが発生している。
System.out.println("エラーです");
↓
e.printStackTrace();
こうに直して詳細なエラー情報を見ろ
553 :
551 :2013/08/22(木) 08:48:36.65
>>552 支持通りにしたら、こんなエラー情報が出ました
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
処理されない例外の型 IOException
at try2.main(try2.java:21)
eclipceの指示に従ってメインメソッドに throws IOExceptionを足したら
f.close(); に付いてたエラー表示も消えました。
f.close();はチェック例外を発生させるから、finallyでf.close()を呼び出す場合はそれ自体をtry-catchで囲ってやらなきゃならない 非常に見栄えが悪いコードになるからJava7からtry-catch-resource文が用意された
555 :
551 :2013/08/22(木) 09:03:42.69
アドバイスありがとうございました
556 :
デフォルトの名無しさん :2013/08/22(木) 16:24:23.31
独学でjava勉強したいんですけど、過去ログとかレスとかで話題に上がった 参考書やおすすめの書籍はありますか?
基本構文から始めるなら。すぐ本買わないでネットで十分 ある程度かけるようになって 自分が創作、携わりたいものが解かってから本を買えばよいかと
558 :
デフォルトの名無しさん :2013/08/22(木) 17:08:32.49
わかりました。どうもありがとう
>>557 ネットに転がってるサンプルなんてほとんどがJava 6の構文を使ってて今は非推奨な書き方ばかりだろ
とんでもない地雷行為を勧めるなよ
実際俺はそれで十分だったな Javaはどうせどの本から入っても言語仕様読むようになるし
561 :
デフォルトの名無しさん :2013/08/22(木) 17:20:08.99
すいません
>>558 です。
つまるところ書籍とインターネットを併用しながら学ぶのが一番ということでしょうか?
あと加えて質問なのですがテキストエディタで保存したjavaファイルは
コマンドプロンプトで読み込む場合、どこに保存するのが最適なのでしょうか?
なかなか認識されなくて困っています
6どころか5からフォローできないと地雷になる 出来れば4以下の仕様の違い程度は知っておいたほうが良い パーミッションの関係でユーザディレクトリ配下で任意場所に置くのを推奨する ユーザ名\javaSampletとかドキュメント\javaSampletで問題ない
565 :
デフォルトの名無しさん :2013/08/22(木) 17:45:51.39
すいませんなんとかなりました。 path設定って再起動しないと反映されないんですね・・・
566 :
デフォルトの名無しさん :2013/08/22(木) 17:47:10.14
あと参考書買うことにします。別スレで見たけどプログラマは参考書に お金を惜しんではいけないと書いてありましたし
>>563 その手の間違いは本でも同じだ
古いと駄目ってだけ
>>565 コマンドプロンプトの再起動で反映されるよ
とはいえ君が手動でjavac使うことには反対するよ
EclipseなどIDEを使えばコンパイルエラーや警告の多くに気づき、その修正方法も提示されるのに対して
テキストファイルに手入力だと明らかなコンパイルエラーにも気づかず、その修正方法も提示されないから
初心者に無意味なエラー探しの負担を強いることになる
javac使うのはコンパイルオプションを細かに制御したい中級者以降から
初心者はボタンのワンクリックでコンパイルから実行までできるEclipseつかえ
>>566 参考書とは言ってもJava 7に対応したものは決して多くはないから、
>>563 の項目をチェックしてから買わないと金が無駄になるからな
570 :
デフォルトの名無しさん :2013/08/22(木) 17:53:57.24
分かりました。Eclipseは無償でDL出来るみたいなのでそれを使ってみます。 ちなみにjdk1.7.0_25を使っているのですが、これは現在の主流ということで よろしいですか?
javacはコンソールを使うことに慣れる意味で必要不可欠 まあ、実際はantとか専用のデプロイツールつかうんだけどね eclipseを導入するのは基本構文終わったあたりからで問題ないかと
572 :
デフォルトの名無しさん :2013/08/22(木) 17:57:33.48
みなさん本当に親切で助かります。 基本構文を学んだあとにeclipseを使いたいと思います。
>>571 それは業務で開発する場合の知識だろ
一人でプログラミングする分にはコンソールもAntもよほど特殊な用途でなきゃ使わん
最初はやりやすいようにやったほうがいいので 俺もEclipse勧める 初学者は関係ないことでやる気なくすのが一番問題だ
独学ってことならJavaなんか時間の無駄だからやらないでいいよ C#でもやって、あとRubyとかPythonとかScalaとかHaskellとかやればいいよ
C#なら初心者こそVisual C#のIDEで楽々開発するのが普通だからな コンソールを使わせたがるのはC言語プログラマの名残にしか思えん
つか、IDEのインストールを画像入りで説明してる1年以内に発売された本買えよ
コンソール否定派多すぎじゃね?
そういうのは慣れてから必要時に各人がやればいい事 普段GUIで操作してる人にコンソール勧める必要ない
pathの概念が身に付くからコンソールくらいは使えてほしい。 でもプログラミング自体初めてなら俺もVS使ってのC♯を推薦する その場合は必要に迫られてから、コンソールに慣れていけばいいのかな
>>初学者は関係ないことでやる気なくすのが一番問題だ すごい説得力だ。やっぱ初めからIDEというのも悪くないかと思い始めた
Javaはオワコン
JavaやりたくてJavaスレに書いてるのに何言ってんだ
584 :
デフォルトの名無しさん :2013/08/22(木) 18:40:37.70
再三と何度も質問すいません。 ネットと参考書を併用するとして、みなさんがオススメするjavaの書籍はありますか? 自分が使ったあるいは友人が使っていた等なんでも構いません
>>584 それは危険な質問だな
このスレにいる人間は初心者向けの本についてほとんど知識がないから、
Effective Javaとか「名著ではあるけど初心者が読んでも正しく理解できない本」を勧めてくる傾向が強い
ここにいる連中はJava7以前からJavaを習得してるだろうから、 いま初心者にオススメの本はたぶん知らないのです そういえばEffective Javaはもう在庫限りだそうですね
587 :
デフォルトの名無しさん :2013/08/22(木) 18:55:14.30
そうでしたか。ではとりあえず初心者向けの本を一冊購入しておこうと思います
ものの本は初心者じゃなくて初学者が読むもの
スッキリわかるJava入門ってやつはなかなか良かった気がする。というかこれしか読んでないから比較できない ただ誤字が多いのは結構なマイナスポイント
最近javaアプリ勉強してて少しできるようになったんだけど ブラウザ上で同じようにするのってどうするの? JFrameやJPanelは使えるのかな? まだwebアプリの勉強途中だけどここらへんが疑問点 それとできればアプレットじゃなくてサーブレットでやってみたいです
がんばってください
swing使えるならそのままアプレット化するだけだよ アプレットはウェブブラウザ上で動作するアプリケーションです サーブレットはサーバアプリケーションです この二つは用途と動作する場所が違います
>>592 なるへそ
まだアプレットとサーブレットの区別があまりできてなくてよくわからなかったよ
アプレットはswingとか使ってガリガリ動くようなブラウザアプリ
サーブレットはデータベースを使ってなにかする
って解釈でいいのかな
いやサーブレットはサーバー側で動作してHTMLを吐き出す 用途が違うつーかアプレットって死滅したと言っていい
ユーザーにアプレットを使わせるのはそれだけでユーザーに深刻なセキュリティリスクを負わせる 今や重大な反社会的行為だ
ここで
>>590 がアプレットですごい物作れば
アプレットは見直される がんばれ
アプレット死滅 まじですか 勉強してたらまだまだアプレットとか取り扱っていたものがたくさんあったからそんなこととは思わなかった とりあえず597さんのいうとおりものすごいものを私がつくる! その前に普遍的なサブレットでも頑張るよ いろいろお世話になりました・∀・
どんなにアプレットですごいもの作ろうが オラクルさんがセキュリティホール連発で容赦なくアプレットを殺しにかかってくるからなあ
一つの仕様で何でもかんでもやろうとするのが無茶。
マイナビが何かの診断でJAVA使ってた
そこまで珍しくはない。ただほぼ例外なく使いにくいけど
あいかわらずサーブレットがんばっているんだけど まずtomcatを起動 次に普通のブラウザ(IE)からurlに自分で作った.jspにアクセス .jspから<imput type="submit">でサーブレットにアクセス サーブレットの中身はデータベースのデータをブラウザに表示すること おおまかにこれが「動的なコンテンツ」ってことでいいのかな?
いいんじゃない
オーバーロードについて質問があります 例えば「入力データ、パスワード、salt」を引数にとって入力データを暗号化して返すメソッドを定義するとします 入力データはStringまたはbyte[]またはFile パスワードはStringまたはbyte[] saltはStringまたはbyte[] これを素直にオーバーロードするとこうなってしまいます public byte[] encrypt(String data, String passwd, String salt) public byte[] encrypt(String data, String passwd, byte[] salt) public byte[] encrypt(String data, byte[] passwd, String salt) public byte[] encrypt(String data, byte[] passwd, byte[] salt) public byte[] encrypt(byte[] data, String passwd, String salt) public byte[] encrypt(byte[] data, String passwd, byte[] salt) public byte[] encrypt(byte[] data, byte[] passwd, String salt) public byte[] encrypt(byte[] data, byte[] passwd, byte[] salt) public byte[] encrypt(File data, String passwd, String salt) public byte[] encrypt(File data, String passwd, byte[] salt) public byte[] encrypt(File data, byte[] passwd, String salt) public byte[] encrypt(File data, byte[] passwd, byte[] salt) このような場合はどのようにメソッド定義をするのが正解なのでしょうか?
言葉通りならその12通りで正解
引数は三つともInputStreamでいいよ。 あるいはデザパタの「Builder」を勉強して、setPasswd()とかのバリエーションを好きなだけ作る
三つのパラメータが必須だしbuild()でIllegalStageExceptionとか投げるのはちょっとダサいなw あとStringだけど一緒にCharsetかその名前を示すStringがセットになってないといかんな
609 :
デフォルトの名無しさん :2013/08/24(土) 10:09:19.19
デスクトップにjava勉強用のjavaフォルダを作り、コマンドプロンプトも そのフォルダのjavaファイルから直接読み取りたいのですが、コマンドプロンプトの 最初のファイル指定先を変更することはできませんか?具体的には 現在:C:\Users\***> となっている部分を C:\Users\***\Desktop\java と、コマンドプロンプトが開いた瞬間になるように設定したいです
610 :
デフォルトの名無しさん :2013/08/24(土) 10:14:05.61
>>609 デスクトップにコマンドプロンプトのショートカットを作って
それを右クリックしてプロパティを開いて作業用ディレクトリを設定すればいいよ。
Javaと何の関係もないな 最初はjavacでやってみるのも勉強にはいいかもしれないが、 理解した上で楽したいんならそもそもコマンドプロンプトなんかやめてEclipse使え
↓のようなバッチファイルを作れ cd /d "<飛ばしたいパス>" cmd
必要な環境変数を個別に設定できるからバッチファイル化がお勧め
わざわざ余計な苦労をするためにコマンドラインでやってんのに 楽したいとか意味不明 一通り理解したらIDE行け
jarコマンドの操作くらいは覚えて損は無いかも リソースの差し替えができるぞ
616 :
デフォルトの名無しさん :2013/08/24(土) 10:25:14.36
//
>>609 // あらかじめ、workというフォルダを用意しておく
// console.jsの名前で保存してから、エクスプローラでconsole.jsをダブルクリック
// さもなければ、スタートにドラッグしてドロップ。スタートから選択。
// Windows 2000, Windows XP
directory = "C:/work/";
o = WScript.CreateObject("WScript.Shell");
o.CurrentDirectory = directory;
o.Run("cmd");
古いパソコン
Windows 2000でうまくいかない場合は、WSH 5.6 にアップグレード
Windows 2000 または Windows Me を現在使用している場合は、WSH 2.0 が既にコンピュータ システムに
インストールされています。Windows 95/98、または Windows NT 4.0 を使用している場合は、
WSH 1.0 がインストールされています。WSH 5.6 にアップグレード
アクティブなプロセスの現在の作業ディレクトリを取得または変更
WSH 5.6 の新機能
http://msdn.microsoft.com/ja-jp/library/cc364344.aspx
パソコンの操作に関する質問は他に有用なスレがあるんじゃないの?
>>509 の課題おかしいんだよな。DOMを実装するにしては実装対象の文章のスキーマがないし、
DOM仕様のどれを実装するのかも不明。
宿題スレだと学校晒せ言われるレベルだぜ。というかなぜ宿題スレに来なかったんだ。
まだ負け惜しみw
>>509 は俺たちを育てるための課題なんだよ
勉強になったからむしろ感謝してる
Document実装は型が同じでも、互換性は無い。これが解っただけでも進歩じゃないか
623 :
デフォルトの名無しさん :2013/08/24(土) 23:22:45.04
あー臭い臭い おさんの自演ほど哀れなものはない
目的と手段を履き違えるととんでもないところへ行く これが解っただけでも進歩じゃないか
625 :
デフォルトの名無しさん :2013/08/25(日) 03:44:24.50
読む方のSAXは有り難くつかってるが書くほうのDOMの有り難みがイマイチわからない 初歩的にタグ文字列を連結して生成すればいいだけじゃん
javaドカタたるものそうでなければ
>>625 XPath使って検索とかできるよ。
そもそもDOMもSAXもJavaに特化してる訳でないので、ここで議論するのはスレチだと思うが
プルパーサならともかく、SAXなんていうクソを有り難く使ってるとかさすがJavaドカタだな SAXはプレーンテキストを一行ずつ読むのとは違い、構造上の問題で読み取り処理中に ローカル変数や実行位置で状態を持てないため、状態を持ちたい場合ステートマシンが必要だが それに疑問を感じたことはないのか それが面倒だからDOMが使われることも多いが、プルパーサならその問題は解決する
「単純にタグ文字列を連結するだけ」でDOMの仕様を満たせると思ってる時点で相当やばいだろ 文字のエスケープ忘れだとかタグの閉じミス、要素名の制限など そんなもん一々文字列単位で扱ってたらプログラムがスパゲッティになる
SAXが便利なのはDOMみたいなものへの変換を実装するときだけ プル型の方があらゆる面で優れているしストリーミング書き込みとのAPIの対称性があってわかりやすい
>>629 それだけが理由ならストリーミングAPI使えばいいじゃん
DOMで馬鹿みたいにメモリを消費する必要はないよ
一文字ずつ書くのはさすがに頭おかしいが、読み取りより書き出しのほうが
ストリーミングで十分な場合が多いのは確かだよ
先日javaのプログラミングを始めてみたのですが 変数に値を代入するときに a=5と書かずにa = 5と演算子の周りを空けるのは見やすくするためですか?
そう 特に意味はない
DOMはメモリに構造を保持するのが利点でしょ XPathを使ってノードツリー、リスト、テキストと属性を取得できるから エディタ機能を持つアプリケーションを作るなら最適じゃないか
Java用DOMはいいかげん総称付きCollectionフレームワークに対応して欲しいなあ。 Iterableなラッパ自作してるけどさ
636 :
デフォルトの名無しさん :2013/08/25(日) 11:19:01.03
eclipseを使ってみたのですが、肝心な実行の段階で 「エディタにはメイン型が含まれていません」 と表示されます。 terapadおよびコマンドプロンプトではしっかり起動したコードなので 文字などに間違いはないはずなのですが、なぜだかわかりますか?
637 :
デフォルトの名無しさん :2013/08/25(日) 11:25:05.62
>>636 mainメソッドの定義がマズイのじゃないか。
コード貼って。
638 :
デフォルトの名無しさん :2013/08/25(日) 11:33:38.11
import java.io.*; public class HowOldAreYou { public static void main(String[] args){ System.out.println("あなたの名前を入れて!"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ String line = reader.readLine(); System.out.println(line + "さん、こんにちわ。"); System.out.println("年齢を入力してください"); line = reader.readLine(); int age = Integer.parseInt(line); System.out.println("いま" + age + "歳とすると、10年語は" + (age + 10) + "歳ですねぇ"); } catch (IOException e) { System.out.println(e); } catch (NumberFormatException e) { System.out.println("年齢が正しくありません。"); } } } お願いします
639 :
デフォルトの名無しさん :2013/08/25(日) 11:37:08.97
>>638 正常に動作してしまったよ。
えっと、クラス名とファイル名が違ってるんでない?
publicなクラスはファイル名とクラス名が同じである必要がある。
>terapadおよびコマンドプロンプトではしっかり起動したコード なんだから問題があるのはEclipseだろ 俺はEclipse使ってないがプロジェクトプロパティにmain指定する場所とかないか? 実行可能jarを作る場合MANIFEST.MFにその情報が必要だから指定する場所があるはず
あとmainが複数ある場合はプロジェクトツリーのmainを含んだjavaファイルを 右クリックすれば個別に実行できるようになっていると思われる 少なくともNetBeansでは出来る
642 :
デフォルトの名無しさん :2013/08/25(日) 11:58:43.33
無事起動しました。どうもありがとうございます。 eclipseってjava入門者はやめたほうがいいんですかね・・・
はなからコマンドプロンプト推奨してきた俺だが
>>642 が例外処理使うステップにあるならIDEは使うべき
初心者用エクリプスなら、ランタイム入ってるインディゴかジュノ使っとけばとりあえずもんだいない
異論は認める
644 :
デフォルトの名無しさん :2013/08/25(日) 12:33:11.27
>>642 そんなことないと思うよ。
eclipseだとエラーがあったらその場所に下線が引かれる。
下線にカーソルを合わせるとどう修正すればいいのかがポップアップ
されるから便利だよ。そのうち慣れるよ。
馬鹿には無理
>>642 Eclipseに限らずIDEを使う場合はIDEの中でコードを打ち込めばいいだけさ
この程度で値を上げてたらC言語でリンカの設定まで絡んでくると発狂するぞ
C言語はデバッガの設定で発狂する むしろリモートでブレイクポイント余裕でしたのJavaが異常なのか
JFameを親にもつJDialogを表示するときも invokeLater を一応使うほうが安全と考えてよいですか??
安全を考慮するならSwingの操作は全部そうすりゃいい イベントキューの最後に放り投げるだけだからAPIが内部で投げてても副作用はない
モーダルダイアログを表示するときはswingが勝手にマルチスレッド起こすので、 心配するこたないよ
mybatisをやろうと思っているんだけど、select文の結果はbeanにマップするの それともhashmapに入れるの? youたちはどうしてる
JPAかな
>>652 JPAってメリットあるの?
そもそも、hashmapにマップするのがベストなのか、beanにマップするのがベストなのかって質問なんだけど
youたちはどうしてるって質問に使ってねーよって回答しただけだよ JPAなら必然的にbeanに詰めることになる JPAの利点?キャッシュ戦略込みで色々面倒見てくれるのと アノテーションによるDIに対応してるってあたりかな
エラーはないの止まる ボタンを押すと数が増えるのを表示するだけなんだ ボタンを押すと止まる protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView)findViewById(R.id.count_view); String cha = String.valueOf( i ); String str = cha; tv.setText(str); } int i = 0; public void onBottonClick(int v) { i++; }
onCreateでしかセットしてないのになるわけないだろ androidドカタはandroidスレに行け。ここはサーブレットドカタ専用だ
>>657 わかった
初めて10日くらいなんで全くわからんのじゃ
ハッハッハ許せ
○○.java っていうファイル名と class ○○ っていうクラス名って一致させないといけないんですかね?
661 :
デフォルトの名無しさん :2013/08/26(月) 12:11:26.57
Stringsやlineの定義がよくわかりません。構文含めちょっと長くなりますがお願いします import java.io.*; public class Nenrei { public static void main(String[] args) { BufferedReader BufferedReader = new BufferedReader(new InputStreamReader(System.in)); @ String line; A //1人目 System.out.println("あなたの名前を入力してください"); Object reader; B String name1 = reader.readLine(); System.out.println(name1 + "さんこんにちわ!!"); System.out.println("あなたの年齢を入力してください"); C line = reader.readLine(); int age1 = Integer.parseInt(line);
662 :
デフォルトの名無しさん :2013/08/26(月) 12:15:47.19
まず@やAのコードは単にわかりやすくするためであり、コードそのものに意味はないのでしょうか。 次にBの時に変数をname1にして名前を読み込んでおりますが、 Cの時だと変数はlineになっております。 name1とlineは変数が異なりますが、Cの場合のlineと言うのはその下の行の int age1 = Integer.parseInt(line); の(line)に掛かるものであり、 name1とlineと変数が異なっていても問題はないのか否か、です。 わかりづらいかもしれませんがよろしくお願いします
663 :
デフォルトの名無しさん :2013/08/26(月) 12:16:44.03
構文全文はこれです import java.io.*; public class Nenrei { public static void main(String[] args) { BufferedReader BufferedReader = new BufferedReader(new InputStreamReader(System.in)); String line; //1人目 System.out.println("あなたの名前を入力してください"); Object reader; String name1 = reader.readLine(); System.out.println(name1 + "さんこんにちわ!!"); System.out.println("あなたの年齢を入力してください"); line = reader.readLine(); int age1 = Integer.parseInt(line); //二人目 System.out.println("あなたの名前を入力してください"); Object reader; String name2 = reader.readLine(); System.out.println(name2 + "さんこんにちわ!!"); System.out.println("あなたの年齢を入力してください"); line = reader.readLine(); int age2 = Integer.parseInt(line); }
自己解決しました
// Hello.java class Greeting { String name; Greeting(String n) { name = n; } void SayHello() { System.out.println("Hello, " + name); } } public class Hello { public static void main(String[] args) { Greeting g; switch(args.length) { case 1: g = new Greeting(args[0]); g.SayHello(); break; default: g = new Greeting("Paul"); g.SayHello(); } } }
新規プロダクトなんだが、今時apletでやりましょうとかいうことになりそうなんだが、どうよ?
どうよも何も、偉い人が決めたのなら従うしかないだろう?
>>660 ファイル名とクラス名一致させなくても構わないが、
publicなクラスだと一致しないとだめ。
OracleJDKのコンパイラは、Java言語仕様を勝手に狭めて
1コンパイル単位に書いていいpublicクラスを1つだけということにしている。
他社のコンパイラも大体右ならえ。
まあコンパイルせずにファイル名見るだけでpublicクラスの有無を判別できるのは楽だよね
>>666 ただ配布物の集中管理が目当てでそう決まったのなら
せめてアプレットの代わりにWebStartをなんとかねじ込むんだ(涙)
671 :
デフォルトの名無しさん :2013/08/26(月) 16:24:45.51
おちんちんのシコシコ仕方がわかりませんと言ったら甘えるななのに おまんまんだったら丁寧に教えるだろ 女って得だよな
>>546 blockとscopeとextentはベツモンだ。syntaxを見ただけではscopeとextentは特定できん。
>>668 バイトコードになったらpublicとか関係無いのに余計なことするよね。
sunの頃からだけど
673 :
デフォルトの名無しさん :2013/08/26(月) 17:56:45.14
「メソッド readLine() は型 BufferedReader で未定義です」 と表示されてしまうのですが、どういうことかわかりますか?
JComponentが選択されているか否かを表現するにはどうしたらよいでしょうか? ただし、 ・JComponentは沢山ある ・選択できるのは一つだけ としたいです。
>>673 java.io.BufferedReaderでないBufferedReaderを参照している。
>>674 GlassPane使って枠でも描けばいいんじゃない
677 :
デフォルトの名無しさん :2013/08/26(月) 19:50:30.33
{}の使いどきがイマイチわかりません。 クラスの始まりと終わりに付けるのはわかるのですが、クラスについて本格的に 学び始めない限りわかりづらいものなのでしょうか
>676 普通にMediator使って解決できました
>>677 まずは1ステートメントで書き切れない処理をブロックに置き換えられると覚えよう
int n = 10;
int m;
{
int a = 2;
int b = 3;
int c = 4;
m = a * b + c;
}
if (n == 10) return m;
if (m == 10) {
m += n;
return m;
}
int m;はちょっと違うか 何故そこで疑問に思うって場所だから説明しずらい
{ } はその登場する文脈で全て意味が違う。 ※ この辺、他の言語だと文脈毎に違う記号列を使うのも多い。 配列初期化子ぐらいまで本格的に学習進めないと、 Javaソース各所の { } の意味が解るわけない。あきらめい。
682 :
デフォルトの名無しさん :2013/08/26(月) 20:40:42.58
いえなんとなくわかった気がします。ありがとう
無名クラスのコンパイルを一発で通せるようになれば、君も中括弧マスターだ!
今日、javaアプリケーションのプロセスが停止しました。 verboseログを見ると最後の行に 「Failed to enlarge card table array during garbage collection.」 と出ていました。 vmstatのログを見ていると、そこからメモリのfree領域が極端に減り、 同時にswap領域が増えています。 プロセスが停止したのは、ガーベジコレクションに失敗してメモリ解放が できなかったからと思っているのですが、そもそもなんで失敗したのか分かりません。 このあたり見た方がいいよっていうのなどあったら教えて下さい。
動いているときにheapダンプする
マップとかリストに延々何か突っ込んでるんじゃないかな?
>>685 heapダンプ、ちょっとぐぐります。
>>686 ちなみに、稼動して2年近くなるシステムなんです。こんな落ち方するの初めて。
static{} {} int[] array = new in[]{1,2,3,4,5} 俺たちのこと忘れないでくれ
>ちなみに、稼動して2年近くなるシステムなんです。こんな落ち方するの初めて。 その状況にならないとダンプ見ても無意味です ログでそこに至った経緯を見つけられたらよいのですが。できない場合もありますよね わたしならjava.util.HashMap使ってるところ全検索します
>>661-663 @ は意味あるね。最後の方の line = reader.readLine() で使ってるし。
A はコメントだから意味ないね。
B、C は2回のユーザーの入力のうち名前を変数 name1 に、年齢を変数 line に入れているわけだから変数名が異なっても問題ありません。用意する変数を1つだけにして、使い回しても問題ありません。
どこからこのコード持ってきたのか知らないけど、
>>663 はコンパイルできないよね?
質問の内容からして、質問者自身も自分が何をやってるのか分かってないんじゃないかな?
一度 Java の基礎の本を読んだ方が長い目で見て近道だよ。
>わたしならjava.util.HashMap使ってるところ全検索します 説明不足でした。今時無いとは思いますが、以下で検索してください 「HashMap 無限ループ」
692 :
デフォルトの名無しさん :2013/08/26(月) 21:35:40.54
>>662 @は変数lineの宣言。
Aはコメント。動作には関係ない。
readLine()の戻り値を受ける変数が異なっていても問題はない。
>Object reader;
>String name1 = reader.readLine();
readLineメソッドを持つのはBufferedReaderのオブジェクト。
readerはオブジェクト型でnull参照なので、これは動作しないよ。
>>689 >>691 >>わたしならjava.util.HashMap使ってるところ全検索します
明日、ソースを全検索してみます。
2年間の運用でMapに詰め込む量が増えてそうな若干の心当たりが。
調査ポイントが見つかっただけでも助かります。ありがとうございます。
切り分けですが java.util.ConcurrentModificationException これがログに出てたらほぼ確定です 他に特定コアの使用率が100%に張り付くので、そこも判断材料になります
動的にメソッドを実行したいのですが、 以下のようなことを簡単にする方法はありませんか? public String hoge(){ return "test"; } str=何か("hoge"); //strに"test"が入る
自作クラスのclassオブジェクトからgetMethodでメソッドが取り出せる コストが高いからループの中で何万と実行するのには向かんけどね
eval
>>696 ありがとうございます。
getMethod調べたら、めちゃくちゃ分かりにくい...
しかも、多用するためコスト高いのはキツいし、他の設計を考えてみます。
>>697 javaでeval使えるのですか!?
調べてみます。
Javaでeval使えるの?そんな話聞いたことないけど
>>695 Stringを返すexecuteというメソッドを持ったクラスを作る。
HashMapにつめておく。
文字列を元にメソッドを取得してexecuteを実行。
別プロセスのメソッドとか、別PCのメソッドとかも呼べるけどね
物知りですね
javaの勉強してるんだけど、やっぱり言語が違っていてもIDEが同じだと楽だよね 言語の勉強に集中できるしね。eclipseのバージョン4になっちゃったけどwww
いやあCDTはちょっとな・・ 壊滅的に遅いし・・
>>704 特定の機能でなくて同じであることが重要なら、emacsとかのが対応してる言語多くて良いんじゃない。
>>706 Adobeのツールなんで、emacsとか使うと逆に面倒なんだ
>>708-709 それはJSPはおろかJavaでも何でもなくてHTMLの問題。
改行コードは正規表現で置換して<br />タグに変える。以上。
>>710 ありがとです そのキーワードで少し探してみます
ランナブルで書き出すとして、 ダブルクリックで起動したかコマンドラインで起動したかはどのように分岐する?
jarは起動引き数う無し コマンドラインに引数を1個与えるとする これで分岐はできるけど、もっとスマートは方法があるかもしれない
html5<br />ではな<br>と書いてください 横やりすまn
715 :
712 :2013/08/28(水) 00:04:33.04
>>713 さすがにそれはできないかなぁ
引数を割と使っているのと、
使う側に両者の起動による差異を意識させたくないのが本来の目的だから
>>707 そもそも限定されてるなら楽も何もないな。
.jarの関連づけを見る限りでは javaw.exe -jar "%1" %* を実行してるな javaかjavawかを見分ける方法はあるのだっけ?
タスクマネージャを開く
>>712 親プロセスを取得してcmd.exeかexplorer.exeか判定する
>>712 PS1とかSHELLとか環境変数入ってないの。
721 :
712 :2013/08/28(水) 00:48:02.17
>>719 やっぱしそういうアプローチになるのかなぁ
ということはちゃんとやるならgetPropertyでOS判定してからでなきゃいかんですな
でもダブクリして起動するまではJavaじゃなくネイティブの操作だし当然か
jarならJarMain.mainから本来のmainルートへ そして伝説へ〜
"".split(",").length が1になってしまいます。 "".split(",").lengthは0 "a".split(",").lengthは1 "a,b".split(",").lengthは2 となって欲しいのですが何かよい方法はあるでしょうか?
if (s.isEmpty()) { return 0; } else { return s.split(",").length; }
表示後にsetEnabled()を変えた場合等でもrepaint()ってよんだほうがいいのですかね? 呼ばなくても再描画されているようですが、もしかして環境によるのかなと心配しています。
>>712 System.console()戻り値はプロンプト起動とeclipse起動で異なるらしいので
もしかすると
repaint()が何をしているのか誰に呼ばれるのか、少しソースを追ってみよう ついでにinvalidate()も見るといろいろ見えてくる
インターフェイスIAccountMapperをメソッドに渡すと、何故かインスタンスが戻ってきた IAccountMapperのサブクラスは無いのに、何でインスタンスを返せるの? MyBatisの勉強してたら、こんなメソッドがあったもんで IAccountMapper mapper = session.getMapper(IAccountMapper.class);
IAccountMapper.h でググる 0件!!
EnumMapはやっぱ速いんだな あとserver vmだとintern()が何故か遅くなったので64版からは封印かな 曜日をキーにmap.get(key)をウォームアップ10万回、計測200万回の結果 (CPU: C2D E8400) client vm: 205ms x1(EnumMap) : x1.84(HashMap String.intern()) : x4.61(HashMap String) server vm: 27ms x1(EnumMap) : x9.81(HashMap String.intern()) : x9.44(HashMap String)
Java 6 Java 7 Java 8 初心者がこれから覚えるならどのバージョンがいいでしょうか?
どういう意味での初心者かわからないけど、オススメはJavaをやらないことです というかプログラミングについても勉強せず他の事を学びましょう 将来経営者になって奴隷プログラマ達を薄給でこき使うのが一番です
経営とかめんどいんでもっと楽な方法はないですか?
>>729 java.lang.reflect.Proxyとか使えば、
任意のインターフェースを有するインスタンスをいくらでも作れるよ
>>731 HashMapのキーにString.intern()使うのは、一度きりのputの時だけで、
getの時には基本使わんなあ
株を買い占めれば経営者をこき使えるのでお勧めです
>>735 もちろんキーを作る時にinternしてるよ
map.put(key.intern(), value)みたいに
738 :
デフォルトの名無しさん :2013/08/29(木) 21:38:34.49
public class count { public static void main(String[] args) { for (int i = 0; i < 10; i ++) { System.out.print(i + ":"); for (int j = 0; j < i; j++); { System.out.print("a"); } System.out.println(""); これなんですが、本来はaがどんどん増えていく(最大9個)はずなんですが 一個のママなんです。どこがおかしいかわかりますか?
>>738 悪いこと言わないからNetBeans使おう
j++); //←ちなみに問題はこれ
740 :
デフォルトの名無しさん :2013/08/29(木) 21:54:01.54
ありがとうございます。 NetBeansってエクリプスとどう違うんですか?初心者向けってことでしょうか
Eclipseは色んな企業・組織のプラグインを詰め込んで環境を作るタイプ NetBeansは一通り有用な機能を予め詰め込んだタイプ Javaエディタに関してはNetBeansはかなり親切にコードを検査してくれる
log4jを使おうと思っているんですが、log4はLogger.getLogger()を呼び出して使うのが一般的ですか? Loggerをラップする形で、共通化することってありますか
743 :
デフォルトの名無しさん :2013/08/29(木) 22:00:07.05
なるほど Eclipse:実際にプログラマとして働いている人用 NetBeans;Java入門者用 って感じでいいでしょうか
だいたいそんな感じ 私はNetBeansを実務に使ってるけどね
745 :
デフォルトの名無しさん :2013/08/29(木) 22:03:25.99
ありがとうございます。 NetBeansを導入してみます。ちなみにいまfor文なんですが、多くの人が ここで詰まるみたいです。またちょくちょく聞くかも・・・
>>742 ロガーってスタックトレース保持してるんじゃなかったっけ?
ラップしちゃうとラップメソッドのメソッド情報とか出力されちゃうんじゃ…
for文できたらこのスレでは上位10%だよ
749 :
デフォルトの名無しさん :2013/08/29(木) 22:09:11.55
そんなに難しいんですか・・・。応用が多いってことでしょうか
まあこのスレ3人でまわしてるんですけどね
いや、俺とお前だけだよ
もちろん俺も混ぜてくれるよな?^^
質問です
urlにjspファイルを打ち込みtextを書き込みサーブレット1へ送信します。
そのサーブレット1はjspから受け継ぐtextを変数の箱に入れます。
この変数の箱はprivateにしてゲッタとセッタを設定します。
このサーブレット1にhtmlコード(画像より)を書き込みサーブレット2へ送信します。
サーブレット2ではサーブレット1で定義した変数の箱の中身を取りに行こうとゲッタしているのですが
結果が null です。
サーブレットを使う場合はこのような変数のもらい方ではいけないのでしょうか。
画像
ttp://www.dotup.org/uploda/www.dotup.org4449926.jpg
>>754 calledは生成(new)されただけで何も与えられてない。
それ以前にサーブレットはインスタンスをリクエストごとに生成するのではなく、事前にインスタンスを用意しといて複数のリクエストから別スレッドで利用されるもの。インスタンス変数は基本使わない。
sessionとかにsetAttributeしとけそれがサーブレットドカタのセオリー
SwingのinvokeLaterについて質問です。 Thread.currentThread().getName()が AWT-EventQueue-x で、 SwingUtilities.isEventDispatchThread() が trueを返すなら描画に関わる処理を直接行ってもいいと思うのですが、 「それを行うメソッドがpublicなら、安全でない場所から呼ばれる可能性はある」 と解釈しているのですが合っていますか? そのような場合予防線として、以上のように現時点でEventDispatchThread上であってもinvokeLaterを使うのはありでしょうか?
コメントにでも /* このメソッドは EDT 以外で呼んではならない */ とか書いておけば普通は十分 設計上 EDT 以外からでも呼べるメソッドとして想定してるのならとりあえず invokeLater を使っとくのはあり
package count; public class Count { public static void main(String[] args) { int i ; for (int i = 0; i <3; i++) { System.out.println(i); } System.out.println("i =" + i); System.out.println("end"); } } この構文なんですが、事前にiを宣言しているはずなのにエラーが表示されます。 なぜでしょうか
それと追加で質問なんですが、 for (int j = 0; j < i; j++){ これと for (int j = 0; j < i; j++);{ これで出てくる文が大きく異なります ;って一体どういう効果があるんでしょうか
どんなエラー文なのか書き込んでみて!
さすがjavaスレw
馬鹿には無理
>>761 for(〜) はその後に続く文をひとつだけ繰り返し実行する構文だ
ひとつだけだ
大事なことなので2回言いましたよ
; と書いたら、それでひとつの文になるので、そこでおしまい
{ } はひとつの文しか書けないところに複数の文が書ける魔法の構文だ
中身は複数の文だけど { } で括ると全体でひとつの文になるんだ
for と組み合わせたら、もしかしたら便利かもしれないね
でも特に for と関係なくいつでも使えるよ
ローカルスコープで使う無名block文{}って、ジャバでは確か名前ついてたよね?何だっけ(ブロックスコープ?)
自演臭が凄い
自己解決しました
自演しました
>>757 間違った解釈だ。どこがというか使っている言葉以外全部間違っている。
あーそうですか。解決したのでもういいです^^
自己解決ました
>>774 は私ではありません。
答えられる方いらしたらお願いします
776 :
デフォルトの名無しさん :2013/08/31(土) 09:10:05.83
コレクションったらArrayListとHashmapしか使えないやつ多すぎ
package count; public class Count { public static void main(String[] args) { int i ; for (int i = 0; i <3; i++) { // int i は前行で既に宣言されている for(i = 0; i < 3; i++) と書き換えてみる System.out.println(i); } System.out.println("i =" + i); System.out.println("end"); } } 実行結果 0 1 2 i =3 end
int i; for (i = 0; i < 3; i++); { // セミコロンでステートメントが終了 iはインクリメントされて評価もされる System.out.println(i);// ここは実行されない } System.out.println("i =" + i); System.out.println("end"); 実行結果 3 i =3 end
int i; for (i = 0; i < 3; i++) { System.out.println(i);// ここは実行される } System.out.println("i =" + i); System.out.println("end"); 実行結果 0 1 2 3 i =3 end int i; for(i = 0; i < 3; i++); // まったく意味のないコード はじめからint i = 3;と初期化すればよい for(i = 0; i < 3; i++) // printが3回実行される System.out.println(i);
実行結果 0 1 2 3 ←これ嘘ごめん i =3 end
jersey2.2のContainerRequestFilterの使い方教えてください。 jersey.java.net/documentation/latest/user-guide.html#filters-and-interceptors をみつつ作成しましたが、英語が読めないので良くわからんです。 サーバ tomcat7 エラーログ java.lang.IllegalStateException: Not inside a request scope. ... ソース @Provider public class LoginFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext request) throws IOException { System.out.println(request.getUriInfo()); } }
JavaのSwingのGraphicsで書いた物体をキー入力で移動させたとき、なんだかカクカクしませんか? 定期的に滑らかにピクセル移動が出来ていないような感じ? だけど同じJavaでもOpenGL使っているようなライブラリではヌルヌル動いているあたり、クロスプラットフォームにする過程で何か弊害がでているのかな?
>>783 たぶんGC。毎回毎回描画処理でColorやFontを生成して内科医?
IDEでプロファイラがおすすめ
垂直同期しないとスムーズにはならないと思うよ。 OpenGLはデフォで垂直同期だろうし
液晶にも垂直同期信号とか帰線区間とかあんのかな
あるよ!
うんこ言語なのでたしかに遅いけどキー入力程度のスピードでカクカクするなら書き方がおかしい そこまでうんこではない
Windows OS/Platformって、Office業界はともかく、IT業界とかWeb業界的にみるともうオワコンなんですよね?
定番通りswingの描画ぶっ壊して遅くなってるだけじゃないの? つか、swingスレ行きなよ。
WindowsはActiveDirectoryの支配がある限り当分安泰だろ
jdk1.7のjavadocの日本語版はすでに提供されるようになったのですが、オンラインだけ提供でzip,tarなどのオフライン版はないのでしょうか。
793 :
デフォルトの名無しさん :2013/08/31(土) 16:44:05.76
gkpluginsLibってなんですか?
>>784 それは間違いなくしていないです。
やはり垂直同期の問題なのかな?
JComponent#setDoubleBuffered() さえオンになっていれば 書きかけの絵は中途半端に出てこないはずですしおすし
>>795 それはカクカクとは関係ない
画面サイズとかオブジェクト数とか減らしてみて改善が見られるかどうか?
javaドカタはおとなしくサーブレット系かandroidやってればいいの
JavaドカタだからHadoopとかHBaseとかElasticSearchやってる。
Javaは幅が広すぎるんだよな VMメーカーは泣いてるだろ
>>799 金儲けのためにVM作ってるなら泣き言をいうべきではない。
801 :
デフォルトの名無しさん :2013/08/31(土) 21:57:22.74
java.util.DateかCalenderを使って現在時刻から数えてX時00分から15分刻みの時刻を得たいです。 (例えば8:55なら9:00、4:31なら4:45といった感じです) 何かいい方法はありますか?
Calendar使えばいいよ cal.add(HOUR_OF_DAY, n); cal.getTime(); // Dateオブジェクトを返す cal.add(MINUTE, 15); cal.getTime();
おっと()の中呼んでなかった。 まずcal.add(HOUR_OF_DAY, n);をして、 15 * 60 * 1000 ミリ秒で15分刻みだからgetTimeInMillis()をこれで割って 余りが出てから+1してやる。 これを 15 * 60 * 1000 でまた乗算した値をDateかCalendarの初期値にする。
DateやCalendarを使うのは逆に面倒くさそうだし全部ミリ秒で処理しよう public static void main(String[] args) { long now = System.currentTimeMillis(); long time1 = plusHour(now, 1); long time2 = floorTimeMinutes(time1, 15); System.out.println(new Date(now)); System.out.println(new Date(time2)); } public static long plusHour(long time, int hour) { final int msOfHour = 60 * 60 * 1000; int plus_ms = hour * msOfHour; return time + plus_ms; } public static long floorTimeMinutes(long time, int minutes) { final int msOfMinutes = 60 * 1000; int floor_ms = minutes * msOfMinutes; long unitSize = time / floor_ms; long floorTime = unitSize * floor_ms; if (time % msOfMinutes > 0) { floorTime += floor_ms; } return floorTime; }
get で分を求めて 15 刻みに切り上げて再度 set すればいい
806 :
801 :2013/08/31(土) 22:48:21.81
>>802-805 ありがとうございます。
int m = cal.get(Calendar.MINUTE);
cal.set(Calendar.MINUTE, 0);
cal.add(Calendar.MINUTE, (m / 15 + 1) * 15);
これでやってみます
>>806 それではジャスト9:00のときも繰り上がってしまわないかい?
((m+14)/15)*15
なら一発じゃない?
試してないが
スクリプト言語使ってるとやっぱJava便利だなと思う。 特にこれ obj.add***Listener(new ***Listener() { @Override ........... @Override ............ }); クラス内ではあまり他のクラスと強く結び付けたくないとき、とりあえずinterfaceを引数に入れておいて、 mainメソッド等の皆が顔合わせするときに具体的に定義するようなこれ これって名前があるの?
ポインタ?
委譲って言葉が使われてるかな
>>808 もしかして無名クラスのことか?
便利っていうか苦肉の策だけど・・・
苦肉の策って何が?無名クラスはただのシンタックスシュガーじゃん
>>812 スクリプトだとducktypingあるしC#ならdelegateがあるから
C#は無名クラスが無くて面倒だわ プロパティの初期化をするための機能になってるな
無名クラスって new $1() とかで呼び出せる?
無理 出来ない
newは無理だろうけど、newInstanceならできるだろうな。
820 :
デフォルトの名無しさん :2013/09/01(日) 11:29:03.40
無名クラス.newInstance()するくらいならクラス作ったほうがいいんじゃ
>>812 基本的にリスナを書く地獄のような手間を軽減するためのものだから
多くのスクリプトやC#みたいに関数オブジェクトが使える言語ならリスナクラスはあまり使わない
ObjectInputstreamでreadObjectするときにEOFExceptionが投げられるのですがどういったことが原因だと考えられますか? もしかして、こういうキャストはダメなのですか? Test[][] data = (Test[][])in.readObject(); しかし書き出すときには out.writeObject(test); // Test[][] test となるようにちゃんと書き出しています。
>>822 復元に必要な情報が揃う前にStreamがEOF(End of File)になってるエラー
キャストじゃなくてデータがおかしいって言ってる
エラーや例外の意味を理解できない人でもプログラミングしてるなんて、ハードル低い分野だねプログラミングって奴は
>>823 ということは書き出しがうまくいっていないかもしれませんね。
ありがとうございます。
馬鹿には無理
writeObjectやreadObjectって配列の読み書きできたのんか
>>827 今書き出したファイル見たらNul みたいな文字列のみのファイルになってました。
out.writeObject(parent.getTest());
このときのSerializeができていない?
Parentクラスで
public Test[][] getTest() {
return test;
}
があったとして、このときってTestクラスのみSerializableをimplementsしていればいいのですよね?
getTest()が単にNULなだけでした。 失礼しました。お恥ずかしい・・・・。
よくわからないなら 未検証のメソッド呼び出しを省いて しかるべきデータを直書きしたときと比較すればいい
831 :
デフォルトの名無しさん :2013/09/01(日) 16:55:17.16
phpとjavaマスターするのどれくらいかかる?
>>831 お前の知能による
質問からして馬鹿であることが伺えるので、まあ20年ぐらいか
マスターってどれくらい出来るレベルがマスターなのよ
標準のパッケージをAPIリファレンスなしで使いこなせるレベルがマスター?
>>833 JVMやjavacが書ける
勿論すべての標準ライブラリに精通している
836 :
デフォルトの名無しさん :2013/09/01(日) 17:06:35.27
20年かかってマスターしても20年前の技術だから役に立たないね
正直javaとjavaxの境界もよく分かってないわ Swingってどっちだっけ?レベルw
>>837 お前は質問する側
回答する側の話題に混ざってくるなカス
自称中級者の自尊心稼ぎのせこさは異常w
マスターって言ったら文法マスターってことだろ
俺はJavaできるよ ってドヤ顔できるレベルのことだろ 大したレベルじゃないw
1日3時間の勉強なら30〜40日くらいで入門書1冊は終わるんじゃね 入門書の内容が全部頭に入ってりゃマスターでいいだろ
俺から見ればお前ら全部マスターさ よろしくなマスター!
Masterを字引で読んで来いよ マスターと呼べるくらいには数年以上仕事で使ってるくらいの熟練者じゃないとダメだろ
土日つぶせばマスターできる奴と、半年経って何も出来ない奴。 ほぼこの2種類しかいない。
土日潰せるとか無趣味なのか?それとも生きるのに必死なのか?
20年かかってマスターするとかそれはそれですごい能力だよね 大学生が中学生の問題に苦戦したりもするってくらいに数年前覚えたことなんて忘れやすいのに 20年分も記憶を保持とか
javaしか覚えられないポンコツ同士仲良くやろうぜ
俺以上のポンコツなんていないから仲良く出来ないな
プログラマで土曜が休みの奴なんておらんやろー
馬鹿には無理
>>848 じゃあ中学数学なんてスキップして、いきなり大学レベルから始めたらいいですね
そうじゃないだろ馬鹿
学習なんて積み重ねなのに、なんで記憶とかそんな話になるんだよ
どうでもいい話に おまえら熱くなりすぎ ワロタ
Javaできますって奴を採用しても、上から下へ流れるプログラムしか読み書きできない奴とか、使い物にならないからなぁ。
マスターと言えば師範 つまり・・・なんだ?
>>855 Java使ってる奴がそれを言っちゃうの?
マスターは修士号のこと
ちょいとドイツでJAVAのマイスター資格を取得してくらあ
eclipseのブレークポイントが削除できなくなりました 嫌がらせでしょうか;;
こういう時に言葉の定義だの辞書上での意味だのを持ち出す奴はたいてい馬鹿
>>861 Javaなんて大勢の工員がライン作業でCOBOLみたいなコードを垂れ流す言語だからね
自己解決しました
WindowsがオワコンならC#もオワコンなんですか?
>>865 その通りです
C#のようなクソに手を出す暇があれば、Linux環境を用意してCを書きましょう
OSへの理解を深めるのです
Windowsもオワコンで、C#すらもオワコンなのに、なんでORACLE Javaは今でもWindows Platformに多大な投資をしてサポートをつづけているんですか?
人のコード見てて、おいおいArrayList使おうぜーとかよく思うことがある だが調子のって何でもかんでもListにぶち込んでいたせいか、マルチスレッドにしているのに気づかず痛い目にあった 動的に書くとエレガントに見えるがおそろしいね〜
>>868 痛い目見たとかいいながら、結局バグった理屈を理解してない風な書き込み
元のコード理解できないアホに修正させるとこうなるというお話でした
Vector使えばスレッドセーフになるとか思ってそう
確かによくわからんな マルチスレッドなら特殊なリスト使うから気づくよな
StringWriterとかもはや何のためにあるか分からないクラスが結構標準APIに残ってしまってるな
>>872 Vector使えばスレッドセーフになるとか思ってそう
マルチスレッドだからスレッドセーフなコレクションを使わないといけないってことは全くないし
コレクションのメソッドがマルチスレッドであることに意味があるケースは滅多にない
>>874 訂正
マルチスレッドであることに→スレッドセーフであることに
>>863 それはCOBOLerをそのまま使っているからだろう。能力ないのを言語のせいにされても。いくら自分がそうだからって。
ただしライン作業はそのとおりだ。だから前後の関係なくプログラムできるやつが必要なんだ。
>>874 >マルチスレッドだからスレッドセーフなコレクションを使わないといけないってことは全くないし
addしないって事か?
それとも外側で同期すればいいとか?
後者なら素直に使えばいいと思うが
>>877 もちろん外側で同期だよ
処理単位が全てコレクションのメソッド呼び出し一発だけならいいけど
どうせもっと大きい単位で同期化する必要がある場合が多い
そうか?非同期といえば基本はQueueだと思うが
>>873 なんでや!StringWriter便利やろ!ユニットテストで重宝するやろ!
たかだか文字列出力機能の単体テストのために
HDDやHTTPサーバやJP1用意しないといけないような設計する奴は
早く引退してくれー
ejbコンテナにおいて @Resource DataSource ds; で呼び出されるオブジェクトは毎回同じものが呼ばれるのですか?
>>878 うーんまあ最小単位で同期化するのが面倒なのはわかるけど・・
俺は念の為SynchronizedListにしておくかな
883 :
881 :2013/09/02(月) 01:12:58.55
ちょっと質問がわかりづらかったかもしれません servletAでフィールドに@Resouce(name="hoge")を注入して、servletBでも@Resouce(name="hoge")を 注入した場合、両者が参照するものは同じオブジェクトですか?
>>880 ユニットテストとか言うならそんなprintfデバッグみたいな化石技法使わずに
telnet立ててメソッド呼び放題にするわ
?
>>882 面倒とかそういう問題じゃないよ
例えばイテレータやインデックスを使った列挙処理はロック必須
887 :
886 :2013/09/02(月) 01:24:22.09
外側でロック必須ってことね
その外側のロックを忘れて痛い目にあったって意味ね。
そんなもん配列でも一緒だろ 何を言ってるのか
>>886 java.util.concurrentなんかでもダメな状況?
そうなると巨大な配列を手動で列挙って状況だと思うが、
まあそうなったら同期するしか無いかもな。
すまない、なったこと無いのでわからん・・。
>>890 そんな特殊な話じゃなくても、スレッド間で共有されてるHashMapとかいろいろあるでしょ
Queueの中でキャンセル状態で待ち行列してるタスクを除去してレスポンスを返す みたいな操作があるなら外側ロックでイテレートが必要だろうね
キーが見つからない場合は追加、なければ何もしない、とかな
CopyOnWriteじゃだめなの?
CopyOnWriteのイテレータはスナップショットビューじゃないの?
>>896 それで困ることってどういうことかなと。
なんか突っかかってるみたいで申し訳ない。
イテレートの除去操作が使えない
なるほど。理解出来ました。 イテレート+remove(obj)だとバグがあるんだね。 思ってるより手軽じゃないってのがわかった。
忘れてました。レスありがとうございました。
バグじゃないだろ
Javadocにも明記されてるから、仕様を知らなかっただけ、だね
マルチスレッド要件不明のまま、おまいらよくここまで盛り上がれるな…
そんなに盛り上がってなくね
Webアプリケーションサーバの仕様で、webモジュール側がサーバで設定した任意の値を取得する方法なんて定義されているものでしょうか? やりたいのはアプリケーションで使用する設定ファイルをWebアプリケーションフォルダは以下においてはダメと言われ、 Webアプリケーションインストールフォルダ以外に配置することにしましたが、そのパスの取得方法をWebアプリケーションサーバの設定からとれればと思っています。 サーバはtomcatを使用していますが、サーバ側に任意の値を設定して、サーブレットの仕様でその値を取る方法なんてあるものでしょうか?
web.xmlの設定値を読むとかじゃだめなのか?
>>906 web.xmlもダメなんです…
となると、WebアプリケーションサーバとWebアプリケーションとのデータ連携の仕様が見つけられなくて…
ServletContext辺りのインタフェースも調べたのですが、基本はweb.xmlの設定値を取得するものばかりで…
ServletContextにgetRealPathってメソッドがあってコンテキストパスをファイルシステムパスに変換してくれる トムキャットユーザのアクセスできるファイルなら普通にファイル操作で設定値を読めばいいんじゃないかな?
>>901 イテレータのremoveじゃなくて
イテレートしたやつをremoveした時の話ですよ
なるほど そのやり方で困らないケースも多そうだし、いいんじゃない
911 :
デフォルトの名無しさん :2013/09/02(月) 15:43:35.88
まあでもWEB-INF以下を外部からアクセス不可にしてweb.xmlに設定値を書き込んでいる俺は アプリケーションが多数になったときの煩わしさを考えると設定はコンテキストパス内に入れるべきだと思う。 でも上司に外部にしろと言われたならしょうがないよね。
>アーティストのきゃりーぱみゅぱみゅも「『激おこスティックファイナリアリティぷんぷんドリーム』ってゆうのもあるらしい……ツアータイトルにしたいぐらいかっこいい!痺れる(;_;)」と賞賛している。 あせったぜ、「激おこスタティックファイナル」かと思った・・
>>908 そうなんですけど、そのパスのベタ打ちや決め打ちをやめたいらしいので、tomcatの設定から取れないか考えていました。
が、やっぱり見つからないですね。
環境変数かtomcatの起動パラメータに設定してもらうしかないですかね…
pleadesのオールインワンを軽くする方法を教えて下さい
915 :
デフォルトの名無しさん :2013/09/02(月) 20:12:00.64
∧_∧ ( ´∀`) あげ? ..\ (/u ノ \ 〈/フ'フ \ ∠∠/ \ \ \ 彡 .\ .\ .\_/| ̄ ̄ ̄ ̄ ̄| . | .|
>>914 素のEclipseに必要なプラグインだけ入れる。
javaでチェック例外ってどのように処理してますか? Utilsでmethod () throws IOExceptionと書くのは賢いとは思えないのですが チェック例外をThrowableを継承したクラスに変換してますか
>>917 その話するとだれが処理の責任持つかで揉める気がする
>>918 >だれが
プログラム or 人間のどっちですか
普段は.netで開発しているので、誰が処理するかってのは特に気にしないようにしているんですが
javaはそこら辺気にしますか
for (String line : arr){ line=new String("foobaa"); } このようにfor-eachではlineを再設定しないで新しい変数に代入したほうがいい、というのはどうしてですか?
>>917 extends Throwableでクラスを書くってことか?
extends Errorですら恐ろしいのに、あり得な過ぎる。
>>919 違う違う、どこレベルで例外処理までやるかって話。catchするだけで再throwしたりするじゃん
925 :
917 :2013/09/02(月) 22:34:21.38
>>921 extends Throwableが何故怖いんですか。よくわからないのですが
>>923 void dataLoad() throws IOExceptionって書くと、呼び出し元で全部IOExceptionを処理しないとダメですよね
なので、こういう感じで処理を書きたいんです。
void dateLoad() { 〜 catch(IOException e) { throws new TestException
IOExceptionを呼び出し元に通知しても、意味が無いと思うんです。
>>925 >IOExceptionを呼び出し元に通知しても、意味が無いと思うんです。
そんなもん場合によるんじゃないの?
メソッド利用者に責任もって書かせる必要がある場合とか考えたことある?
>>920 C++の参照渡しと勘違いする馬鹿がいるから引数に再代入するなってのと同じで、
arrの中身を書き換えてると勘違いする馬鹿がいるとまことしやかに信じられているから
迷信に近いので、君がこれを信じないなら従う必要はない
dataLoadが何で失敗したかを分かりにくくすることにどんな意味がある? IOで失敗したって分かると何か問題あるのか?
まず、 for (String line : arr){ line=new String("foobaa"); } のようにlineに何かを代入したりうんぬんって発想がJavaプログラマから見ると異様にみえる。 むしろfinalつけてもいいくらいなのに。
>>928 ラップによって分かりづらくなったりエラー処理がやりづらくなったりしやすいってのは
むしろチェック例外の問題点だろう
チェック例外を使う場合、どうしてもラップはしていかないとインターフェイスが無茶苦茶になって
実装変更も困難になる
>C++の参照渡しと勘違いする馬鹿がいるから引数に再代入するな
そうじゃないだろ。破壊的代入だからだろ。
>>925 なんかおかしいな。使う側に責任があるならチェック例外はthrows宣言するだろ?
だいたい、チェック例外が出たときは他にすること無いから呼び出し元に返したりするじゃん。
アプリケーションレベルでエンドユーザーにメッセージ出す時どうすんのさ。
同意だな。 特にIOExceptionは使う側に責任もたせて投げることを推奨している参考書が多いようにも思う
そうやってthrowsリストを増やしていくと、実装の詳細の詳細まで丸裸にして
実装変更が不可能な化物ができあがる
ある程度ラップは必須で、
>>928 の言うようなこととはトレードオフ
例外起きたら即VM終了で構わない仕事というのもそれなりにある。 なら catch節内で即System.exit()すればええやん、と思わないでもないが。
実際にはある程度上でキャッチすればいい場合がほとんどなので
直上にキャッチを強制するのは
>>934 の言うようなデメリットの方が大きい
だから後にも先にもJava以外の言語には検査例外が採用されてないの
正にStringWriterを使うときとかチェック例外を非チェック例外でラップすることも ないことはないが、917はそこまで考えてはいないだろうよ
>>936 そんなこといってると
>>924 の「リスト 13. あまりにも早急な例外処理」の状況に陥る
939 :
917 :2013/09/02(月) 23:05:35.14
>>937 >正にStringWriterを使うときとかチェック例外を非チェック例外でラップすることも
そこら辺がどのようになっているのか知りたいです。
なので、extends Throwableが危ないのか知りたいんです。
ちなみに、商品マスタが存在しなかったら例外をthrowするってホント?
コードがtry catchだらけになったり、パフォーマンス遅くなりませんか
javaの入力チェックのポリシーがよくわからない
>>938 普通に考えてそれは逆だろう
検査例外は「あまりにも早急な例外処理」を助長する
実際短いサンプルコードなんかだと多くの場合まさにそうなってしまってるから
初心者がそれでいいんだと勘違いする
>>920 > for (String line : arr){
> line=new String("foobaa");
> }
arrの要素数だけループ回すのが目的なら、
arr.lengthかarr.size()を使ったループカウンタを素直に使った方がよろしい。
例えarrがLinkedListだったとしても、Iterator空読みさせるよりたぶん早いぞ。
>>940 C、C++ならその考えでいいけど、そのように書かれたコードはJavaではどうなの?サイトにあるように訛が強すぎ。
何よりinterfaceのメソッドにthrowsを用いたような”設計”があることを知る方が大事だと思うけどなぁ。
特にサーバーとのやり取りをするコードを書くときとか。
IOException 投げまくりの Appendable を実装しているにもかかわらず StringBuffer は一切 IOException 投げないわけだが、そういう実装例が知りたかったのかな?
>>941 拡張for分はtry catchやめてから速くなってる
>>943 >StringBuffer は一切 IOException 投げないわけだが
private synchronized void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {}
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {}
投げる件。適当なこと言いすぎ。
@Overrideでないprivateな手続きの話とか、この際どうでもいいじゃん…
ラップするって言ってる人らは例外チェーンは嫌なん?
>>944 いや、Iterator回すよりループ変数回まわしてgetする事そのものの方が速い。
コンパイラはRandomAccessマーカーみてfor (int i=0, n=list.size(); i < n; i++)に置換するとかやってないから
>>941 の言うとおりだよ。
検査例外握りつぶす系の話か? いい加減やめろや 例外処理はAPI呼び出し側の責任だろ
うーん? そもそもStringBufferで何故にIOExceptionの話?? StringIndexOutOfBoundsExceptionならまだわかるが・・
StringWriterと間違えたのかな
>>942 その"設計"を突き詰めれば、将来の実装変更の可能性を考慮して
どんなエラーでもラップして放り込めるような一般的な例外をthrowsリストに追加せざるを得ないが
それは同時にチェック例外の意味をなくすというジレンマ
君ら議論していることを過去に色々やってみた結果 try{...}catch(IOException e){throw new RuntimeException(e);} に落ち着いた箇所は結構多い。
>>941 さすがにLinkedListをインデックスで回すのはないわ
O(N^2/2)だぞ
>>953 だから例外チェーンだろそれ。ラップするだけじゃスタックトレース増殖するから1.4で変更入ったわけじゃん。
>>955 実行時例外だから例外チェーンとは言わんよ
C、C++を先にやると、try catcheは例外を隠すためにあるものだと勘違いしてしまう何か理由があるの?
おいどんは難しいことはわからねぇ だでども、throw、throwsがエレガントに見えて仕方ねぇだで
Java標準ライブラリが極めて不適切な検査例外の使い方をしているから、 そのせいで「検査例外は邪魔で役立たず」なイメージが根付いてしまった。
例外処理ってパフォーマンスは低下しないの? そこをクリアできるならバカスカ使おうと思う
>>961 かなり低下する。まあ例外って名称からもわかるようによからぬことが発生という扱いでOK
>>920 はarrのサイズにだけ興味があってarrの中身はどうでもいいのだから
get(n)のコストとか無視していいんだろう
>>939 > なので、extends Throwableが危ないのか知りたいんです。
そういうクラスが至るところで投げられると、受け側は catch (Throwable t)
と書かざるをえなくなる。そうすると、catchしたくなかった OutOfMemoryError
とかまでcatchしてしまっているのを忘れやすくなったり、無駄に再throwを
書かないといけなくなる。
> コードがtry catchだらけになったり、パフォーマンス遅くなりませんか
>>925 のコード「catch(IOException e) { throws new」はそれを強要している
ことに気づきなさいよ。あなたがcatchしなければ、呼び出し側もcatchしない
ことを選択できるんだ。
Javaが算術でいちいちトラップ投げないのは評価したい。NAN万歳。
>>965 それが正しいチェック例外の使い方
キャッチしたい人はすればいいし
したくない人はNaNのまま続行すればいい
0除算もinfinityにしてほしい。どうせどこかでチェック処理通るんだから
数値計算やってると浮動小数点例外は神だぞ JavaはFPEがないからウンコ
っていうか
>>917 は本当にその処理はUtilsが持っていいの?そもそも例外の話じゃないってオチは?
関係ないGodクラスが持ってるからrethrowするはめになってるんじゃ。
適切なクラスに移したら責任と処理の場所が一致するとかじゃないの?
糞暑い中 糞熱い議論乙
チェック例外があるメジャーな言語なんてJavaくらいのもんだけど、Javaで書かれたアプリケーションが 他の言語で書かれたものより安全で堅牢かっていうとそんなことないので、やっぱりチェック例外はいらない子 ランタイム例外にラップして投げるのがプロ
catchしてprintStacktraceしかしないのがjavaドカタ流ですので例外処理なんて手間が増えるだけです
遅いのが納得行かない 関数型みたいに式一つで適当にこさえて ポコポコ投げられればいいんだけどな
遅いっつってもたかがしれてんだろ
tomcatでJNDIを利用してリソースを取得したいのですが、調べてもデータソースの取得例しか見つかりませんでした。 tomcatのJNDIを使ってファイルやディレクトリを取得する方法を教えていただけないでしょうか?
検索したらthrowするだけで単純なエラー値リターンの66倍は遅いみたいだね。 頻繁じゃなければ気にしなくてもいいだろうけど、 他の言語とは比較にならないほど遅い。
>>972 そこまでtry catchを作りこまないといけない状況がそもそもまずくない?
速度考えたらcatch内で投げるより、
try catch使わないで条件式でthrowしたほうが大抵速いんだし
catchしたら複雑な処理が始まるようなプログラムは怖い
コンソールに書き出すか、サーバーサイドならログ書き出すくらいで済むのが一番
利用者に正しくバグ報告を送信してもらうためにもprintStackTraceは馬鹿にできない
オブジェクト指向言語で例外処理よりエラー値を勧める本なんて読んだことないけど、 どういうわけか例外(非チェック含む)を可能な限り使おうとしない人が一定数いるんだよねえ。 一体どこでそんな知識を身に着けてしまったのかが気になる。会社とかでそういう教育するところがあるのか?
・Cをやってた奴がちょっとJavaを齧って自己流で書いている説 ・例外なんか糞くらえだ!あれはGOTO文じゃねえか!あんな有害物使うんじゃねえ!という意見に賛同している説 ・何も考えず面倒だから例外を使わない説
>>978 Javaプログラマだけだよ。何でも例外にしたがるのは。
例外は文字通り例外だと思わないほうがいい そう思うやつは頭が固い
"Kent Beck、Robert C. Martin、Bluce Eckel" とやらのどの辺に 言語仕様に見識を示すだけの実績があるのか、誰か教えてくれよ。
想定されるビジネスロジック上の異常ケースなんかも例外で実装しちゃうJavaプログラマがいるからな
>>984 チェック例外否定派がいることを示しただけ。
Kent Beck、Robert C. Martin、Bluce Eckelらはbig nameなんだが、まあそれはそれとして
どういう論理で否定してるのか位は読んだら?
今どきチェック例外使ってる奴いたのか
988 :
978 :2013/09/03(火) 14:27:30.60
たぶん
>>978 読んだらチェック例外に関する話だと誤認する人がいるだろうから、
わざわざ括弧書きで「非チェック含む」と強調しておいたのに、それでもやっぱり「チェック例外使うなって言ってる人いるぞ!」という
想定の範囲内の誤解に基づいた反論が来てしまったか。
もっと噛み砕いて説明しないと伝わらないか…。「教える」って難しいな。
>>988 > 例外(非チェック含む)を可能な限り使おうとしない人が一定数いる
> 一体どこでそんな知識を身に着けてしまったのかが気になる。
ということなので、どこで議論されているかを示したのだが?
普通、非チェック含むと言われたらチェック例外を使いたがらない人もいれば、非チェック例外ですら使いたがらない 人もいる、と読むと思うのだけど。
一体何を「教える」つもりなんだか
throwやtry-catchは実行コードの意見云々よりもデザインのサイドからの要請ってことに、Javaなんだし、気がつかなかった?
>>920 ですが、たまにfor-eachの変数にfinal付けてるサンプルがあるので、for-eachのfinalはどうかなって思ってました。
上の方からロジックを考えながらコーディングしていると
line=line.trim().intern(); とかしたくなって再代入(再設定)のコードがたまに現れるんですよ。
iterator logicの場合はスコープ内で
String line=it.next(); になるからlineの再代入は普通にありだと思うんですけど、for-eachの場合の当該変数はどうなのかなって。
コンパイラさんが、バカには見えないIteratorやカウンタ変数書き足して
ループを回してくれているので、lineをどういじったところで
>>920 のループは乱れないよ。
次のうんこスレはどこだぁ
>>993 別にforeachだからどうこうって話じゃないだろ
再代入しないほうが望ましいってだけで、したからってなにか問題あるわけじゃない
なんでforeachだけを気にしてるのか全然わかんね
ニートだからAndroidアプリでひと稼ぎしたいんだけど何から始めたらいいの?
千
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。