X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (アウアウウー Sa73-AAco [106.132.135.194])
垢版 |
2018/11/19(月) 11:37:06.10ID:C68x9bSia

プログラミング言語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
0775デフォルトの名無しさん (ワッチョイ a301-tgR8 [221.33.176.3])
垢版 |
2020/01/11(土) 11:18:07.93ID:qa2D3VNz0
うん思ってる
0776デフォルトの名無しさん (ワッチョイ a301-tgR8 [221.33.176.3])
垢版 |
2020/01/11(土) 11:42:50.55ID:qa2D3VNz0
指定した全部のファイルから
メソッドだろうが修飾子だろうが全部の文字列検索してるツールとかってないの?
javaDecompiler使ってるんだけど、なぜか修飾子検索してくんないから全く使い物にならない
0778デフォルトの名無しさん (ワッチョイ 55da-lZna [220.144.30.68])
垢版 |
2020/01/11(土) 13:39:02.07ID:5ateKhzY0
Androidのアプリならmainメソッド探しても仕方ないよ。
mainメソッドはアプリ側でなくてAndroidのシステム側にあるから。
(って話はすでに>>760が書いてくれてるんだけど)

というか、解析したいアプリがどんなものかわからないけど、
- Native Activityで実装されていればdexファイルではなくsoになってる
- Unityとかで開発されていれば実質的なアプリ本体はC#なりで実装されている
とか普通にあるんで、必ずしもdexをclassにしてデコンパイルすれば中身見放題ってわけじゃないです。
0779デフォルトの名無しさん (ワッチョイ a301-tgR8 [221.33.176.3])
垢版 |
2020/01/11(土) 14:48:30.35ID:qa2D3VNz0
わかりました。
どうやらそのようです。
soファイルありました。
どうもありがとうございました。
0780デフォルトの名無しさん (ワッチョイ a301-tgR8 [221.33.176.3])
垢版 |
2020/01/11(土) 14:49:56.63ID:qa2D3VNz0
詳しく教えてくれてありがとうございました。
ggったら全く同じ事が書いてありました。
0781デフォルトの名無しさん (ワッチョイ 2361-6Ucs [123.230.238.221])
垢版 |
2020/01/11(土) 15:29:29.31ID:MXX/X4cZ0
>>762
Javaの場合、mainという名前のメソッドはテスト用にどのクラスでもそれぞれ書いても良いとされている。
Androidの場合、Activityを継承したクラスに所属している main という名前のメソッドからプログラムが開始される。
public指定されて外にexportされているクラスの名前を XXX とすると、そのクラスを書くソースファイルの名前は、XXX.javaとなる。
XXX.javaをコンパイルするとXXX.classになる。
本物のJavaは、XXX.classをまとめたものが、*.jarであるが、Androidの場合は、まず、*.classが*.dexに変換された後、さまざまなファイルとアーカイブされて*.aptになる。
0782デフォルトの名無しさん (ワッチョイ 2361-6Ucs [123.230.238.221])
垢版 |
2020/01/11(土) 15:35:49.54ID:MXX/X4cZ0
>>781
すまん。Activityの場合は、main()ではなく、onCreate()メソッドだったかも知れん。
Androidの場合でも、dexコマンドで直接起動するようなCUIプログラムの場合は、main()でよかったと思う。
ただし、Javaの場合は外部関数がないので当たり前かもしれないが、このmainは、C/C++のような外部関数ではなく、メンバ関数。
0783デフォルトの名無しさん (ワッチョイ 2361-6Ucs [123.230.238.221])
垢版 |
2020/01/11(土) 16:27:06.17ID:MXX/X4cZ0
>>781
*.aptじゃなく、*.apk。
dexも細かい関係性は忘れた。
0784デフォルトの名無しさん (ワッチョイ fd61-alJZ [112.136.82.104])
垢版 |
2020/01/11(土) 17:33:12.71ID:lHngeS9z0
ActivityじゃなくてApplicationだ。
答える方もわかってないしスレ違いだし、いい加減向こうでやれや。
0785デフォルトの名無しさん (アウアウウー Sa19-JQ6m [106.154.130.141])
垢版 |
2020/01/11(土) 19:55:11.85ID:Dn3xIqPda
Javaの有償化について教えてください
PC内に入っているものは「Java SE Development kit 8」なのですが
これでアプリ作って公開したら有償ですか?
Kotlin使っても有償になるのでしょうか?
0790デフォルトの名無しさん (アウアウウー Sa19-htaX [106.132.121.116])
垢版 |
2020/01/12(日) 19:22:47.94ID:T1GQsdFba
弱くなります
0791デフォルトの名無しさん (ワッチョイ 05b0-H9u6 [180.46.73.208])
垢版 |
2020/01/12(日) 19:44:41.84ID:N/CHSK/80
>>786
何このバカw
どっから湧いたんだよ
0792デフォルトの名無しさん (ワッチョイ db02-ErPi [119.106.128.249])
垢版 |
2020/01/13(月) 02:41:58.54ID:D6MgPK0q0
初質問させていただきます、JAVA初心者です。

Javaにて簡易的なチャットの実装を試みています。
基本部分の仕様は以下の通りです。

・ソースコードはサーバ側プログラムとクライアント側プログラムの2つ
・チャット参加者数は最大5名とし、参加時には他の参加者に「***さんが加わりました」といったメッセージが表示されるようにする。
・参加者は好きなタイミングでメッセージを送信できるようにする。
・他の参加者からのメッセージはサーバが送信してきたタイミングで受信して画面上に表示するようにする。
・他の参加者が抜けた(切断した)場合には、「***さんが抜けました」といったメッセージが表示されるようにする。

現在、サーバ・クライアント間の通信確立までは実装できています。

考え方、実装例をご教授いただけると幸いです。

お手数おかけしますが、ご助力ください。
0795デフォルトの名無しさん (ワッチョイ 1d5f-pWSs [106.72.163.96 [上級国民]])
垢版 |
2020/01/13(月) 18:13:43.46ID:PNIqRh180
>>794
SpringとSpring bootの区別はできているのか?
0797デフォルトの名無しさん (ササクッテロラ Spf1-gopL [126.193.125.144])
垢版 |
2020/01/14(火) 14:29:55.91ID:m1u1XKORp
なんでinterface作ってクラス名にimplつけた実装クラス作るの?最初からクラスだけじゃダメなの?
0798デフォルトの名無しさん (ドコグロ MM13-JyDu [119.240.142.88])
垢版 |
2020/01/14(火) 14:45:34.94ID:/8RfG7cVM
>>797
並行作業のスケジュールの都合により、使われる方のクラスを作る前に使う方のクラスを先に作る必要がある場合のためだよ。
使われる方のinterfaceさえ定義しとけばImplがまだ無くても使う方を作れるでしょ。
現実にはこのような逆転した作業は極めて非効率で、たいてい後で不整合が起きて無駄になる。
でもジャップランドのSEはプログラマの稼働率を下げないためにそうせざるを得ないの。
0800797 (ササクッテロラ Spf1-gopL [126.193.125.144])
垢版 |
2020/01/14(火) 19:29:37.55ID:m1u1XKORp
>>798
ありがとうございます。
並行作業のため、理解です。でも本当にそれだけなのでしょうか?interfaceが書ける時点で引数と戻り値は決まっているはずなので、最初からクラスを書いてダミーの戻り値を返すようにしておくのと変わらない気がします。
0801デフォルトの名無しさん (ドコグロ MM13-JyDu [119.240.142.88])
垢版 |
2020/01/14(火) 20:09:08.05ID:/8RfG7cVM
>>800
よい質問だ。
SE様に作業完了の確認を貰って深夜残業を切り上げるには、当然、作ったものを単体テストしなきゃいけない。
でも使われる側がnull返すか何もしないだけのダミー実装じゃ普通に考えてテスト通るわけない。
どうするか?自分で都合のいい実装をでっち上げてそれを代わりに使うんだよ。
この手法は脳内彼女を相手に恋愛の練習をしているようなもので、どれだけ無駄かは容易に想像できるだろう。
態々interfaceを通さなくても脳内彼女の実装を対象クラスに直接書けばいいじゃないかと思うかもしれないが、
そうするとA君の脳内彼女とB君の脳内彼女が同一人物なのに違う実装になってしまって衝突したり、
いざ本物を実装しようとしたときに既に変なオナニー実装があって混乱するなど不都合が生じる。
ちなみに実は自動テストの都合という面もあるのだが、ドカタITではそんなものはファンタジーだから気にしなくてよい。
0803デフォルトの名無しさん (ワッチョイ 455f-0x+Z [106.72.163.96 [上級国民]])
垢版 |
2020/01/16(木) 00:49:53.70ID:aFCqpdJ/0
>>800
決まった名前のメソッドを実装させるため。
0804デフォルトの名無しさん (アウアウウー Sa21-SNGL [106.132.129.104])
垢版 |
2020/01/16(木) 21:21:25.94ID:zJukF7BCa
>>800
違う実装を後からセットできるじゃない。
0806デフォルトの名無しさん (ワッチョイ fb01-C1bT [111.90.14.57])
垢版 |
2020/01/16(木) 23:07:38.38ID:Z0H9lpow0
わかるわーw
0808デフォルトの名無しさん (ワッチョイ fb01-C1bT [111.90.14.57])
垢版 |
2020/01/16(木) 23:39:59.75ID:Z0H9lpow0
Goを設計したのはUnixの開発者たちだからねー
Unixはできるだけグルーコードを薄くすることで移植しやすく堅牢で保守しやすいシステムになった
Javaもそうしたが良いのかもわからんね
0809デフォルトの名無しさん (ワッチョイ e3ad-nP71 [27.139.77.105])
垢版 |
2020/01/17(金) 00:36:40.53ID:VVaP2eJK0
Kotlin もよろしく
0811デフォルトの名無しさん (アウアウウー Sa21-SNGL [106.132.131.54])
垢版 |
2020/01/17(金) 09:07:32.24ID:4YEO+2r4a
>>805
そう?Swingの見た目変えるのとかで使ってない?
その他ライブラリーでOSや環境の違いを吸収する所とか。
0812デフォルトの名無しさん (ドコグロ MM41-mgaX [122.130.225.133])
垢版 |
2020/01/17(金) 10:04:29.73ID:0sb73h15M
>>811
君はSwingを作っているのか?
俺も元々独学だったからよくわかるんだが、独学プログラマは不特定多数向けのプロダクトしか手本がないから、
ユースケースを特定せずに一般的や抽象化を行うことを必須と思い込みがちなんだよ
現実のアプリケーションプログラミングにおいては、一般に、極力絞り込んだ必要最低限のコードを書くほうが継続的な開発が容易になる
0813デフォルトの名無しさん (オッペケ Sr19-uB0D [126.34.59.159])
垢版 |
2020/01/18(土) 00:55:57.15ID:6oxaDxGzr
OSや環境の違いを吸収するコンクリートクラスはOSや環境ごとの名前になるはずで、Implなんて無色透明な名前にはならないよ
それにテストだけならモックアップを動的生成させればいい
フレームワークと実装を分けたいときとか、Implが好ましい状況もあるけど、インターフェースを将来のため柔軟さのためにと増やすのはYAGNI原則とKISS原則に反する
0814デフォルトの名無しさん (ワッチョイ 455f-0x+Z [106.72.163.96 [上級国民]])
垢版 |
2020/01/18(土) 01:00:29.14ID:vFXF5Tw00
典型的なJava信者のご登場。

こだわっているところがズレまくり。
0815デフォルトの名無しさん (アウアウエー Sa13-mgaX [111.239.153.45])
垢版 |
2020/01/18(土) 01:23:04.05ID:AhPxC9uwa
実際、開放閉鎖原則がまともに機能してる現場なんか存在するんだろうか
経験上、むやみやたらとinterfaceが定義されててもそれらがポリモーフィズムに活用されることはほぼ無いし、
ほとんどの修正は既存の具象クラスに対して直接加えられる
日本のIT土方のレベルが低いとかそういう話ではなく、自社サービスでも海外のOSSでも同じだ
0817デフォルトの名無しさん (アウアウクー MM99-0x+Z [36.11.225.57 [上級国民]])
垢版 |
2020/01/18(土) 13:25:24.64ID:0gCd/F0VM
狂ったJava信者は仕様を満たすことよりもコードにこだわり、いつまでたっても物ができあがらない。

保守性が高いと自信満々だったのに、いざ保守になると面倒なロジックになっていて変更に時間がかかる。

最初にリリースしたものを最適化しすぎる傾向があって、使用が変わるたびにたくさんコードを修正しなくてはいけなくなる。

保守性が高いコードとは、少しダサい感じのコードなのに、この現実を受け入れられない。
0818デフォルトの名無しさん (ワッチョイ fb01-C1bT [111.90.14.57])
垢版 |
2020/01/18(土) 14:47:55.78ID:meR2Lc880
>>817
わかるわー
0819デフォルトの名無しさん (ワッチョイ fb01-C1bT [111.90.14.57])
垢版 |
2020/01/18(土) 14:48:34.90ID:meR2Lc880
みんな同じこと思ってるんだなー
0823デフォルトの名無しさん (ワッチョイ 4502-VyS5 [106.167.99.164])
垢版 |
2020/01/18(土) 23:06:18.65ID:Ov2B9gue0
HttpURLConnection使ってjson文字列をGETで送信したい
bodyになにか書き込むと勝手にGET通信じゃなくて
POST通信に書き換わってしまうんだがどうすればGETのままbodyに書き込める?
0827826 (ワッチョイ e32c-Sfrr [219.162.234.204])
垢版 |
2020/01/19(日) 06:36:58.45ID:qcodQ+dh0
以下は、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"
}
0830826 (ワッチョイ e32c-Sfrr [219.162.234.204])
垢版 |
2020/01/19(日) 12:43:27.77ID:qcodQ+dh0
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
0832デフォルトの名無しさん (ササクッテロル Sp41-hE/J [126.233.105.215])
垢版 |
2020/01/22(水) 20:00:42.92ID:Tupj1TxXp
String yyyyをSQL用にDate変換するにはどうしたらいいんだ…?
調べてもyyyy/mm/ddの記事ばかり
0836デフォルトの名無しさん (ワッチョイ 1b01-7vT5 [111.90.14.57])
垢版 |
2020/01/23(木) 07:28:23.50ID:cFfrxTRF0
>>832
var localDate = LocalDate.of(Integer.parseInt("2019"), 1, 1);
var sqlDate = java.sql.Date.valueOf(localDate);
System.out.println(sqlDate);
0846デフォルトの名無しさん (アウアウウー Sa9d-lBRq [106.132.128.243])
垢版 |
2020/01/29(水) 10:02:47.97ID:Ji+gdkxYa
>>840
定数に使える。

同じ意味でプログラムの複数箇所でその変数を使っている場合、変更時に変数への初期化箇所を直すだけで全ての変更が終わる。
直接数値などを書いた場合はプログラムの関連する箇所の全ての修正が必要となり修正ミスや修正忘れによるバグの発生率が増える。
0848デフォルトの名無しさん (ブーイモ MMcb-qSW8 [163.49.201.28])
垢版 |
2020/01/29(水) 11:16:39.32ID:Fo4vX5x5M
>>840
finalクラス、finalメソッド、final変数とそれぞれ役割がある

変数だけについて言うとfinalを使うのは定数を定義したい場合とイミュータブルな変数を定義したい場合

イミュータブルな変数とは初期化後は変更されない事がコンパイラ等によって保証された変数

オブジェクトが生成されてから破棄されるまで変数の値が不変である事が保証されると
意図しない変更を防止(バグ回避)できたり、同時実行制御ロジックをシンプルにできたり、IDではなく値の同値性で比較すべきオブジェクトを表現できたり、変更されない事を前提とした最適化ができたりと様々なメリットがある

Kotlinのvar, val, constのようにモダンな言語はほぼ全てミュータブルな変数、イミュータブルな変数、定数の3つを明確に使い分けられるように設計されている
0850デフォルトの名無しさん (アウアウウー Sa9d-lBRq [106.132.128.243])
垢版 |
2020/01/29(水) 12:16:25.17ID:Ji+gdkxYa
そうだな。

それと、こういう初心者定番の質問と回答をまとめたwikiとか作っとくと良いのではないか?
Javaだと既にあるかな?
0852デフォルトの名無しさん (ワッチョイ fb01-rcOU [111.90.14.57])
垢版 |
2020/02/01(土) 01:16:32.43ID:kZmU3WGD0
マルチスレッドのプログラム書くときとか
ラムダ式使ったり匿名クラス使ったりするときにfinal使うっしょ
使いまくりっすよ
まあ最近のJavaはコンパイラが自動的にfinalにしてくれたりするけど
0853デフォルトの名無しさん (ワッチョイ 13ad-e4+k [27.139.41.170])
垢版 |
2020/02/01(土) 02:35:49.24ID:SqAgZ26K0
>>851
君だってライブラリ側でfinal指定の引数の関数を使うときは使うだろう?
0854デフォルトの名無しさん (オッペケ Src5-W8VJ [126.193.159.24])
垢版 |
2020/02/01(土) 04:50:38.45ID:dcKIHlgcr
おれはメンバ変数ではfinalは隙あらば書きたい
引数とローカル変数では書きたくない
5+1文字打つことのコスパが全然違う

immutableクラスを作るときに凡ミス防止を助けてくれるし
ほかの開発者が後で破壊的な変更をしてしまわないようにアピールする効果も狙える

実践で使わないなんて言えるのはimmutableの便利さにまだ実感をもってないからだよ
もしJavaのStringがStringBufferだったら阿鼻叫喚だったろうし
Java8でDateとCalendarが残念な過去のものとされたのもimmutableが理由のひとつとしてJSRで挙げられてる
0863デフォルトの名無しさん (オッペケ Src5-W8VJ [126.193.159.24])
垢版 |
2020/02/01(土) 15:47:27.99ID:dcKIHlgcr
final int 年齢;
public 彼女(int 年齢) {
 this.年齢 = 年齢;
}

var 俺の嫁 = new 彼女(18);

こう書くといつまでも年齢が変わらない彼女が手に入る
finalで保証されているから安心ずっとピチピチギャルじゃよ

ローカル変数の俺の嫁にfinalは書かない
再代入は自由だから新作や来期が来たら替えてもいいぞ
定数(static)ではないのでこうも書ける
var 俺のハーレム = List.of(new 彼女(25), new 彼女(12), /* 以下略 */);

※ただし彼女は2次元限定だ
0866デフォルトの名無しさん (アウアウウー Sa9d-lBRq [106.132.128.127])
垢版 |
2020/02/03(月) 11:19:40.31ID:EEPHYlO9a
Kotlin もよろしく
0869デフォルトの名無しさん (スッップ Sd43-pG8F [49.98.131.21])
垢版 |
2020/02/11(火) 12:22:58.90ID:zPkn4No/d
外部apiを使うんですが
apiキーをコードに記述して直接apiを叩いてクライアントだけで完結させるか
サーバーにapiキーだけ置いてそれを取得する形にするか
サーバーがapiを使った処理をやって結果だけ返すようにするか
どれがいいですかね?
0872デフォルトの名無しさん (アウアウウー Sa09-6yOj [106.132.123.2])
垢版 |
2020/02/11(火) 17:51:44.15ID:ix+UlUL8a
ゴーンは逃亡しました。
0873デフォルトの名無しさん (アウアウウー Sa09-6yOj [106.132.123.2])
垢版 |
2020/02/11(火) 17:52:59.56ID:ix+UlUL8a
あ、リロード忘れて俺の書き込みもイミフに
■ このスレッドは過去ログ倉庫に格納されています

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