★★Java質問・相談スレッド181★★
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 http://pc11.2ch.net/hp/ Webプログラミング http://pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 (p)ttp://www.wikiroom.com/java/?path,classpath ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 ・String に == は使うな。equals() を使え。※ 質問時の心得 ・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。 ・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。 前スレ ★★Java質問・相談スレッド180★★ https://mevius.5ch.net/test/read.cgi/tech/1492780397/ 失敗例でいうとJavaはあちこちで失敗してるね 日常すぎてわざわざ話題にならんけど >>522 NASDAQはJavaで動いています Javaの失敗例なんて聞いたことないわ Write once, Bug anywhere. OS毎にバグの入り具合が違う。 初心者質問で恐縮ですが、世間様では初期化不要なコンストラクタも一応書くのでしょうか?省略するのでしょうか? 派遣の年上の人からルールだから書けと言われ気になりまして >>523 だからわざわざ話題にするほど珍しくないってことだよ Javaの有名な失敗例を一つでもいいから挙げてみろよ >>527 IBMはセールスフォースでも裁判沙汰だから 言語の問題じゃない、マネジメントの問題 伊達に30億のデバイスで動いてるわけじゃねえぞ てめえらあんま舐めてっとあれだからな >>525 一般的には書かなくていいものは書かない >>525 「初期化不要」とはどういう意味? フィールドが一切なく、static(みたいな)クラスのことか? デフォルトコンストラクタのことなら、「初期化不要」とは言わないぞ。 なんとかぎゃふんといわせたい(笑) >派遣の年上の人からルールだから書けと言われ気になりまして 8月からIT企業に入社します 研修があるので、早めに予習しておきたいのですが 開発環境をどうしたらいいか困ってます VBAでjavaをすると電話で聞いたのですが 見たところjavascriptでしか見たらず、開発環境はイクリプスでしかネットでも記事が出てきません VBAで開発環境にしている方はどのように行ってますでしょうか >>537 >VBAでjavaをする それは一体どういう状況なのか? 何か聞き間違えていないか? それと、開発環境は君が決めても構わないのか? 普通は会社で指定されてたりしないか? >>539 予習するだけです C#は余裕してるので問題ないんですが そもそもVBAでjavaを作動させることはできるんでしょうか? VBAからJavaで作ったアプリを起動する…とかなのか? VBAやるならMSExcelが必要 >>533 はいフィールドのない小さいクラスのデフォルトコンストラクタです アクセサメソッドみたいに丁寧に書くのがしきたりなのか世間様の動向を知りたく >>542 仕事の規模にもよるが、ソースコードを保守しやすくするためにコーディングの方法が決められている(コーディング規約がある)現場が殆ど ちゃんと統一されてるなら従ったほうが無難 仮にバグが発生してあなたの追加部分が規約に従ってない場合、面倒くさいことが発せあする可能性がある >>543 なるほど、そこはルールに従うのが無難ということですね 参考になります >>542 フィールドがないならインスタンス生成を禁止するためにprivateコンストラクタを必ず定義すべきなんじゃないの? そんな細いことまで規約で定めている現場はソフトウェアの品質が低い 俺の経験ね 品質管理担当とか専任者がいても規約に沿っているかという杓子定規な現場が多く 規約化できないビジネスロジックの妥当性はなぜかチェックしない傾向あり しょーもない規約がなる揺らぎを許容する現場は チェックリストに沿った均一的な検査はできないものの 分かっている人がビジネスロジックを査読しようとする傾向がある ルールに従っている限り、問題が起きた場合はルールを作った奴の責任 これ典型的なSI業界の考え方 上から下までSIに身を置く限りは極めて重要な大原則ではあるが、悪く言えば責任逃れだ この例に限って言えばわざわざ破って余計なリスクを負うほどの価値があるとは思わないが、今後同様に自分で責任を負わないという判断をするときには それがエンジニアとしての自分の価値を下げているということを頭の片隅に置いておいたほうがいい どんな業界でも、本当に上へ行く奴は自己責任でやるもんだ >>544 俺も大体>>546 と同じ考えだから「規約!」「厳守!」という凝り固まった考えにはならないように注意な チェックする側が知識ない人って事もあるから余計に規約に従ってるか重視するんじゃないだろうか >>544 後あれだ なんでこんな規約があるんだって考えるのも最初は勉強になるぞ 件のデフォコン必須!とかはリフレクション多用してて落ちたことがあったからそのまま規約になった〜とか理由があるかもしれない javaはもうwebの世界でしか生きていけないのかな >>550 kindleもandroidもJavaで動いてるし ただ単にwebアプリが増えてるだけだと思う webに向いてるというよりはwebの世界が広がっただけ >>547 話を一般化しすぎじゃないか SIを嫌ってるだけだろ スカラより簡単ピエチピより厳密 アプリサーバがたくさんあって人材も豊富 作っているのは世に名も高きオラクル Java最強伝説 >>551 Andoroidのjavaはもう終わりかな Javaの知識があってのKotlinだけどな。 Nativeは知らんけど。 >>557 終わらぬだろ、終わらぬよ 終わりません! googleはjavaでオラクルに一兆円の損害賠償払うのにjavaは捨てられないのかな オラクル社長はドラ息子に巨万の富を残してるのにまだ足りないみたいね andoroidの巨額提訴にjava有償化に >>546 良いこと言うね Java使いにもまともな人居たんだ Java使いに「も」って、まともな人が居ない事前提? 36歳がそうだからと言って全体を括るのは乱暴かと javaの致命的に糞な所を3つ挙げるとしたら何? おまけで他言語よりこここだけは良いということ1つ 有料化になること以外でよろ 糞なところ ・貧弱なジェネリクス、極めて非直感的なワイルドカード ・直交性が目的化していて利便性が犠牲になっている標準ライブラリ群 ・プログラマの平均スキルの低さ 良いところ ・安い単価でプログラマを大量に調達できる 致命的と思うところはない だって致命的な欠点があったらJava使うのやめてるだろ Javaの良いところはクラスライブラリと開発コミュニティ Java自体の言語仕様は今となっては秀でている点はなく後発言語のほうが優れている しかしJavaの豊富なクラスライブラリに多言語が追い付くの容易ではない Java開発者は標準クラスライブラリに沿って・似せてクラス設計する人が多い印象 そのため外部ライブラリを見つけてきてもインターフェイスに一貫性があり使いやすいことが多い 昔、Perlでもモジュールを集めるCPANというものがあったけど一貫性がなくモジュールごとに作法がバラバラだった Javaの良さは世界中の開発者が設計ポリシーを共有していて作られたライブラリが相互運用しやすいエコシステムにある 変数宣言が冗長すぎ Date date = new Date() Date型って最初に宣言してんだからnewもDateで基本問題無いやろ >>571 Object o = new String() ; ってやりたいこともあるから。 moduleが難しすぎて突破できないから Java8で行くお! そういや最近宣言と同時にnewってあんましてないな >>577 相容れないなんてことは無いだろ。 限られたシチュエーションで使えないだけだ。 >>572 それならそういうときはそれでいいけど、 Date date; みたいに省略したときは自動でDateをnewしてくれ Kotlin使えばよい 後から作った言語なのでそういう細かいことは解消されている >>579 とてつもなく浅い知識で批判とか恥ずかしくないの? >>582 ははーん、さてはおめー何もわかってねーな 「ははーん、さてはおめー何もわかってねーな」という台詞を言ってみたかっただけの人か? 下記ブログの例題がEclipseでもpaiza.ioでもコンパイルエラーになって色々試したのですが解決出来ないので原因と回避策を教えてください Eclipseでのエラー: 型の不一致: Object から int には変換できません paizaでのエラー: Object cannot be converted to int https://nompor.com/2017/11/16/post-1118/ ブログのページ最後にある例題サンプルです 「Iteratorで全要素アクセス」 18行目 int data = it.next();//次の要素を取得します。 --- 例題そのままをコピペしてもエラーになるので自力解決が出来なくて困っています >>589 Iterator it = arr.iterator(); これを Iterator<Integer> it = arr.iterator(); こうや! >>590 それはやったのですが、エラーになりましたね Exception in thread "main" java.lang.Error: Unresolved compilation problem: integer を型に解決できません 自己解決しました エラーのpopアップに表示されていたキャストをすれば解決しました もしかしたらブログを執筆していた頃には問題の無かった書き方が厳密になったとかなのでしょうか? 原因が例題書かれた方のミスなのか仕様変更なのか意味が分からないままエラーだけ出なくなった状況ですが次へ進みます。 ありがとうございました 18行目(変更前 int data = it.next();//次の要素を取得します。 18行目(変更後 int data = (int) it.next();//次の要素を取得します。 そもそもなのですがIteratorって使いますか? 他にも配列などの操作方法あるようですし どうしてこんな面倒な書き方で参照したりするのか疑問です >>589 https://ideone.com/qLRSSK Object を Iterator にキャストしてオートボクシングを利かせてみた >>592 それは解決になってない。 キャストで逃げたら、ジェネリック使う意味がなくなる。 >>594 int data = (int)it.next(); int data = (Integer)it.next(); これどちらもオートボクシングが行われてますよ プリミティブ型で格納されてるわけじゃないっすから オートボクシング使わずに書くならこう! int data = ((Integer)it.next()).intValue(); >>597 13行目 Iterator<Integer> it = arr.iterator(); 自分<integer>でミスタイプしてましたねすみません >>598 勉強になります >>これどちらもオートボクシングが行われてますよ >>プリミティブ型で格納されてるわけじゃないっすから まだ意味がわからないので調べてみます >>596 >>キャストで逃げたら、ジェネリック使う意味がなくなる。 まだ意味がわからないので調べてみます ありがとうございます >>589 の原因と教えていただいたことを自分なりに調べた結果のまとめと確認です (連投すみません 13行目(変更前 Iterator it = arr.iterator(); これがジェネリクス総称型として型を指定していないのでObject型となり次の 18行目(変更前 int data = it.next();//次の要素を取得します。 ここでInt型にObject型を代入しようとして型不一致で代入できないとのエラーが出ていた 解決策としては 13行目(変更後 Iterator<Integer> it = arr.iterator(); 明示的に<Integer>を宣言することで次の 18行目(変更前 int data = it.next();//次の要素を取得します。 ここで代入可能となったが これはInt型とInteger型のオートボクシング機能が働いている >>600 これで合ってますか? 最後の「これはInt型とInteger型のオートボクシング機能が働いている」のかちょっとまだ不安です キャストはしてないけどオートボクシングが働いてたら意味がない? このあたりがまだよく理解出来てないと思います >>598 これをふまえると・・・ >>オートボクシング使わずに書くならこう! >>int data = ((Integer)it.next()).intValue(); 13行目(変更後 Iterator<Integer> it = arr.iterator(); 18行目(変更後※ int data = it.next().intValue();//次の要素を取得します。 ※ここまでやらないと意味が無いのでしょうか?? 一応どちらも正常に結果出てますが内部的に違いがあるのか不安です? >>601 オートボクシングはプリミティブ型とラッパークラスの変換を 自動で行う仕組みのことで 毎回、↓こう書くの面倒だよね int data = it.next().intValue(); じゃあ↓こう書けるようにしよう int data = it.next(); ということで導入されたものだから積極的に使ったら良いよ >>602 Iterator<Integer> it = arr.iterator(); int data = it.next(); オートボクシングは便利機能なので使ってOKで .intValue();が自動的に省略されてるだけで結果は同じ これで解決ってことですね!納得しました! ありがとうございました だね Integerからintへの変換ではインスタンス生成されないし intからIntegerへの変換でも数字が小さければインスタンスは生成されない インスタンス生成を抑えるために小さな数字はあらかじめIntegerオブジェクトが作られていて使い回されるようになっているから 値オブジェクトみたいな感じ コスト気にするよりオートボクシングを積極的に使って可読性の高いコードを書こう >>600 ジェネリクスで型を指定すれば、型が間違ってたときにコンパイルエラーに なってすぐに気づくことができるのだけれども ジェネリクスで型を指定しないと、型が間違っててもエラーにならないのよ 実行してデータが処理されないとコードが間違ってるかわからぬのよね エラーが起きないデータもあったりするとデバッグが超大変 ジェネリクスが使えるときは型を指定して使ったが良いよ >>604-605 >>コスト気にするよりオートボクシングを積極的に使って可読性の高いコードを書こう >>ジェネリクスが使えるときは型を指定して使ったが良いよ 質問で丁寧に回答していただきさらにアドバイスまでいただき感謝です! 勉強になりますありがとうございます! >>589 それ原因が分かったぞ。(勘のいい奴なら既にわかっていると思うが)。 そのブログのページのソースのこう表示されてる個所あるだろ。 Iterator it = arr.iterator(); この部分の HTML のソースを見てみたらこうなってた。 Iterator<Integer> it = arr.iterator(); しかしこの通りに表示させたいなら HTML 文書の中ではこう書かねばならない。 Iterator<Integer> it = arr.iterator(); 他の同じような記述の個所はこういう変換をやっているのにこの部分だけ忘れており <Integer> 部分がブラウザによって HTML のタグと解釈されて丸ごと表示されない 状態になっていた、ということ。 >>607 よく見つけられましたね凄いです! どなたかがブログへご指摘されてくださったようで確認しようと再度HP確認したら既に修正されていました! あまりの速さに2度驚きました この質問スレにもブログにも勉強するのにとても助かっています いつもありがとうございます ./__.))ノヽ .|ミ.l _ ._ i.) わしが指摘した (^'ミ/.´・ .〈・ リ .しi r、_) | ______ | `ニニ' / | | \__\___ ___.ノ `ー―i´ | | |= |iiiiiiiiiii| /⌒ヽ \____/\ | | | =. | !!!!!!!| | ヽ____| \__. __ | | |三 |_「r.、 | // // ̄.\ //⊃ヾ) |__|_/( ) ̄ )) ヽ ______//r_/| |.||⌒ヽ〜〔 ̄ ̄! ̄ ̄ ̄/ ̄ ̄\(( 定義されてるディレクトリ配下のログが誰かに開かれてたら何もしないって処理作りたいんですけど、ファイルが誰かから開かれてるかを調べる方法ありますか? 自分でそのファイルを読み取り排他で開いてみるしかない 失敗したら他のプロセスがオープンしているということ 排他(副作用)なしでファイルのロック状態を知る方法はない >>614 ありがとうございます。 明日試してみます! >>612 Linux の場合は fuser コマンドを使うと指定のファイルをオープンしているプログラムのプロセスIDが分かる。 何も出力がなければ開いているプロセスはない。 他のUNIX系OSにもこのコマンドはあるかも知れない。Windows の WSL にはこのコマンドはあった。 その他のOSではどうやるか知らないが、もし fuser コマンドがあるのならそれを使えば同じようにできるんじゃないかと思う。 Windows の場合は他のプロセスが開いている最中にリネームしようとするとエラーになるそうなのでこれを利用するという手があるようだ。 但し同じ方法はOSが違ったら使えない(例えばLinuxやUNIX系OSでは使えない。WSLはわからない)。 https://code.i-harness.com/ja/q/153800 paiza.ioってローカルPCのファイルやフォルダ操作するコードは実行出来ないですか? >>614 ログを開くアプリケーションによってはロック状態を認識できませんでした。 FileChannelクラスのtryLookメソッドを使いました。 OSがcentosでLibreOfficeで開いてるときはロック状態でしたが、geditで開いたときはロックされてなかったです。 何か初心者がおかしやすいミスとかってありますかね。 もう諦めてるんですがgeditが特殊なんですかね gedit以外のテキストエディタでも同じでしたね ロックの確認できません。 普通はしないよ。 一々ロックしてたら、たとえばGitなんか阿鼻叫喚の地獄になる。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる