★★Java質問・相談スレッド182★★
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語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質問・相談スレッド181★★
https://mevius.5ch.net/test/read.cgi/tech/1518252580/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured テキスト検索すらできない実力でリバースエンジニアリングできると思ってるの?
煽りじゃないよ 指定した全部のファイルから
メソッドだろうが修飾子だろうが全部の文字列検索してるツールとかってないの?
javaDecompiler使ってるんだけど、なぜか修飾子検索してくんないから全く使い物にならない 普段プログラム書くのに使ってるツールにgrep機能が付いてないの? Androidのアプリならmainメソッド探しても仕方ないよ。
mainメソッドはアプリ側でなくてAndroidのシステム側にあるから。
(って話はすでに>>760が書いてくれてるんだけど)
というか、解析したいアプリがどんなものかわからないけど、
- Native Activityで実装されていればdexファイルではなくsoになってる
- Unityとかで開発されていれば実質的なアプリ本体はC#なりで実装されている
とか普通にあるんで、必ずしもdexをclassにしてデコンパイルすれば中身見放題ってわけじゃないです。 わかりました。
どうやらそのようです。
soファイルありました。
どうもありがとうございました。 詳しく教えてくれてありがとうございました。
ggったら全く同じ事が書いてありました。 >>762
Javaの場合、mainという名前のメソッドはテスト用にどのクラスでもそれぞれ書いても良いとされている。
Androidの場合、Activityを継承したクラスに所属している main という名前のメソッドからプログラムが開始される。
public指定されて外にexportされているクラスの名前を XXX とすると、そのクラスを書くソースファイルの名前は、XXX.javaとなる。
XXX.javaをコンパイルするとXXX.classになる。
本物のJavaは、XXX.classをまとめたものが、*.jarであるが、Androidの場合は、まず、*.classが*.dexに変換された後、さまざまなファイルとアーカイブされて*.aptになる。 >>781
すまん。Activityの場合は、main()ではなく、onCreate()メソッドだったかも知れん。
Androidの場合でも、dexコマンドで直接起動するようなCUIプログラムの場合は、main()でよかったと思う。
ただし、Javaの場合は外部関数がないので当たり前かもしれないが、このmainは、C/C++のような外部関数ではなく、メンバ関数。 >>781
*.aptじゃなく、*.apk。
dexも細かい関係性は忘れた。 ActivityじゃなくてApplicationだ。
答える方もわかってないしスレ違いだし、いい加減向こうでやれや。 Javaの有償化について教えてください
PC内に入っているものは「Java SE Development kit 8」なのですが
これでアプリ作って公開したら有償ですか?
Kotlin使っても有償になるのでしょうか? Javaをやろうとするやつは総じてバカなのか? それともこのスレだけなのか?
最近pythonやろうとしてるやつも大概バカばっかだがここはそれ以上 私思うんです
他のクラスに変数を受け渡すとき
例えばclass1からd=class2(a,b,c);みたいにひとつずつ変数を渡さないで
d=class2(this);にすればいいと思うんです
私思うんです >>769
はい、foobarです
これって専用なのですね?
専門のページで質問してみます
有難うございました >>787
モジュールの結合度について学び今後意識していくとよいでしょう
密結合になると変更に弱くなります
弱くなります 初質問させていただきます、JAVA初心者です。
Javaにて簡易的なチャットの実装を試みています。
基本部分の仕様は以下の通りです。
・ソースコードはサーバ側プログラムとクライアント側プログラムの2つ
・チャット参加者数は最大5名とし、参加時には他の参加者に「***さんが加わりました」といったメッセージが表示されるようにする。
・参加者は好きなタイミングでメッセージを送信できるようにする。
・他の参加者からのメッセージはサーバが送信してきたタイミングで受信して画面上に表示するようにする。
・他の参加者が抜けた(切断した)場合には、「***さんが抜けました」といったメッセージが表示されるようにする。
現在、サーバ・クライアント間の通信確立までは実装できています。
考え方、実装例をご教授いただけると幸いです。
お手数おかけしますが、ご助力ください。 今、新規開発のFWは選定するとSpring1択になる?
PlayはScalaの方に行ったしStruts2は避けられてるし。
マイクロフレームワークはポコポコ出てきてるけどさ。 >>794
SpringとSpring bootの区別はできているのか? >>792
0から手を動かして作るRailsチャットアプリ【チュートリアル】
https://www.youtube.com/watch?v=WCsgcp5dg7M
とだこうきの動画。
通信には、WebSocket を使ってる
他には、Node.js, Electron でも作れるかも なんでinterface作ってクラス名にimplつけた実装クラス作るの?最初からクラスだけじゃダメなの? >>797
並行作業のスケジュールの都合により、使われる方のクラスを作る前に使う方のクラスを先に作る必要がある場合のためだよ。
使われる方のinterfaceさえ定義しとけばImplがまだ無くても使う方を作れるでしょ。
現実にはこのような逆転した作業は極めて非効率で、たいてい後で不整合が起きて無駄になる。
でもジャップランドのSEはプログラマの稼働率を下げないためにそうせざるを得ないの。 >>798
ありがとうございます。
並行作業のため、理解です。でも本当にそれだけなのでしょうか?interfaceが書ける時点で引数と戻り値は決まっているはずなので、最初からクラスを書いてダミーの戻り値を返すようにしておくのと変わらない気がします。 >>800
よい質問だ。
SE様に作業完了の確認を貰って深夜残業を切り上げるには、当然、作ったものを単体テストしなきゃいけない。
でも使われる側がnull返すか何もしないだけのダミー実装じゃ普通に考えてテスト通るわけない。
どうするか?自分で都合のいい実装をでっち上げてそれを代わりに使うんだよ。
この手法は脳内彼女を相手に恋愛の練習をしているようなもので、どれだけ無駄かは容易に想像できるだろう。
態々interfaceを通さなくても脳内彼女の実装を対象クラスに直接書けばいいじゃないかと思うかもしれないが、
そうするとA君の脳内彼女とB君の脳内彼女が同一人物なのに違う実装になってしまって衝突したり、
いざ本物を実装しようとしたときに既に変なオナニー実装があって混乱するなど不都合が生じる。
ちなみに実は自動テストの都合という面もあるのだが、ドカタITではそんなものはファンタジーだから気にしなくてよい。 int a=10;
a=a+1
System.out.println(a); >>800
決まった名前のメソッドを実装させるため。 >>800
違う実装を後からセットできるじゃない。 >>804
典型的な「不必要な抽象化」だね
〇〇Implなんて名前の時点で、ほぼ間違いなく実装の差し替えはテスト目的以外には行われないよ Goなんかは言語のコンセプトとして「実際に必要になる前の抽象化は糞」と(暗にJavaを指して)言ってるね
その通りだと思う Goを設計したのはUnixの開発者たちだからねー
Unixはできるだけグルーコードを薄くすることで移植しやすく堅牢で保守しやすいシステムになった
Javaもそうしたが良いのかもわからんね >>805
そう?Swingの見た目変えるのとかで使ってない?
その他ライブラリーでOSや環境の違いを吸収する所とか。 >>811
君はSwingを作っているのか?
俺も元々独学だったからよくわかるんだが、独学プログラマは不特定多数向けのプロダクトしか手本がないから、
ユースケースを特定せずに一般的や抽象化を行うことを必須と思い込みがちなんだよ
現実のアプリケーションプログラミングにおいては、一般に、極力絞り込んだ必要最低限のコードを書くほうが継続的な開発が容易になる OSや環境の違いを吸収するコンクリートクラスはOSや環境ごとの名前になるはずで、Implなんて無色透明な名前にはならないよ
それにテストだけならモックアップを動的生成させればいい
フレームワークと実装を分けたいときとか、Implが好ましい状況もあるけど、インターフェースを将来のため柔軟さのためにと増やすのはYAGNI原則とKISS原則に反する 典型的なJava信者のご登場。
こだわっているところがズレまくり。 実際、開放閉鎖原則がまともに機能してる現場なんか存在するんだろうか
経験上、むやみやたらとinterfaceが定義されててもそれらがポリモーフィズムに活用されることはほぼ無いし、
ほとんどの修正は既存の具象クラスに対して直接加えられる
日本のIT土方のレベルが低いとかそういう話ではなく、自社サービスでも海外のOSSでも同じだ 結局インターフェースごと差し替えるから意味内わかるわー 狂ったJava信者は仕様を満たすことよりもコードにこだわり、いつまでたっても物ができあがらない。
保守性が高いと自信満々だったのに、いざ保守になると面倒なロジックになっていて変更に時間がかかる。
最初にリリースしたものを最適化しすぎる傾向があって、使用が変わるたびにたくさんコードを修正しなくてはいけなくなる。
保守性が高いコードとは、少しダサい感じのコードなのに、この現実を受け入れられない。 >>817
>保守性が高いコードとは、少しダサい感じのコード
なるほど、そうなんですか… HttpURLConnection使ってjson文字列をGETで送信したい
bodyになにか書き込むと勝手にGET通信じゃなくて
POST通信に書き換わってしまうんだがどうすればGETのままbodyに書き込める? そもそもHTTPの仕様上、どうやってGETでbodyが送れると? どんだけでかいデータか知らんがurlエンコードしてクエリにセットすりゃいいんじゃね URL のクエリー部分に、JSON を入れる人は、いないw
普通に、キー・値で書け! 以下は、VSCode の拡張機能、REST Client のサンプルだけど、
たぶん、JSON は、POST しかないと思う
以下を、test.http として保存して、
URL を、http://localhost:8888 などに変えて、REST Client でやってみれば?
GET https://example.com/comments/1 HTTP/1.1
###
GET https://example.com/topics/1 HTTP/1.1
###
POST https://example.com/comments HTTP/1.1
content-type: application/json
{
"name": "sample",
"time": "Wed, 21 Oct 2015 18:27:50 GMT"
} publicとかprevateとかつける意味あるの?
メンドウクサイんですけど >>828
YOU、全部グローバル変数にしちゃいなYO! Ruby でやってみた!
標準のWEBrick サーバーで、>>827
のJSON を、POST で受け取って、そのまま返信する
require 'webrick'
require 'json'
srv = WEBrick::HTTPServer.new( {
:BindAddress => '127.0.0.1', :Port => 8888 } )
srv.mount_proc( '/' ) do |req, res|
res[ "content-type" ] = "text/plain"
# p JSON.parse( req.body ) # JSON を、Ruby Object に変換する事もできる
res.body = req.body
end
Signal.trap( :INT ){ srv.shutdown } # Ctrl+C で終了
srv.start >>828
お前みたいなバカは全部privateがお似合いw String yyyyをSQL用にDate変換するにはどうしたらいいんだ…?
調べてもyyyy/mm/ddの記事ばかり Ruby on Rails は、抽象的なtimestamps 型を使う。
それがDB のMigration で、各DB の時刻型になる!
時刻は、日付型も含んでいる。
0時0分0秒にすればよい
UTC 時刻で保存しておけば、各国のローカルタイムにも変換できる jdkが含まれてると有償になるみたいですがwindowsならアプリケーションの一覧に出てくるでしょうか?
java使ってるっぽいアプリがあるのですがjdkが入ってるか入ってないか調べる方法が解りません >>832
var localDate = LocalDate.of(Integer.parseInt("2019"), 1, 1);
var sqlDate = java.sql.Date.valueOf(localDate);
System.out.println(sqlDate); var localDate = Year.parse("2019").atDay(1);
と書くとちょっとだけすっきり finalって何のためにあるの?
変更できない変数なら変数にしなきゃいいじゃん
ばかみたい >>840
必要になったときに計算で値を算出できる、かつ、計算コストが小さいならメソッドにしても良いかも知れない 変数を使用するときは、値を得るタイミングと値を使用するタイミングが異なるときであったり、計算コストが高いときであったりするから、変数を消すのはそれなりに大変 >>840
数値とかだったりするとぱっと見でどういった意味の値かわかりづらいやろ
同じ意味で使ってる値の変更するときも安全 >>840
定数に使える。
同じ意味でプログラムの複数箇所でその変数を使っている場合、変更時に変数への初期化箇所を直すだけで全ての変更が終わる。
直接数値などを書いた場合はプログラムの関連する箇所の全ての修正が必要となり修正ミスや修正忘れによるバグの発生率が増える。 定数でしか使わないのは勿体ない
immutable programmingについて学ぶとfinalの価値が高いことに気付くよ
Javaだとfinal打つのが面倒で省きがちだけどね >>840
finalクラス、finalメソッド、final変数とそれぞれ役割がある
変数だけについて言うとfinalを使うのは定数を定義したい場合とイミュータブルな変数を定義したい場合
イミュータブルな変数とは初期化後は変更されない事がコンパイラ等によって保証された変数
オブジェクトが生成されてから破棄されるまで変数の値が不変である事が保証されると
意図しない変更を防止(バグ回避)できたり、同時実行制御ロジックをシンプルにできたり、IDではなく値の同値性で比較すべきオブジェクトを表現できたり、変更されない事を前提とした最適化ができたりと様々なメリットがある
Kotlinのvar, val, constのようにモダンな言語はほぼ全てミュータブルな変数、イミュータブルな変数、定数の3つを明確に使い分けられるように設計されている そうだな。
それと、こういう初心者定番の質問と回答をまとめたwikiとか作っとくと良いのではないか?
Javaだと既にあるかな? 理屈はわかるが実践としてfinal使う人いるか?
いたら連れてきてくれ マルチスレッドのプログラム書くときとか
ラムダ式使ったり匿名クラス使ったりするときにfinal使うっしょ
使いまくりっすよ
まあ最近のJavaはコンパイラが自動的にfinalにしてくれたりするけど >>851
君だってライブラリ側でfinal指定の引数の関数を使うときは使うだろう? おれはメンバ変数ではfinalは隙あらば書きたい
引数とローカル変数では書きたくない
5+1文字打つことのコスパが全然違う
immutableクラスを作るときに凡ミス防止を助けてくれるし
ほかの開発者が後で破壊的な変更をしてしまわないようにアピールする効果も狙える
実践で使わないなんて言えるのはimmutableの便利さにまだ実感をもってないからだよ
もしJavaのStringがStringBufferだったら阿鼻叫喚だったろうし
Java8でDateとCalendarが残念な過去のものとされたのもimmutableが理由のひとつとしてJSRで挙げられてる final プリミティブ=イミュータブル←わかる
final ミュータブル←それただのリードオンリーや幸子 final イミュータブルにすればいい
final ミュータブルだったとしてもコンストラクタでコピーして不用意なgetterを付けずカプセル化するなら結果的に同じ 節子、それを言うなら幸子やない。それ年末に凄い衣装で歌う人や >>857
蛍の墓なんて、上映当時は暗くて嫌だったのでトトロしか観なかったんだよね… final int 年齢;
public 彼女(int 年齢) {
this.年齢 = 年齢;
}
var 俺の嫁 = new 彼女(18);
こう書くといつまでも年齢が変わらない彼女が手に入る
finalで保証されているから安心ずっとピチピチギャルじゃよ
ローカル変数の俺の嫁にfinalは書かない
再代入は自由だから新作や来期が来たら替えてもいいぞ
定数(static)ではないのでこうも書ける
var 俺のハーレム = List.of(new 彼女(25), new 彼女(12), /* 以下略 */);
※ただし彼女は2次元限定だ 俺のハーレム.stream().forEach(嫁 -> 嫁.ほにゃらら(俺));
この場合、"俺" は final または effectively final でなければならない、
こういうことですね 副作用を口実に何も与えられず使い捨て
そして最後はGC行き
←GC|
. ̄.|| ̄ オレ氏┗(^o^ )┓三
|| ┏┗ 三
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ EditTextのGONEを使っても大丈夫ですか? 外部apiを使うんですが
apiキーをコードに記述して直接apiを叩いてクライアントだけで完結させるか
サーバーにapiキーだけ置いてそれを取得する形にするか
サーバーがapiを使った処理をやって結果だけ返すようにするか
どれがいいですかね? ■ このスレッドは過去ログ倉庫に格納されています