X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/02/10(土) 17:49:40.56ID:l9ZzjyKP
プログラミング言語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/
0522デフォルトの名無しさん
垢版 |
2018/07/18(水) 12:06:42.81ID:tghCYv44
失敗例でいうとJavaはあちこちで失敗してるね
日常すぎてわざわざ話題にならんけど
0524デフォルトの名無しさん
垢版 |
2018/07/18(水) 13:33:17.95ID:9IEVAZpR
Write once, Bug anywhere.

OS毎にバグの入り具合が違う。
0525デフォルトの名無しさん
垢版 |
2018/07/18(水) 13:55:40.65ID:imuZ+lX2
初心者質問で恐縮ですが、世間様では初期化不要なコンストラクタも一応書くのでしょうか?省略するのでしょうか?

派遣の年上の人からルールだから書けと言われ気になりまして
0531デフォルトの名無しさん
垢版 |
2018/07/18(水) 15:13:11.38ID:ouSD5X5G
伊達に30億のデバイスで動いてるわけじゃねえぞ
てめえらあんま舐めてっとあれだからな
0533デフォルトの名無しさん
垢版 |
2018/07/18(水) 15:35:58.01ID:6/qiKP15
>>525
「初期化不要」とはどういう意味?
フィールドが一切なく、static(みたいな)クラスのことか?
デフォルトコンストラクタのことなら、「初期化不要」とは言わないぞ。
0534デフォルトの名無しさん
垢版 |
2018/07/18(水) 16:30:02.33ID:4ELcifB5
ぺろぺろ
0536デフォルトの名無しさん
垢版 |
2018/07/18(水) 17:57:49.02ID:OmO21Xy3
なんとかぎゃふんといわせたい(笑)
>派遣の年上の人からルールだから書けと言われ気になりまして
0537デフォルトの名無しさん
垢版 |
2018/07/18(水) 20:28:43.76ID:E4ArJsFy
8月からIT企業に入社します
研修があるので、早めに予習しておきたいのですが
開発環境をどうしたらいいか困ってます

VBAでjavaをすると電話で聞いたのですが
見たところjavascriptでしか見たらず、開発環境はイクリプスでしかネットでも記事が出てきません
VBAで開発環境にしている方はどのように行ってますでしょうか
0539デフォルトの名無しさん
垢版 |
2018/07/18(水) 20:39:56.57ID:3T+bsJq5
>>537
>VBAでjavaをする

それは一体どういう状況なのか?
何か聞き間違えていないか?

それと、開発環境は君が決めても構わないのか?
普通は会社で指定されてたりしないか?
0540デフォルトの名無しさん
垢版 |
2018/07/19(木) 00:23:47.65ID:WcB0Ld3E
>>539
予習するだけです
C#は余裕してるので問題ないんですが
そもそもVBAでjavaを作動させることはできるんでしょうか?
0542デフォルトの名無しさん
垢版 |
2018/07/19(木) 07:30:41.13ID:X7flfBN8
>>533
はいフィールドのない小さいクラスのデフォルトコンストラクタです

アクセサメソッドみたいに丁寧に書くのがしきたりなのか世間様の動向を知りたく
0543デフォルトの名無しさん
垢版 |
2018/07/19(木) 07:39:20.31ID:B62Oo3TM
>>542
仕事の規模にもよるが、ソースコードを保守しやすくするためにコーディングの方法が決められている(コーディング規約がある)現場が殆ど
ちゃんと統一されてるなら従ったほうが無難

仮にバグが発生してあなたの追加部分が規約に従ってない場合、面倒くさいことが発せあする可能性がある
0545デフォルトの名無しさん
垢版 |
2018/07/19(木) 08:06:40.53ID:SUmbWwrd
>>542
フィールドがないならインスタンス生成を禁止するためにprivateコンストラクタを必ず定義すべきなんじゃないの?
0546デフォルトの名無しさん
垢版 |
2018/07/19(木) 08:14:00.46ID:H+BjTpO8
そんな細いことまで規約で定めている現場はソフトウェアの品質が低い
俺の経験ね

品質管理担当とか専任者がいても規約に沿っているかという杓子定規な現場が多く
規約化できないビジネスロジックの妥当性はなぜかチェックしない傾向あり

しょーもない規約がなる揺らぎを許容する現場は
チェックリストに沿った均一的な検査はできないものの
分かっている人がビジネスロジックを査読しようとする傾向がある
0547デフォルトの名無しさん
垢版 |
2018/07/19(木) 08:16:26.97ID:MYiqAgsV
ルールに従っている限り、問題が起きた場合はルールを作った奴の責任
これ典型的なSI業界の考え方
上から下までSIに身を置く限りは極めて重要な大原則ではあるが、悪く言えば責任逃れだ
この例に限って言えばわざわざ破って余計なリスクを負うほどの価値があるとは思わないが、今後同様に自分で責任を負わないという判断をするときには
それがエンジニアとしての自分の価値を下げているということを頭の片隅に置いておいたほうがいい
どんな業界でも、本当に上へ行く奴は自己責任でやるもんだ
0548デフォルトの名無しさん
垢版 |
2018/07/19(木) 08:21:20.97ID:B62Oo3TM
>>544
俺も大体>>546と同じ考えだから「規約!」「厳守!」という凝り固まった考えにはならないように注意な

チェックする側が知識ない人って事もあるから余計に規約に従ってるか重視するんじゃないだろうか
0549デフォルトの名無しさん
垢版 |
2018/07/19(木) 08:38:28.86ID:B62Oo3TM
>>544
後あれだ
なんでこんな規約があるんだって考えるのも最初は勉強になるぞ

件のデフォコン必須!とかはリフレクション多用してて落ちたことがあったからそのまま規約になった〜とか理由があるかもしれない
0550デフォルトの名無しさん
垢版 |
2018/07/19(木) 08:46:17.55ID:5x41Wecj
javaはもうwebの世界でしか生きていけないのかな
0554デフォルトの名無しさん
垢版 |
2018/07/19(木) 09:02:43.68ID:Op5duy3q
スカラより簡単ピエチピより厳密
アプリサーバがたくさんあって人材も豊富
作っているのは世に名も高きオラクル
Java最強伝説
0556デフォルトの名無しさん
垢版 |
2018/07/19(木) 11:32:42.94ID:MIkQQrXR
Kotlinもよろしく
0559デフォルトの名無しさん
垢版 |
2018/07/19(木) 13:35:56.12ID:lzwulHPo
Javaの知識があってのKotlinだけどな。
Nativeは知らんけど。
0562デフォルトの名無しさん
垢版 |
2018/07/19(木) 18:52:53.52ID:6E4STiKC
オラクル社長はドラ息子に巨万の富を残してるのにまだ足りないみたいね

andoroidの巨額提訴にjava有償化に
0565デフォルトの名無しさん
垢版 |
2018/07/20(金) 03:33:50.65ID:KKufvgV7
Java使いに「も」って、まともな人が居ない事前提?

36歳がそうだからと言って全体を括るのは乱暴かと
0566デフォルトの名無しさん
垢版 |
2018/07/23(月) 06:03:22.92ID:a5odQemo
javaの致命的に糞な所を3つ挙げるとしたら何?
おまけで他言語よりこここだけは良いということ1つ
有料化になること以外でよろ
0567デフォルトの名無しさん
垢版 |
2018/07/23(月) 07:40:33.50ID:tja2UxRY
糞なところ
・貧弱なジェネリクス、極めて非直感的なワイルドカード
・直交性が目的化していて利便性が犠牲になっている標準ライブラリ群
・プログラマの平均スキルの低さ
良いところ
・安い単価でプログラマを大量に調達できる
0568デフォルトの名無しさん
垢版 |
2018/07/23(月) 07:46:24.27ID:r2NgEomY
致命的と思うところはない
だって致命的な欠点があったらJava使うのやめてるだろ

Javaの良いところはクラスライブラリと開発コミュニティ
Java自体の言語仕様は今となっては秀でている点はなく後発言語のほうが優れている
しかしJavaの豊富なクラスライブラリに多言語が追い付くの容易ではない

Java開発者は標準クラスライブラリに沿って・似せてクラス設計する人が多い印象
そのため外部ライブラリを見つけてきてもインターフェイスに一貫性があり使いやすいことが多い

昔、Perlでもモジュールを集めるCPANというものがあったけど一貫性がなくモジュールごとに作法がバラバラだった

Javaの良さは世界中の開発者が設計ポリシーを共有していて作られたライブラリが相互運用しやすいエコシステムにある
0570デフォルトの名無しさん
垢版 |
2018/07/23(月) 18:43:51.10ID:dX14gRVE
それをいっちゃあおしめえよ
0571デフォルトの名無しさん
垢版 |
2018/07/23(月) 19:32:54.33ID:IsAC2rDC
変数宣言が冗長すぎ
Date date = new Date()
Date型って最初に宣言してんだからnewもDateで基本問題無いやろ
0573デフォルトの名無しさん
垢版 |
2018/07/23(月) 19:56:00.68ID:dX14gRVE
型推論してくれるKotlinはナイスだな
0575デフォルトの名無しさん
垢版 |
2018/07/23(月) 20:11:54.87ID:RCR4OhGD
moduleが難しすぎて突破できないから
Java8で行くお!
0577デフォルトの名無しさん
垢版 |
2018/07/23(月) 20:17:45.49ID:m6zef+c0
varはポリモーフィズムとは相容れないから。
0579デフォルトの名無しさん
垢版 |
2018/07/23(月) 22:14:25.10ID:IsAC2rDC
>>572
それならそういうときはそれでいいけど、
Date date;
みたいに省略したときは自動でDateをnewしてくれ
0582デフォルトの名無しさん
垢版 |
2018/07/24(火) 09:02:46.76ID:3bmjSXS4
Kotlin使えばよい
後から作った言語なのでそういう細かいことは解消されている
0583デフォルトの名無しさん
垢版 |
2018/07/24(火) 09:06:29.72ID:WgNXUi2L
>>579
とてつもなく浅い知識で批判とか恥ずかしくないの?
0585デフォルトの名無しさん
垢版 |
2018/07/25(水) 07:32:49.10ID:BeP5/XfH
>>582
ははーん、さてはおめー何もわかってねーな
0586デフォルトの名無しさん
垢版 |
2018/07/25(水) 09:27:06.98ID:GNtg4sP8
>>585
というと?
0588デフォルトの名無しさん
垢版 |
2018/07/25(水) 20:01:38.85ID:ekeRKo17
「ははーん、さてはおめー何もわかってねーな」という台詞を言ってみたかっただけの人か?
0589デフォルトの名無しさん
垢版 |
2018/07/25(水) 20:12:44.09ID:QfwTkRmU
下記ブログの例題が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();//次の要素を取得します。

---
例題そのままをコピペしてもエラーになるので自力解決が出来なくて困っています
0590デフォルトの名無しさん
垢版 |
2018/07/25(水) 20:17:15.54ID:GZRArLRs
>>589
Iterator it = arr.iterator();
これを
Iterator<Integer> it = arr.iterator();
こうや!
0591デフォルトの名無しさん
垢版 |
2018/07/25(水) 20:20:52.44ID:QfwTkRmU
>>590
それはやったのですが、エラーになりましたね
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
integer を型に解決できません
0592デフォルトの名無しさん
垢版 |
2018/07/25(水) 20:27:16.64ID:QfwTkRmU
自己解決しました
エラーのpopアップに表示されていたキャストをすれば解決しました

もしかしたらブログを執筆していた頃には問題の無かった書き方が厳密になったとかなのでしょうか?
原因が例題書かれた方のミスなのか仕様変更なのか意味が分からないままエラーだけ出なくなった状況ですが次へ進みます。
ありがとうございました

18行目(変更前
int data = it.next();//次の要素を取得します。

18行目(変更後
int data = (int) it.next();//次の要素を取得します。
0593デフォルトの名無しさん
垢版 |
2018/07/25(水) 20:30:23.90ID:QfwTkRmU
そもそもなのですがIteratorって使いますか?
他にも配列などの操作方法あるようですし
どうしてこんな面倒な書き方で参照したりするのか疑問です
0596デフォルトの名無しさん
垢版 |
2018/07/25(水) 20:51:02.31ID:ITmWCwNQ
>>592
それは解決になってない。
キャストで逃げたら、ジェネリック使う意味がなくなる。
0598デフォルトの名無しさん
垢版 |
2018/07/25(水) 21:27:25.94ID:GZRArLRs
>>594
int data = (int)it.next();
int data = (Integer)it.next();
これどちらもオートボクシングが行われてますよ
プリミティブ型で格納されてるわけじゃないっすから

オートボクシング使わずに書くならこう!
int data = ((Integer)it.next()).intValue();
0599デフォルトの名無しさん
垢版 |
2018/07/25(水) 21:49:55.62ID:QfwTkRmU
>>597
13行目
Iterator<Integer> it = arr.iterator();
自分<integer>でミスタイプしてましたねすみません

>>598
勉強になります

>>これどちらもオートボクシングが行われてますよ
>>プリミティブ型で格納されてるわけじゃないっすから
まだ意味がわからないので調べてみます

>>596
>>キャストで逃げたら、ジェネリック使う意味がなくなる。
まだ意味がわからないので調べてみます

ありがとうございます
0600デフォルトの名無しさん
垢版 |
2018/07/25(水) 22:28:09.59ID:QfwTkRmU
>>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型のオートボクシング機能が働いている
0601デフォルトの名無しさん
垢版 |
2018/07/25(水) 22:28:36.05ID:QfwTkRmU
>>600
これで合ってますか?
最後の「これはInt型とInteger型のオートボクシング機能が働いている」のかちょっとまだ不安です
キャストはしてないけどオートボクシングが働いてたら意味がない?
このあたりがまだよく理解出来てないと思います
>>598 これをふまえると・・・

>>オートボクシング使わずに書くならこう!
>>int data = ((Integer)it.next()).intValue();

13行目(変更後
Iterator<Integer> it = arr.iterator();

18行目(変更後※
int data = it.next().intValue();//次の要素を取得します。

※ここまでやらないと意味が無いのでしょうか??
一応どちらも正常に結果出てますが内部的に違いがあるのか不安です?
0602デフォルトの名無しさん
垢版 |
2018/07/25(水) 22:37:49.97ID:GZRArLRs
>>601
オートボクシングはプリミティブ型とラッパークラスの変換を
自動で行う仕組みのことで

毎回、↓こう書くの面倒だよね
int data = it.next().intValue();

じゃあ↓こう書けるようにしよう
int data = it.next();

ということで導入されたものだから積極的に使ったら良いよ
0603デフォルトの名無しさん
垢版 |
2018/07/25(水) 22:44:09.05ID:QfwTkRmU
>>602
Iterator<Integer> it = arr.iterator();
int data = it.next();

オートボクシングは便利機能なので使ってOKで
.intValue();が自動的に省略されてるだけで結果は同じ

これで解決ってことですね!納得しました!
ありがとうございました
0604デフォルトの名無しさん
垢版 |
2018/07/25(水) 22:44:22.96ID:+qk7Pgth
だね
Integerからintへの変換ではインスタンス生成されないし
intからIntegerへの変換でも数字が小さければインスタンスは生成されない
インスタンス生成を抑えるために小さな数字はあらかじめIntegerオブジェクトが作られていて使い回されるようになっているから
値オブジェクトみたいな感じ

コスト気にするよりオートボクシングを積極的に使って可読性の高いコードを書こう
0605デフォルトの名無しさん
垢版 |
2018/07/25(水) 22:46:30.24ID:GZRArLRs
>>600
ジェネリクスで型を指定すれば、型が間違ってたときにコンパイルエラーに
なってすぐに気づくことができるのだけれども

ジェネリクスで型を指定しないと、型が間違っててもエラーにならないのよ
実行してデータが処理されないとコードが間違ってるかわからぬのよね
エラーが起きないデータもあったりするとデバッグが超大変

ジェネリクスが使えるときは型を指定して使ったが良いよ
0606デフォルトの名無しさん
垢版 |
2018/07/25(水) 22:56:34.68ID:QfwTkRmU
>>604-605
>>コスト気にするよりオートボクシングを積極的に使って可読性の高いコードを書こう
>>ジェネリクスが使えるときは型を指定して使ったが良いよ

質問で丁寧に回答していただきさらにアドバイスまでいただき感謝です!
勉強になりますありがとうございます!
0607デフォルトの名無しさん
垢版 |
2018/07/26(木) 00:12:38.71ID:5ROtQy7H
>>589
それ原因が分かったぞ。(勘のいい奴なら既にわかっていると思うが)。

そのブログのページのソースのこう表示されてる個所あるだろ。

Iterator it = arr.iterator();

この部分の HTML のソースを見てみたらこうなってた。

Iterator<Integer> it = arr.iterator();

しかしこの通りに表示させたいなら HTML 文書の中ではこう書かねばならない。

Iterator&lt;Integer&gt; it = arr.iterator();

他の同じような記述の個所はこういう変換をやっているのにこの部分だけ忘れており
<Integer> 部分がブラウザによって HTML のタグと解釈されて丸ごと表示されない
状態になっていた、ということ。
0609デフォルトの名無しさん
垢版 |
2018/07/26(木) 01:12:56.68ID:3Q0DG2FF
>>607
よく見つけられましたね凄いです!
どなたかがブログへご指摘されてくださったようで確認しようと再度HP確認したら既に修正されていました!
あまりの速さに2度驚きました

この質問スレにもブログにも勉強するのにとても助かっています
いつもありがとうございます
0611デフォルトの名無しさん
垢版 |
2018/07/26(木) 13:20:41.96ID:EM3EzxKL
    ./__.))ノヽ    
    .|ミ.l _  ._ i.)    わしが指摘した
   (^'ミ/.´・ .〈・ リ    
    .しi   r、_) |            ______
     |  `ニニ' /             |  | \__\___
  ___.ノ `ー―i´             |  |   |= |iiiiiiiiiii|
/⌒ヽ  \____/\            |  |   | =. | !!!!!!!|
|   ヽ____| \__. __    |  |   |三 |_「r.、
|  //     // ̄.\ //⊃ヾ)   |__|_/(  ) ̄ ))
ヽ ______//r_/| |.||⌒ヽ〜〔 ̄ ̄! ̄ ̄ ̄/ ̄ ̄\((
0612デフォルトの名無しさん
垢版 |
2018/07/26(木) 20:19:44.88ID:l6j0Y1pF
定義されてるディレクトリ配下のログが誰かに開かれてたら何もしないって処理作りたいんですけど、ファイルが誰かから開かれてるかを調べる方法ありますか?
0613デフォルトの名無しさん
垢版 |
2018/07/26(木) 20:22:42.75ID:l6j0Y1pF
古くなったログの削除の為に使用するためです
0614デフォルトの名無しさん
垢版 |
2018/07/26(木) 20:39:32.04ID:9i/IJhFr
自分でそのファイルを読み取り排他で開いてみるしかない
失敗したら他のプロセスがオープンしているということ

排他(副作用)なしでファイルのロック状態を知る方法はない
0615デフォルトの名無しさん
垢版 |
2018/07/26(木) 21:15:30.96ID:l6j0Y1pF
>>614
ありがとうございます。
明日試してみます!
0617デフォルトの名無しさん
垢版 |
2018/07/27(金) 02:20:59.11ID:O4NPrPXG
>>612
Linux の場合は fuser コマンドを使うと指定のファイルをオープンしているプログラムのプロセスIDが分かる。
何も出力がなければ開いているプロセスはない。

他のUNIX系OSにもこのコマンドはあるかも知れない。Windows の WSL にはこのコマンドはあった。

その他のOSではどうやるか知らないが、もし fuser コマンドがあるのならそれを使えば同じようにできるんじゃないかと思う。

Windows の場合は他のプロセスが開いている最中にリネームしようとするとエラーになるそうなのでこれを利用するという手があるようだ。
但し同じ方法はOSが違ったら使えない(例えばLinuxやUNIX系OSでは使えない。WSLはわからない)。
https://code.i-harness.com/ja/q/153800
0618デフォルトの名無しさん
垢版 |
2018/07/27(金) 06:07:34.18ID:br8yoTOu
paiza.ioってローカルPCのファイルやフォルダ操作するコードは実行出来ないですか?
0619デフォルトの名無しさん
垢版 |
2018/07/27(金) 12:15:33.71ID:4+ImbG1U
>>614
ログを開くアプリケーションによってはロック状態を認識できませんでした。
FileChannelクラスのtryLookメソッドを使いました。
OSがcentosでLibreOfficeで開いてるときはロック状態でしたが、geditで開いたときはロックされてなかったです。
何か初心者がおかしやすいミスとかってありますかね。
もう諦めてるんですがgeditが特殊なんですかね
0620デフォルトの名無しさん
垢版 |
2018/07/27(金) 12:16:37.86ID:4+ImbG1U
gedit以外のテキストエディタでも同じでしたね
ロックの確認できません。
0621デフォルトの名無しさん
垢版 |
2018/07/27(金) 12:58:52.13ID:ki81FzEq
普通はしないよ。
一々ロックしてたら、たとえばGitなんか阿鼻叫喚の地獄になる。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況