803:デフォルトの名無しさん
18/10/03 01:25:23.37 9ie+5iaR.net
質問です。
下記のコードで、
URLリンク(ideone.com)
出力が0と0の間で2行開いてしまっているのですが、これはなぜでしょうか?
System.out.printlnをSystem.out.printにすると空白は出ないのですが…。
804:デフォルトの名無しさん
18/10/03 01:59:25.15 VtwiWIya.net
区切り文字を{},の3文字にしてsplitしたからでしょ。
805:デフォルトの名無しさん
18/10/03 07:18:02.71 3B507mk5.net
>>767
空文字列が入ってるから、フィルタするなりで
URLリンク(paiza.io)
806:デフォルトの名無しさん
18/10/03 20:33:31.74 Yoi2jO2M.net
正規表現か書式を見直したほうがいいんじゃないの?
807:764
18/10/04 00:11:26.33 smFA2GkF.net
>>768
>>769
>>770
返信ありがとうございました。
また質問させて頂くかもしれませんが、よろしければその時もまたお願いします。
808:デフォルトの名無しさん
18/10/04 11:58:36.08 YAdWzVOj.net
URLリンク(acro-engineer.hatenablog.com)
>MyProtocolClientHandler extends ChannelInboundHandlerAdapter
Inbound 受信時に使用される処理
Outbound 送信時に使用される処理
という理解なんだけど、クライアント側のInboundはレスポンスを受信するときに動くということ?
でも送信時のコードが書かれてるようで、分からない。
NettyのInbound, Outboundとは?
809:デフォルトの名無しさん
18/10/04 13:51:17.62 k+Ofe9B1.net
Inbound:中国人の観光客
Outbound:日本人の海外旅行
810:デフォルトの名無しさん
18/10/04 14:09:27.89 YAdWzVOj.net
ああわかりました
channelActiveは返信等を受け付けれるような状態になった時に呼び出されて、
それはinbound,outbound関係無いってことですね
パイプラインのハンドラーというより、メッセージ送信の
コントローラー的なものがそこに書かれてるということですね
たまたまハンドラのイベントにそういう処理が書かれてる
811:デフォルトの名無しさん
18/10/06 11:51:41.21 mwcXVcDx.net
URLリンク(netty.io)
> intercept operations and also state updates
この部分どういう意味ですか?intercept operationとは?
DuplexHandlerはパイプライン上でどういう順序で実行されますか?
受信時と送信時で実行して欲しい順番が異なる場合どうすれば?
812:デフォルトの名無しさん
18/10/06 19:22:07.94 3cjxIhmP.net
Java SE API & ドキュメント
URLリンク(www.oracle.com)
Java11の日本語ドキュメントはいつごろ出てくるのでしょうか?
813:デフォルトの名無しさん
18/10/08 07:44:21.00 fU+WK0rO.net
bronzeの問題集やっててイライラしてきたんだけど、問題になるようなコードは基本的に書くなってことでいいんですよね?
&&||の右側にインクリメント演算子書いたから場合によって評価されないとかif文の中身1行しかないからカッコ省略したら読みづらくなってるとか
問題として出されるくらいヒューマンエラーを産みかねないってことでOK?
814:デフォルトの名無しさん
18/10/08 08:33:34.55 QRotEnod.net
読めるようになれってことじゃないの?
>&&||の右側にインクリメント演算子書いたから場合によって評価されない
例えばこれは、
if(a != null && a.get()>1)
こんな行があった時に2つ目の演算でNPE起きない事が保証されると分かれ、ということだろう
書くな、じゃないよ。こんなコードたくさんあるし、こう書かないと冗長になる
815:デフォルトの名無しさん
18/10/08 08:56:01.75 fU+WK0rO.net
>>778 演算子のほうはちゃんと意味考えて書けよってことですよね?って聞いたつもりだったんです、言葉足らずでした 評価されない場合使って簡潔に書くのはよくあることなんですかね 中身1文ブロックのカッコ省略のメリットがさっぱりわからないんですが見た目がすっきりするだけですかね……? どこ読んでもあえて推奨されてることがなくて、ブログのコメント欄とかはだいたいケンカになってるんでこれはあまり触れてはいけないアレなんでしょうか
817:デフォルトの名無しさん
18/10/08 08:58:46.13 QRotEnod.net
まあそれは簡単に言うと
開発時のソースコードはデバッグ出力の行があったりするんだけど
リリース時はデバッグ出力の行を文字列置換で一掃したりする。で、もし
if(...)
debugLog(...);
こういう行があったとして、debugLog(...);を置換で削除したら、エラーになる。
if(...){
debugLog(...);
}
これは置換しても大丈夫。
だから、括弧無しは処理部分を置換する事があるか、による
経験上置換するのはデバッグ系コードだけ
818:デフォルトの名無しさん
18/10/08 09:13:02.08 fU+WK0rO.net
書き換えるつもりがない1行のはカッコ省略で書くと読みやすい、あとあと置換するdebugLog(…)とかは消したときに空のブロックになるように{}書いとく、ってことでしょうか?
819:デフォルトの名無しさん
18/10/08 09:51:13.29 UTHfaM17.net
>>780
嘘をついてはいけない
デバッグ出力を置換で消す場合は ";" に置き換えれば良いので
{} の有無など関係ない
820:デフォルトの名無しさん
18/10/08 09:55:23.16 QRotEnod.net
>>782
それは気付いてなかったw
じゃあ括弧無しのデメリットは特に思いつかない
821:デフォルトの名無しさん
18/10/08 10:26:38.83 2rmJ0ycQ.net
>>777
落ち着け、深呼吸しろ
822:デフォルトの名無しさん
18/10/08 11:34:11.42 H/mp1NsO.net
>>777-779
&&・||の右側に、副作用があったら危険!
副作用とは、何かの状態を変えること
ぱっと見ただけでは、副作用が実行されるかされないのかが、わかりにくい。
右側に、副作用が無ければよいけど
if-else 文なんかより可読性が低いから、誤解しやすい
すべての言語で、言われている。
MISRA-C とか、C言語のルールでも、決められている
823:デフォルトの名無しさん
18/10/08 12:02:59.41 QRotEnod.net
副作用があるかもしれないから、という理由なら条件分岐関係無くない?
if(a == null)
return;
if(a.get()<=1)
return;
これでget()呼ぶのも副作用あるかもしれないよね?
824:デフォルトの名無しさん
18/10/08 12:20:29.15 tKqgyITq.net
>>786
別スレッドによって a が null にされてしまう可能性はあるな。だいたいの場合はそういうスレッドがないか、
またはあると分かっているならロックしてからアクセスするように作るから問題にならないんだろうけど。
825:デフォルトの名無しさん
18/10/08 12:26:37.42 QRotEnod.net
ん?こういう理解だけど。参照が渡されてるだけだから
別スレッドが参照を破棄しても関係ないぞ
func1(Object a){
if(a == null)
return;
a.get();//絶対にNPEが起きないマルチスレッド無関係
}
func2(Object a){
a = null;
}
826:デフォルトの名無しさん
18/10/08 12:29:19.11 r0dViXxq.net
そもそも式の中で副作用のある関数を呼び出すのは危険
&&や||は評価順序が決まってるからまだマシな方でそれ以外の演算子だと評価順序もどうなるかわからんし
827:デフォルトの名無しさん
18/10/08 12:32:49.91 QRotEnod.net
でも副作用がある関数はset,write,update,createとか大体それっぽい名前ついてるし
分かるでしょ?
というか情報処理はCRUDだからcreate,update,delete的な名前が必ずついてる
副作用を広くとらえればログ出力も副作用だけど、そういうのは問題無い
getは副作用無しか問題無い副作用のみ、CRUDのRに相当するものだから
だからコーディング規約を作るなら、CRUDを意識させるようなものであるべき�
828:ナ、 真理式でメソッドを呼び出すなとかいうわけわからん規約を作るべきではない CRUDのうちRのみ呼び出していい、とすべき
829:デフォルトの名無しさん
18/10/08 12:37:02.60 QRotEnod.net
ぶっちゃけCUDでも呼び出していい
結局、意味を捉えて間違えないように書けということでしかない
コーディング規約をどういじくってもそこから逃げれるわけじゃない
830:デフォルトの名無しさん
18/10/08 12:43:00.19 wqzMNkqt.net
if (a == 0 || b++ < 1) {
}
こういう書き方をすると一見bが常にインクリメントされるように誤解されやすいからやめとけよって言ってるだけでしょ。
831:デフォルトの名無しさん
18/10/08 12:48:22.90 QRotEnod.net
真理式に複数の演算があって、かつ一部に副作用があるとまずい、ってことか
832:デフォルトの名無しさん
18/10/08 13:19:09.60 H/mp1NsO.net
副作用・副作用完了点
評価順序・マクロ
MISRA-C でも、こういう間違いやすい所の、ルールは厳しい
833:デフォルトの名無しさん
18/10/08 14:53:07.06 tKqgyITq.net
>>788
それならないな。
残るは get() して 1 以下なのを検査した直後に別スレッドによって a の状態が変化して get() が返す値が変わるとかかな。
(そんなの想定の範囲内なら問題ないが)。
834:デフォルトの名無しさん
18/10/10 01:35:05.39 gneY7b7h.net
adopt openjdkのjdk11リリースされたじゃん。
URLリンク(adoptopenjdk.net)
LTSだぞ。
URLリンク(adoptopenjdk.net)
835:デフォルトの名無しさん
18/10/12 06:07:22.65 LkXNeCMg.net
Java 11のJREって無いんですか?
836:デフォルトの名無しさん
18/10/12 08:34:35.39 kCbZI2NA.net
クライアントJREは廃止された
今現在、要JREとして世に出ているアプリをエンドユーザーが実行する公式な方法は存在しない(自己責任で開発環境を入れるしかない)
今後のクライアントサイドJavaアプリの唯一の配布方法は、JDKに含まれるコマンドラインツールを使用して
プラットフォーム毎に実行環境とアプリを同梱した実行可能なパッケージを作ることである
クライアントサイドに関しては、もはやJavaはバイナリ互換ではない
OracleはクライアントサイドJavaを段階的に廃止しようとしており、新規には決して使ってはならない
837:デフォルトの名無しさん
18/10/12 09:00:21.36 U0bHLz7N.net
>>796
当てにならんよこんなの
こいつらはただのビルド屋で、自分達でソースに手を入れる体制はない
次のバージョンのOpenJDKがリリースされた後もOpenJDK公式リポジトリの旧バージョンのソースに対してLTS向けのパッチが提供されるかどうかは、
オラクル様の温情次第
838:デフォルトの名無しさん
18/10/12 20:45:34.37 LkXNeCMg.net
>>798
サンクス
839:デフォルトの名無しさん
18/10/22 16:04:20.83 1yTQ4g+U.net
何時の間にかvar使えるようになってたな
840:デフォルトの名無しさん
18/10/22 23:21:36.65 KYkLOyp1.net
いないいないvar
841:デフォルトの名無しさん
18/10/22 23:32:16.95 sd28W5TQ.net
Javaに型推論が無いことをディスられると、意識高い系Javaerさん達は
ローカル変数の型もinterfaceにするべきだからそんなもん要らんと上から目線で反論してたけど
梯子外されちゃって哀れだな
842:デフォルトの名無しさん
18/10/23 03:01:58.72 IDcT8U1C.net
これ2じゃなくて1が出力される。何で?
@Test
public void mapObjTest() {
Map<Long, Integer> m = new HashMap<>();
Long key = 1L;
m.put(key, 1);
Integer val = m.get(key);
val++;
System.out.println(m.get(key));
}
843:デフォルトの名無しさん
18/10/23 03:05:36.61 IDcT8U1C.net
悪く言われるけどクライアントサイドについてJRE同梱は良いんじゃない?
もはやファイルサイズは小さな問題だし、JREのバージョン違いでの誤作動を減らせる。
クライアントサイドJavaがそれで悪くなったと思わないけどな、俺は
JavaFXが外されたのは悪くなったと思うけど、�
844:ナもどうせ同梱する作業するときに入れるんだし 妥当な変化じゃないの?
845:デフォルトの名無しさん
18/10/23 05:51:34.87 6lDUuVuA.net
>>804
val++は↓これと同じ
val = val + 1
変数valに値を代入してる
↓こう書けば値は2になる、value.valueはドット演算子を使ってオブジェクトの状態を変えてる
public class Main {
public static void main(String[] args) {
Map<Integer, Value> map = new HashMap<>();
map.put(1, new Value(1));
Value value = map.get(1);
value.value++;
System.out.println(value.value);
}
}
class Value {
int value;
Value(int value) {
this.value = value;
}
}
変数に対する代入と
オブジェクトの状態を変えることとは
異なる操作なんやで
846:デフォルトの名無しさん
18/10/23 07:00:55.65 6lDUuVuA.net
変数への操作か、オブジェクトへの操作かを区別する必要があって
それぞれの違いはこんな感じ
URLリンク(light.dotup.org)
847:デフォルトの名無しさん
18/10/23 07:55:16.19 ukFWTvzy.net
>>804
Integerをインクリメントした瞬間に新しくIntegerインスタンスが生成されるからだな
詳しくはオートボクシング、インクリメントとかでググるといい
848:デフォルトの名無しさん
18/10/23 08:11:13.69 ukFWTvzy.net
要するにval++は↓の省略系
val = new Integer(val.intValue()+1)
849:デフォルトの名無しさん
18/10/23 09:23:24.20 cDc5Fd7g.net
>>805
悪くはなってないよね
0に何を掛けても0だからな
850:デフォルトの名無しさん
18/10/23 09:42:44.32 AS/7ikV7.net
すごーい
851:デフォルトの名無しさん
18/10/23 23:29:12.49 baThXOF4.net
>>805
動的リンクしまくってるからFullJRE前提だわ。
852:デフォルトの名無しさん
18/10/25 05:33:58.31 KXlarInO.net
Object#equals()
public boolean equals(Object obj) {
return (this == obj);
}
なんでreturn this == obj;じゃなく括弧で囲ってるの?
853:デフォルトの名無しさん
18/10/25 09:55:01.19 hw/Q19JU.net
囲ってみたい気分だったのだろう
854:デフォルトの名無しさん
18/10/25 11:06:47.39 jwOWZyFv.net
return文に記述された式が複雑なときは括弧で括ったほうがmore readableだから推奨してる人のほうが多いように思うけど、
this == objが複雑かどうかは微妙だね。
でも自分なら括弧つけるかな。
理由は、括弧でくくることで、等式が値を返す数式として使われていることを明示できるから。
855:デフォルトの名無しさん
18/10/25 11:34:47.74 r31i+JfI.net
Javaの最黎期に書かれたものだろうから、コードスタイルが今の基準からすれば変でもおかしくない
今では一般的には括弧はつけないのが主流だね
856:デフォルトの名無しさん
18/10/25 12:09:47.24 VLidr5ui.net
最近はアローで書いちゃうから一行だしな
857:デフォルトの名無しさん
18/10/25 14:00:36.81 oNBD1gf9.net
計算がよくわからん時は、まず括弧で囲えって、
今でも教える人がいるからな
858:デフォルトの名無しさん
18/10/25 14:21:09.91 6wYT/HJT.net
かっこいい、かっこわるい?
859:デフォルトの名無しさん
18/10/25 18:46:51.45 zmVgc+jl.net
>>818
演算子の優先順位の話なら不要だと思ってもあえてつけたままにすることはあるな
+ と * とかならいいけどビット演算子とか言語によって違う奴とかもあるしね
860:デフォルトの名無しさん
18/10/27 15:01:56.02 1x6RXWmG.net
javaでaccessdbと接続するようなソフト作ってみたいんですが
フレームワークって必要ですか
ちょっとフレームワーク自体よくわかってないです。
規模は社内で5
861:人くらいで使用します。
862:デフォルトの名無しさん
18/10/27 19:11:03.52 RbshV9yz.net
検索すれば出てくるけど
ハマることが多そうだからオススメしない
Javaが要件なのかAccessが要件なのかわからんが
863:デフォルトの名無しさん
18/10/27 19:15:14.94 LS+3DLFQ.net
>>815
Webで避けて通れないJavaScriptのせいとかもあるな。
JavaScriptのセミコロン省略可能はいまだに嵌る。
864:デフォルトの名無しさん
18/10/27 19:16:29.43 ZlRq8doU.net
Ruby on Rails, Node.js などでは、開発環境では、SQLite を使うけど
865:デフォルトの名無しさん
18/10/27 22:29:57.54 229rJcCX.net
>>805
Write once,Run anywhere
配布しようと思ったら環境に応じたJRE添付してやらないといけないんだよね?
根本理念に喧嘩売ってる気がする
866:デフォルトの名無しさん
18/10/28 03:09:10.51 7tRDHbkL.net
>>825
バイナリ互換じゃなくなるけどソースコード互換ではあるので・・・
JavaでGUIアプリ作ってネットで配布する場合、エンドユーザーの環境に依存するの辛いでしょ
むしろJRE同梱したい、と思うのが普通だよ
JRE同梱によるファイルサイズ増加はもはや問題にならないし
どうせJRE同梱作業するなら、その時にJavaFX入れれば良いので、分離されたのも妥当な気がするし
むしろクライアントサイドで進歩してると言っても良いのでは
867:デフォルトの名無しさん
18/10/28 03:59:58.74 WcIuuSyz.net
>JavaでGUIアプリ作ってネットで配布する場合、エンドユーザーの環境に依存するの辛いでしょ
JRE同梱だと回避できて、JARだけだとダメな問題ってどういうのがあるん?
実際にクライアントの環境が異なってたらどうやって提供しようが辛さは一緒におもえる
だいたいJRE同梱なんかされたら何仕込まれてもわからん
サンドボックスのしっかりした仕組みがあるわけじゃなし
そもそもWindowsとかOS側が信用できない
共通のJavaだから信頼感あったのに
868:デフォルトの名無しさん
18/10/28 04:08:51.40 z9u8vCUJ.net
今どき.NETですらランタイム同梱する流れだからな
869:デフォルトの名無しさん
18/10/28 04:22:29.53 WcIuuSyz.net
MSはユーザーの個人情報盗みたい側だし
870:デフォルトの名無しさん
18/10/28 04:26:41.29 7tRDHbkL.net
>>827
何言ってるか良く分からんが、JRE同梱すればJREのバージョン違いによる問題が無くなるだろう。
いちいちJREをインストールしてもらう手間も無くなる。
例えば一部のJREはJavaFXを同梱しているが、一部はそうではない。
何仕込まれても、ってのは良く分からんが
スタンドアロンアプリでもセキュリティマネージャーは動くはず
871:デフォルトの名無しさん
18/10/28 04:32:23.62 7tRDHbkL.net
確かにこれまでと比べると、オラクルのサイトからJRE落としてそれで動かしてたのに比べると
アプリ毎にJRE同梱されちゃうとおかしなネイティブ実行ファイルが同梱されてないか、という問題はある
しかし同梱されたプラットフォーム固有の実行ファイルはハッシュ値とかで適切なファイルかを照合できるはず
あとそもそもバイトコード部分でも相当な処理が可能だから、さほどセキュリティリスクが変わると思わない
ネットからプログラムを落とすなら、オープンソースか信頼できる大御所か
これまでと変わらないのでは
872:デフォルトの名無しさん
18/10/28 04:34:29.37 z9u8vCUJ.net
>>829
ランタイム同梱の意味わかってる?
873:デフォルトの名無しさん
18/10/28 04:36:35.55 WcIuuSyz.net
問題はJREのバージョンか
たしかに多少の問題はあるが
JRE同梱必須にしたらJavaの目指していた未来と可能性そのものを切り捨てることになる
そうできるってのとそうしなきゃいけないってのはえらい違い
874:デフォルトの名無しさん
18/10/28 04:42:15.05 7tRDHbkL.net
JREを同梱しないと、10年経ったら動かなくなってると思う
クライアントサイドはJRE同梱で作れと強制する事は、そんな悪い事じゃないと思う
そうしないとJavaがバージョンアップしづらい問題もあるから、オラクルはそうしたいんだろう
875:デフォルトの名無しさん
18/10/28 04:46:39.09 vBzuIBdi.net
元々Write once,Test anywhere
って失望されてたじゃ無いか。
876:。。 HTML5も同じだけど、理想と現実は遥かに遠い隔たりがある。
877:デフォルトの名無しさん
18/10/28 04:48:23.37 GS4HIDpq.net
スタティックリンクの肥大した実行ファイルと一緒だよね
Write Onceで全プラットフォームで動いたら開発者としては理想じゃないかな
878:デフォルトの名無しさん
18/10/28 04:49:04.83 7tRDHbkL.net
オラクルはJavaを高速バージョンアップしたいみたいな事も言ってるが、
一連の話は整合性がある
サーバーサイドはエンジニアが管理しててJRE固定できる、
クライアントサイドはJRE同梱。
現状だとJavaから古いAPIを削除したら多くのアプリが動かなくなるから、
移行期間を作ってそのようなアプリが減るのを待つ。
そうしないとJavaに未来が無いという判断は、理解できなくない。
879:デフォルトの名無しさん
18/10/28 05:01:48.54 WcIuuSyz.net
じぶんとこのOracleDBは枯れまくってても平気なくせに
880:デフォルトの名無しさん
18/10/28 05:47:19.26 D9Gt7gmT.net
改変されたJREを同梱されたら終わりではないか?
881:デフォルトの名無しさん
18/10/28 05:51:56.29 7tRDHbkL.net
だから、同梱されたファイルのハッシュ値調べればわかるし、
アンチウイルスだって有名な実行ファイルについてハッシュ値を知識として持っておくべき。
オープンソースは誰かが検証すべき。
で、もともとバイトコード部分でも相当な事ができるからセキュリティリスクは変化してない。
882:デフォルトの名無しさん
18/10/28 14:47:49.66 Ii5bdv+P.net
クラス変数にもvar使わせてほしいよな
無名クラスにリフレクションで値を代入するフレームワークとかでてきそうだし
class Hoge {
public var xyz = new Object() { int x, y, x };
}
883:デフォルトの名無しさん
18/10/28 23:50:32.90 vn58j50+.net
それをやると型を特定するために延々先を辿らなきゃいけなくなるんだ…
884:デフォルトの名無しさん
18/10/28 23:52:24.19 qcVVu7B5.net
Class#forNameで動的リンクするときjlinkとかは依存するクラス検出できないから
結局手動で全部依存関係調べるかfull jre使うかの二択になる。
>>841
互換性が保証できなくなるからやらないだろ。
実行時の型と推論された型は違うから。
885:デフォルトの名無しさん
18/10/29 00:01:40.82 k1+zlMbU.net
というかあれだぞ。
javapackagerなくなったからjava11ではjre同梱したパッケージ作れないし、
なくなったのはpublic jreだけでjreのビルド自体はadopt openjdkがやってるからjre自体はあるぞ。
886:デフォルトの名無しさん
18/10/29 00:06:53.79 RWf1bRTo.net
>>841
コンパイラの仕組み上困難
Javaコンパイラはまず、メンバのシグネチャだけを解析してクラスごとにメンバのお品書きを作る
そして、それが一通り終わった後に各メソッド本体やフィールド代入元の式を解析する
ところがフィールドの型にvarを許してしまうと、お品書きを作る段階でフィールド代入元の式を解析しなきゃいけなくなる
それによりコンパイラのパスが増えてしまうから、コンパイル速度が大きく低下する
887:デフォルトの名無しさん
18/10/29 01:24:28.42 Cn2rCt1V.net
>>845
クラスにvar持てるHaxeのコンパイル遅いと感じたこと無いけど
Scalaとかいう言語でものすごく遅くなったという話は聞く
888:デフォルトの名無しさん
18/10/29 02:54:18.59 doCXynSY.net
>>844
Java 11でクライアントサイドはどういう扱いになってるの?
889:デフォルトの名無しさん
18/10/29 03:02:24.77 doCXynSY.net
新しいパッケージングツールの要件はJavaFX未対応とされている
URLリンク(openjdk.java.net)
JavaFX由来のパッケージングツールが削除された
じゃあ、JavaFXアプリをエンドユーザーに配布したい場合、どうするの?
現在見つかる情報は、非JavaFXの自己完結型パッケージャ、
JavaFXのビルド方法だけで、JavaFXの自己完結型パッケージャが行方不明なんだけど
890:デフォルトの名無しさん
18/10/29 04:02:15.84 doCXynSY.net
URLリンク(commons.apache.org)
これはthread safeですか?
891:デフォルトの名無しさん
18/10/29 22:22:22.37 Cn2rCt1V.net
アウト、セーフ、よよいのよい
892:デフォルトの名無しさん
18/10/29 23:23:48.16 KWB0XUD6.net
>>847
Java Client Roadmap Update
URLリンク(www.oracle.com)
>>848
jep343がjavafx対応しないんだからないよ。
でも、javafxはただのライブラリなんだからjep343でほかと同じ扱いでしょ。
893:デフォルトの名無しさん
18/10/30 14:22:42.63 ySliw7Bj.net
public synchronized void method1(){}
こういうメソッドレベルでsynchronizedした場合、
synchronized(this){}ということですか?
つまり他のところでsynchronized(this)が書かれていたら、どちらかが待機になるんでしょうか
894:デフォルトの名無しさん
18/10/30 15:22:20.46 E+8/TrgC.net
>>852
その通り
thisをロックするのはパフォーマンスの低下やデッドロックの原因になるため、現代では一般には悪手とされている
synchronizedがデフォルトでthisをロックするのはJavaがまだオモチャでカジュアルに排他制御してた時代の名残で、
ちゃんと作るなら排他制御には private メンバを使って外に漏らさないようにした方が安全
895:デフォルトの名無しさん
18/10/31 12:34:18.73 6PFXXFSS.net
thisをロックするのとロック専用オブジェクトをロックするのは
性能の違いがあるんですか?
896:デフォルトの名無しさん
18/10/31 14:41:22.75 3SYFbLW8.net
>>854
thisはクラス外からも当然見えているわけで、他のクラスも同じオブジェクトを同時にロックしている可能性がある
どえせ内部的に同期してるんなら他のクラスが同時にアクセスしてくることは何の問題もないはずで、これは完全に無駄なブロックだ
クラス外から見えるオブジェクトをロックするのはパフォーマンスだけではなくてデッドロックの可能性を高める非常に悪い行為
897:デフォルトの名無しさん
18/10/31 15:22:21.60 6PFXXFSS.net
デッドロックの可能性は分かるんですが、
その性能の劣化というのは、クラス外でたまたまロックに使われていた場合、
待機時間が生じるから、ということですか?
待機時間以外に構造的に複雑なオブジェクトをロックすることでの性能劣化はありえますか?
898:デフォルトの名無しさん
18/10/31 15:45:06.31 3SYFbLW8.net
>>856
それはない
ロックはオブジェクトヘッダにロック中であることを示す情報を書き込むだけ
899:デフォルトの名無しさん
18/10/31 15:58:04.06 lmDzWSZe.net
意味不明なエラーで苦しめw
900:デフォルトの名無しさん
18/10/31 16:17:19.41 SePuugIe.net
ロック可能なのは全部ロックしたら苦しんだ黒歴史・・・
901:デフォルトの名無しさん
18/10/31 17:20:43.08 6PFXXFSS.net
専用オブジェクトでロックしても結局プログラマーが入念にチェックする以外
無い気がするんですが合ってますか?
よく言われてるようなロック順序云々では解決しない気がするんですが
902:デフォルトの名無しさん
18/10/31 17:23:06.92 xpjrbgPR.net
Javaはいつかなくなるんですか
903:デフォルトの名無しさん
18/10/31 19:25:31.36 ZwMW2kAu.net
いつか
904:デフォルトの名無しさん
18/10/31 19:27:08.55 iY3LkiS1.net
きっとどこかで生き残る
905:デフォルトの名無しさん
18/10/31 19:30:32.81 umCB7ism.net
俺のディスクの上で生き残る
906:デフォルトの名無しさん
18/10/31 19:48:34.38 umCB7ism.net
デッドロックと言えば、サーバをまたいだロックを掛けててデッドロックになった時は原因究明が大変だったなあ。
907:デフォルトの名無しさん
18/10/31 20:18:06.23 YzLC1QbG.net
>>860
外に漏らさなければ入念にチェックする範囲がクラス内だけに留まるだろ
外から見えるオブジェクトならそれを触ってる可能性のある範囲全てをチェックしなきゃいけない
908:デフォルトの名無しさん
18/10/31 21:04:23.41 6PFXXFSS.net
>>866
クラスA#method1() method3呼び出し
クラスA#method2()
クラスB#method3() method2呼び出し
この状況でmethod1,3を異なるスレッドが呼び出したらデッドロックになりうるのでは?
クラスA,Bがそれぞれ
909:専用のロックオブジェクトを持っていて method1,2,3の内部でロックオブジェクトでロックしているとして
910:デフォルトの名無しさん
18/10/31 21:13:55.51 umCB7ism.net
そういやJavaVMって実行時にデッドロックを見つけ出す機能はないのかな?
OSのファイルロックだと見つけてくれたりするよな。NFS絡むと無理だけど。
(あ、でも2プロセスでロック掛け合った場合だけかな?)
911:デフォルトの名無しさん
18/10/31 21:30:17.03 6PFXXFSS.net
デッドロックを通知する仕組みはあるようです。JConsole
安全なsynchronizedというものは、そのメソッドがどこから呼び出されているか、
どれを呼び出しているかというような依存関係で決まって、
単純な記述方法で安全性を確保する事はできないのではと思いました。
どのオブジェクトをロックしてもこの問題は残ります。
URLリンク(www.jpcert.or.jp)
これなんかもそうですが、ロック順序だけで解決できると考えてしまっていますが、
synchronizedブロック内のロジックが他のメソッドを呼び出している場合、
まだデッドロックが発生する可能性があると思います。
派生していくメソッド呼び出しのどこかにsynchronizedブロックがあれば。
もちろん、多くの場合、プログラムは様々なメソッドを呼び出します。
>>860はこの理解で正しいかという意味です
912:デフォルトの名無しさん
18/10/31 21:40:58.89 KdCoWYCo.net
頑張れぼうやw
913:デフォルトの名無しさん
18/10/31 22:59:47.53 GrkkoIKB.net
>>867のケースで仮にAがthisをロックしていたとしたら、B#method3がA#method2を呼ばずともB#method3内で直接または間接的にAのロックを試みただけでデッドロックするだろう。
privateなロックオブジェクトを用いたからといってデッドロックの可能性はゼロにはならないが、thisを使うのに比べれば確実に可能性は低くなる。
あえてリスクの大きくパフォーマンスの低下する方を選択する積極的な理由がない。
914:デフォルトの名無しさん
18/10/31 23:05:48.35 VI6I+9K/.net
>>869
何を言いたいのか理解できないが、どこの誰がどんなタイミングでロックを取りに来ようとも、ロックの順番さえ守ってれば絶対にデッドロックは起こらないよ。
915:デフォルトの名無しさん
18/10/31 23:43:17.95 QZT9zuHU.net
DB などほとんどのアプリでは、デッドロックでタイムアウトする。
絶対に回避できない
ロックする順番は、2プロセスの場合、
プロセスAがX, Y、
プロセスBがY, X
3プロセスの場合、
プロセスAがX, Y、
プロセスBがY, Z、
プロセスCがZ, X
916:デフォルトの名無しさん
18/11/01 00:20:30.29 IO/IeQZr.net
>>873
ロックの順番があべこべなのだからデッドロックするのは当然だろう
917:デフォルトの名無しさん
18/11/01 06:39:30.81 MRwfHAbj.net
>>873
バカにロックを使わせるな
って言う見本
せめて初歩の初歩ぐらい理解してからレスしろよ w
918:デフォルトの名無しさん
18/11/01 07:11:11.17 m171VN/W.net
>>872
ロックの順番を守る事ができないということです
ブロック内にメソッド呼び出しがあることは普通です
919:デフォルトの名無しさん
18/11/01 07:11:48.43 m171VN/W.net
>>871
>どのオブジェクトをロックしてもこの問題は残ります。
920:デフォルトの名無しさん
18/11/01 07:13:39.94 m171VN/W.net
現在している話は、普通のプログラムにおいてロックの順番を守る妥当な方法は存在しないという話です。
synchronizedブロック内でメソッド呼び出しがあった時点でそうなります。
それに対してロックの順番を守ればいいとかthisをロックしろとか言い続けているのは話が分かっていません。
921:デフォルトの名無しさん
18/11/01 07:17:18.61 m171VN/W.net
もう少し分かり易い説明を思いつきました。
ここにある問題は、synchronizedブロックで一旦ロック順序を守ったとしても、
そのブロック内から呼び出されているメソッド及びそこから派生的に呼び出されている全てのメソッドにおいて
synchronziedブロックを使う場合デッドロックが生じうるという問題で、
リファクタリング等において恒久的に懸念が残り続けるという問題です。
これは一時ロック順序を守ったコードを書いても解決しません。
922:デフォルトの名無しさん
18/11/01 07:20:14.51 m171VN/W.net
すみません、経験上凡人レベルの人に話しても理解されなくて、辛い思いをするだけです。
話を終わります。
923:デフォルトの名無しさん
18/11/01 07:36:25.75 PBz6MbC
924:m.net
925:デフォルトの名無しさん
18/11/01 07:55:33.73 MRwfHAbj.net
ID:QZT9zuHU = ID:m171VN/W
バカのまま永遠にデッドロックしとけ
926:デフォルトの名無しさん
18/11/01 08:23:01.98 Tn1c1okn.net
例題とかじゃなくて、どういう時にロックが必要になるか考えて実際にやってみたらいいんじゃないか
そんな複雑なsynchronizedの使い方をしたことはしないだろう
927:デフォルトの名無しさん
18/11/01 09:20:12.40 AYHv18S/.net
>すみません、経験上凡人レベルの人に話しても理解されなくて、辛い思いをするだけです。
世間は俺のことを分かってくれない(馬鹿のFAQ)w
928:デフォルトの名無しさん
18/11/01 09:30:29.97 KWvf1ga0.net
ID:m171VN/Wは天才すぎる故に凡人レベルの嫉妬を買ってしまった
929:デフォルトの名無しさん
18/11/01 09:40:00.51 mQsUQM4b.net
いや本当。凡人レベルの人には話が通じませんよね。
という具合にみんなして同調しておけばいいのに。
930:デフォルトの名無しさん
18/11/01 09:41:09.33 VmLiOLMi.net
凡人にも理解出来る様に説明出来る能力を持ってるのが、天才の条件だな
説明出来ない人は紙一重の方
931:デフォルトの名無しさん
18/11/01 09:47:33.79 DtT8Cv0d.net
まあ責任と前提の問題だな
正常な頭してたらクラスAとクラスBが相互に密結合するような設計をすることはありえないから、
似た状況が起こりうるのはBがAに自身を登録してAがBをinterface経由で「コールバック」するようなパターンだろう
その場合、BのメソッドがAのコンテキストから呼び出されることはBを作る側は当然知っているはずで、Aを更に別のスレッドから呼ぶような基地外的行為をしないという人間としての最低限度の責任はB側にある
そしてA側はそのようなリスクのある拡張ポイントをなるべく作るべきではないし、やむを得ないときはドキュメントに明記するべき
932:デフォルトの名無しさん
18/11/01 10:30:23.17 Tn1c1okn.net
あれだ
スレッドを知った初心者が無駄に使いたくなってる状態に近いんじゃないか
933:デフォルトの名無しさん
18/11/01 10:34:13.85 x+OioMtW.net
天才はこちらへ
上級プログラマの雑談部屋☆2
スレリンク(prog板)
934:デフォルトの名無しさん
18/11/01 11:38:29.67 mQsUQM4b.net
>>890
ありがとう。そんなスレがあったとは。正に俺のために作られたようなスレだな。
と、サラッと書けるくらいにならんといかんよ。現実がどうであれ。w
935:デフォルトの名無しさん
18/11/01 14:20:26.28 aGO292A7.net
馬鹿は死ななきゃ治らない
936:デフォルトの名無しさん
18/11/01 15:10:14.12 Nl3jEz8g.net
javaの資格のsilverやgoldはどの程度の実力で受かりますか?
デザインパターンやリファクタリングをちゃんと理解しているレベルなら余裕で受かる?
937:デフォルトの名無しさん
18/11/01 15:35:43.13 mUSj63Sn.net
>>893
シルバーはブロンズと変わらん
ゴールドはライブラリの使い方知ってればおけ
日付の計算とかスレッドとかコレクション
938:デフォルトの名無しさん
18/11/01 15:58:36.20 Nl3jEz8g.net
>>894
ゴールドもその程度で受かるのですか?
楽勝ですね。
じゃ逆にデザインパターンやリファクタリングをあまり理解していなくても受かるということ?
939:デフォルトの名無しさん
18/11/01 16:03:52.20 OxvwXsOa.net
受けようと思ったことすらないのでわからない。
940:デフォルトの名無しさん
18/11/01 16:11:52.48 Nl3jEz8g.net
職歴にプログラミングがないのでしかたなく資格でもアピールする必要があるのですが
Java資格はGoldを取るとして
あとなにがあったほうがよいでしょうか?
データベース関連やUML関連やネットワーク関連の資格ですか?具体的にはなにが印象いいでしょうか?
941:デフォルトの名無しさん
18/11/01 16:12:24.17 Nl3jEz8g.net
デザインパターン関連の資格ってないのかな?
942:デフォルトの名無しさん
18/11/01 16:23:14.20 DtT8Cv0d.net
>>897
まずはIPA
943:のデスペとデスペ
944:デフォルトの名無しさん
18/11/01 16:33:52.56 Nl3jEz8g.net
デスペとデスペですか。
同じものなのになぜ2回も言うのですか。
945:デフォルトの名無しさん
18/11/01 16:41:11.79 RfEd9OxR.net
大事なことなので
946:デフォルトの名無しさん
18/11/01 17:12:47.17 Nl3jEz8g.net
そうですか。
なにか忘れてそうなのですが
プログラミングあるいは関連分野で、あったほうがいい資格はありませんか?
947:デフォルトの名無しさん
18/11/01 18:05:14.35 OxvwXsOa.net
わからない。資格何もなしで何十年も働いちゃったもので。
一時期は学校でC言語教えてたりもしたが、資格はなかった。
あ、一太郎も教えてたことあったよ。もちろん資格なしで。
948:デフォルトの名無しさん
18/11/01 19:13:26.95 Nl3jEz8g.net
>>903
無免許ですか。逮捕しますよw
一太郎は日本用のWordだと思うけどなんでそんなものが存在したの?
949:デフォルトの名無しさん
18/11/01 19:15:26.25 1Z/ZXoar.net
まあ実務をやる上では資格は特に必要ではない
ただ採用する立場だと資格ない奴とある奴ならある奴を取る
950:デフォルトの名無しさん
18/11/01 19:25:15.27 q4rSVTZi.net
馬鹿なんだろう
951:デフォルトの名無しさん
18/11/01 19:39:49.82 OxvwXsOa.net
>>904
なんでって、MS-DOS時代のWORDは漢字扱えなかったからじゃないか?
952:デフォルトの名無しさん
18/11/01 23:44:32.35 kQnTnj4P.net
ブロンズは持っても意味ないしシルバーもゴールドの受験資格みたいなもんだぞ。
そんで中身の言語部分はJVMSもJLSも一切読まなくても答えられる程度でどちらかと言うと
ありふれたライブラリの宣伝兼再確認みたいな内容。
953:デフォルトの名無しさん
18/11/02 10:24:58.44 VhXZ8KFR.net
>>904
資格と免許の区別も出来ないんじゃ、
就職なんて出来んだろ
954:デフォルトの名無しさん
18/11/02 16:44:03.61 TVanRjUQ.net
もしかしなくてもsilverとかより基本情報技術者取ったほうがいいんでしょうか
955:デフォルトの名無しさん
18/11/02 16:53:15.88 3EaYIZ29.net
当然
Javaの重箱の隅に付いてる食べカスの色知ってる奴よりIPアドレスの計算できる奴の方が遥かに役に立つ
956:デフォルトの名無しさん
18/11/02 17:17:06.84 0QIYfvOa.net
IPアドレスの計算って?
何か計算必要か?
957:デフォルトの名無しさん
18/11/02 21:03:28.28 mJ2e4zOQ.net
インターネットキングならIPアドレスの計算くらい朝飯前だよ
958:デフォルトの名無しさん
18/11/02 22:48:40.06 ejOlj3tt.net
サブネットマスクとかの話ちゃうの
959:デフォルトの名無しさん
18/11/03 00:34:57.85 8dUCHJOu.net
世の中に無駄なものなんかないよ
ジャヴァの資格もIPアドレスの計算も全て社会の役に立ってる
960:デフォルトの名無しさん
18/11/03 18:14:19.75 b5iwDuZ8.net
java11, 12にはくだらない機能しか入らないのか
961:デフォルトの名無しさん
18/11/04 11:32:05.48 hQdPSgHl.net
ブリッジパターンの応用手順のブログみたい。パッケージを開発する時を前提にしているね。
URLリンク(blogs.yahoo.co.jp)
962:デフォルトの名無しさん
18/11/06 00:08:12.73 GjqHOKec.net
for文ブロックの後にループカウンタ変数の値でif文を書きたい
でもループカウンタ変数のスコープの問題で使えない
for文実行前にカウンタ変数用意するのは悔しいし誤動作を招きそうな気がするのでやりたくない
for文の中にif文を書いちゃえばいいんだけど毎回実行されるのは無駄で気持ちが悪いしそもそも本来やりたいことと違う
これはどう解決すれば良いんでしょうか、初歩的ですいません……
963:デフォルトの名無しさん
18/11/06 00:14:58.15 ShoHBAGo.net
>>918
forループに入る前にループカウンタとは別の変数を用意して、ループの最後にカウンタの値をその変数にコピーするようにしよう
そうすればループカウンタをfor文の外で宣言しなくて済むし悔しくない
964:デフォルトの名無しさん
18/11/06 00:22:51.13 GjqHOKec.net
そもそも�
965:求[プカウンタを前に宣言はできませんでした(今までそんなんやろうと思わなかった……) >>919 代入ならif評価よりは速そうですね、ありがとうございます
966:デフォルトの名無しさん
18/11/06 01:56:42.62 BD76rR44.net
>>918
それってループしている最中に if で何らかの条件により break するってことだよね?
それならその if ブロックの中で別の変数に代入すれば良い。
int j = -1;
for (int i = 0; i < max; i++) {
if (f(i)) {
j = i;
break;
}
}
if (j >= 0) {
...
}
もし上記のように途中でbreakして抜けるのでないなら max の値そのまま使えば良い。
967:デフォルトの名無しさん
18/11/06 11:11:50.23 I/7NgPjD.net
while使えば?
968:デフォルトの名無しさん
18/11/06 11:38:48.82 4wD9lBDw.net
時間の掛かるファイル読込処理を非同期実行して、その処理中にファイル読込具合に応じてJavaFXのプログレスバーを更新してるんだけど、
たまにプログレスバーが更新されない場合がある。なんで?
そのファイル読込処理とプログレスバー更新はインターフェースの継承メソッドに記述していて、
Threadクラスに登録するRunnableクラスのrunメソッド中でインターフェースの抽象メソッドを叩いて呼び出している。
1)イベントトリガが、JavaFXのFileChooserの選択完了時 → プログレスバー更新される
2)イベントトリガが、別のJavaFXの子Scene上のJavaFXボタン押下時(子Sceneのhide後) → プログレスバー更新されない
setImplicitExitをどうたらこたらするというのは一通り試した
簡単に解決したいんだがなあ
969:デフォルトの名無しさん
18/11/06 12:01:52.02 nXssBivk.net
>>923
JavaFXはもうJavaの標準ライブラリではなく単なる野良ライブラリの一つに過ぎない
スレ違い
970:デフォルトの名無しさん
18/11/06 12:19:26.12 4wD9lBDw.net
回答できんのなら黙ってろよな。回答できないくせに黙ってられないから池沼なのか
971:デフォルトの名無しさん
18/11/06 14:10:58.07 FYsrzIPK.net
と逆切れするアホ
972:デフォルトの名無しさん
18/11/06 14:23:17.36 V4FwzPmz.net
逆ではない
973:デフォルトの名無しさん
18/11/06 14:23:55.76 V4FwzPmz.net
順切れ
974:デフォルトの名無しさん
18/11/06 14:24:46.93 V4FwzPmz.net
>>924
おいお前
975:デフォルトの名無しさん
18/11/06 14:25:09.98 V4FwzPmz.net
死ね
976:デフォルトの名無しさん
18/11/06 14:28:34.10 V4FwzPmz.net
>>926
おいお前
977:デフォルトの名無しさん
18/11/06 14:29:02.76 V4FwzPmz.net
ハゲろ
978:デフォルトの名無しさん
18/11/06 14:43:02.48 B+7Pp6SO.net
フサフサが羨ましいのかw
979:デフォルトの名無しさん
18/11/06 14:45:10.57 V4FwzPmz.net
>>933
おいお前
980:デフォルトの名無しさん
18/11/06 14:45:32.38 V4FwzPmz.net
スレ違いだ
981:デフォルトの名無しさん
18/11/06 19:07:34.12 13CfGTjW.net
どう見ても君がスレチ大魔王
982:デフォルトの名無しさん
18/11/07 00:26:50.27 s4BPycKf.net
substance.jarでswingの見た目変えるの好きだった
javafxは評判悪かった覚えがあるけどswing使用者はみんな移行したのかな
983:920
18/11/07 12:34:31.16 LJxZYzuZ.net
解決したったわ
しかしここはクソの役にも立たねえな
たまに書き込むけど、光合成も出来ない原始生命を相手にしているようで、ただただ孤独しか感じられねえわ
次はジュラ紀になったら来てやるから、それまでに精々、自然淘汰されておけよ
984:デフォルトの名無しさん
18/11/07 12:52:14.01 bimd4khF.net
FXのスレは本当にあるんだけどね。
985:デフォルトの名無しさん
18/11/07 13:18:13.99 ti/H8oE6.net
>>938
そんなお前にピッタリのスレがあるぞ
こんな低レベルのところじゃお前ほどの力は評価されないんだよ
上級プログラマの雑談部屋☆2
スレリンク(prog板)
986:デフォルトの名無しさん
18/11/07 14:02:24.18 +HyKX3eQ.net
>>937
FXは廃止されちゃったからね
極一部のニッチでしか
987:使われてないしモバイルファーストやWebファーストの流れに侵食されてオワコン、とOracleさん自身が公式に宣言してる
988:デフォルトの名無しさん
18/11/07 14:05:19.70 1QLpYBJt.net
プグレスバーがジュラ紀を示したらまたおいでw
989:デフォルトの名無しさん
18/11/08 12:06:43.94 QSZi8e/Z.net
Javaの仕事に転職したいのだけど
年収の交渉でプロ野球の契約更改のように代理人にお願いして年収アップの交渉をしてもらうシステムはないかな?
もちろん高収入になったらその1%は代理人に払うことにしたらその代理人もものすごくがんばってくれるからwin-winの関係になる。
990:デフォルトの名無しさん
18/11/08 12:17:54.62 Cbg63GbQ.net
君がなれ
991:デフォルトの名無しさん
18/11/08 12:20:00.08 cbRquK1Y.net
>>943
年収2000万ぐらいなら探せばあるだろ
それ以下なら商売にならなすぎだから厳しいと思うけど
992:デフォルトの名無しさん
18/11/08 12:25:50.93 Cbg63GbQ.net
1000万の1%が10万円。とすると月に10人以上成立させないとうまくいかんのではないか?
993:デフォルトの名無しさん
18/11/08 12:28:16.32 QSZi8e/Z.net
>>946
それ専門だから1日に5回同じ場所で連続で面接に参加して
それで1月に20日働けば月収1000万円。
994:デフォルトの名無しさん
18/11/08 12:31:21.50 fwzjEtEg.net
>>943
そんなことができる代理人は自分で稼ぐだろ
そもそも億円プログラマーなんて存在するのかも怪しいし
995:デフォルトの名無しさん
18/11/08 12:34:40.88 Cbg63GbQ.net
そういやさっきツイッターの広告でAIとチャットして何をやりたいかとか聞き出して人を募集している企業とのマッチングすのが出てきたよ。
やる前からAIに仕事奪われたようだなw
996:デフォルトの名無しさん
18/11/08 14:09:45.21 Ub+FCVlD.net
アホ参上
997:デフォルトの名無しさん
18/11/08 14:44:18.93 mJwNlcze.net
代理人の相場は10%が基本だぞ
998:デフォルトの名無しさん
18/11/08 16:13:10.74 cbRquK1Y.net
>>949
それ従来の検索フォームをチャットに変えただけだろ
999:デフォルトの名無しさん
18/11/08 17:07:12.88 o3TwcDma.net
人工無脳でも対応向上だと騙される奴がいるんだから有効だと言わざる得ないな
どうせブラック紹介されるなら萌えキャラにでも紹介された方がいいだろう?
1000:デフォルトの名無しさん
18/11/09 16:17:59.93 o+E2GY7o.net
このスレの少し前にもオラクルの認定試験の話題がありましたが、
Java Silverは持っていると役に立つでしょうか?
Java Bronzeは既に取得しています。
1001:デフォルトの名無しさん
18/11/09 16:29:29.33 OW/zGENl.net
履歴書に書くことが出来る
1002:デフォルトの名無しさん
18/11/09 16:30:54.51 OW/zGENl.net
そして面接の時にJavaの質問をされ墓穴を掘る
1003:デフォルトの名無しさん
18/11/09 16:59:59.72 Jo0ooGHD.net
マ板へ逝けと既に書かれていた
1004:デフォルトの名無しさん
18/11/09 22:48:54.87 zMMfYdX4.net
総称型を使った抽象クラスがあって、その具象クラス全部を処理するコードを書きたいんだけど
以下のようにするとコンパイルエラーになるのでできません。
いちいちTest2の具象クラスをinstanceof等で特定して書かなければならないということでしょうか?
public class GenericsTest {
public void test() {
Test2<? extends Test> t = null;
t.f(new TestConcrete());
}
public static class Test {
}
public static class TestConcrete extends Test {
}
public abstract static class Test2<A extends Test> {
public void f(A a) {
}
}
}
1005:デフォルトの名無しさん
18/11/09 22:51:18.43 zMMfYdX4.net
修正しますこうでした。Testも抽象クラスです。
public class GenericsTest {
public void test() {
Test2<? extends Test> t = null;
Test a = null;
t.f(a);
}
public abstract static class Test {
}
public abstract static class Test2<A extends Test> {
public void f(A a) {
}
}
}
1006:951
18/11/09 23:58:00.70 o+E2GY7o.net
ありがとうございました。
1007:デフォルトの名無しさん
18/11/10 00:57:56.92 XE+BpAI8.net
こんな記述を見かけたんですが
>Java11からはJavaFXは、ただのライブラリになったので、JavaFX側がMavenのCentral Repositoryにjarを置いてくれていたりするので、 OpenJDK11でJavaFX11を使うのであればpom.xmlのdependencyに入れるだけの話である。
JavaFXはネイティブDLLを使っていますか?
使っている場合、pom.xmlで入れられるライブラリになったというのは、
全環境用のネイティブコードが同梱されるということですか?
ほとんどのJavaライブラリは純粋なJavaコードで環境非依存だと思いますが
環境依存したライブラリはどういう扱いになるんでしょう
1008:デフォルトの名無しさん
18/11/10 01:36:26.97 XE+BpAI8.net
>>959のコードですが
fの引数は? extends Testだから、Testを受け取れても良くないですか?
? extends Testで期待できるのはTestのインターフェースであり、
TestはTestのインターフェースを持っています。
しかしコンパイルエラーになります
1009:デフォルトの名無しさん
18/11/10 02:07:52.87 XE+BpAI8.net
少し調べました。状況は、
A extends Test と Test が非変であり、親子関係が完全に無視される。
f(A a)はConsumerであり、PECS原則から、? super Aを指定できるとよいが、
総称型ではないので指定できない。
Test2<A super Test>も記述不可
f(Test a)にすれば解決するが、Test2の子クラスはfの引数の型を限定したいかもしれない。
1010:デフォルトの名無しさん
18/11/10 02:33:26.87 XE+BpAI8.net
なぜか一度ワイルドカードを経由する+キャストという方法で解決できました。
public class GenericsTest {
@org.junit.Test
public void test() {
Func<?> funcTmp = new FuncConcrete();
Func<Arg> func = (Func<Arg>) funcTmp;
Arg arg = null;
func.f(arg);
}
@org.junit.Test
public void test2() {
Func<Arg> func = (Func<Arg>) new FuncConcrete();
Arg arg = null;
func.f(arg);
}
public abstract static class Arg {}
public static class ArgConcrete extends Arg {}
public static class FuncConcrete extends Func<ArgConcrete> {}
public abstract static class Func<A extends Arg> {
public void f(A a) {}
}
}
1011:デフォルトの名無しさん
18/11/10 23:27:50.60 49ccZS6D.net
>>961
環境ごとにjar分けて共有ライブラリ含めるだけだけど。joglとか昔からそうじゃん。
1012:デフォルトの名無しさん
18/11/10 23:46:19.83 6id28qN8.net
JVMは環境ごとに用意されてるから、その部分で対応してるんでしょう
わかってると思うが当然標準ライブラリとして提供してるAPI自体は環境に依存してない
まぁ internal なコードに環境による場合分けくらいは書いてあるかもしれんけど、
JVMにはその環境用のコードさえあればいいから、全環境のネイティブコードは必要ない
1013:デフォルトの名無しさん
18/11/10 23:55:28.83 6id28qN8.net
あぁごめん、Java11からの話か
そうだね、環境依存のjarと環境依存してないjarを2つ別々にダウンロードするんだろうね多分
swt+JFaceの、swt部分だけ環境依存してるのと一緒
使ったこと無いけど 上で言われてるJOGLもそんな感じかな
まぁ軽めのデータベースのjarとか環境依存のファイル全部ぶっこんでくることもあったりするけど
1014:デフォルトの名無しさん
18/11/11 11:11:28.64 6MwZdEZT.net
javaとDB(oracle)のデータについて。
javaプログラム内のある変数Xに対して、DBのある列の値に存在しているかどうか
チェックしたいのですが、どうすればよいでしょうか。
1.String sqlStr = "SELECT * FROM fruit";
2.ResultSet result = st.executeQuery( sqlStr );
3.while( result.next() ) {
4. String str1 = result.getString( "price" );
5. System.out.println(str1);
}
2行目でSQLを実行して、4行目でPRICE列の値を取得していると
思うのですが、X=1000と定義していた場合、PRICE列の値に対してXの
値が存在するチェックはどのようにコーディングすれば良いでしょうか。
一致すれば出力で一致しなければエラーにしたい。
なお、PRICEデータは例として1000としていますが、ラン�
1015:ム数値です。
1016:デフォルトの名無しさん
18/11/11 11:27:22.91 wM/j3zKs.net
>>968
普通にWHERE書け
SQL分からないんならJavaの前にSQLの入門書を終えてきなさい
1017:デフォルトの名無しさん
18/11/11 12:00:45.21 6MwZdEZT.net
"SELECT * FROM fruit WHERE PRICE = X"だと
Xが文字列になってしまうと。
Str1とXを比較すればよいと考えていましたが難しい
1018:デフォルトの名無しさん
18/11/11 13:07:00.71 iJkGWVs5.net
プレースホルダ
1019:デフォルトの名無しさん
18/11/11 18:24:10.42 0F8Q4Ddx.net
>>970
prepare にするかそのまんまSQL文の中に文字列で埋め込まれるようにするか、だな。
prepare の場合はこんな感じね。PreparedStatement クラス使うやつ。"?" の部分が置き換え部分。
URLリンク(qiita.com)
1020:デフォルトの名無しさん
18/11/11 18:43:06.39 KBFxC5Cm.net
もし変数xの値が一つしかないなら
プリペアドステートメントでいちいち事前コンパイルする必要がない
ふつうにSQL問い合わせの文字列作るほうが速い簡単お手軽
1021:デフォルトの名無しさん
18/11/11 21:38:36.99 3JRsWB+V.net
今時直接データ埋め込みとかあり得んだろ…
1022:デフォルトの名無しさん
18/11/11 22:00:57.21 KBFxC5Cm.net
知能が低いと
文字列の加工すらできないのか
なるほどな
1023:デフォルトの名無しさん
18/11/11 22:26:11.35 cBZ/CGbZ.net
それが何を意味するのかも考えずどっかからコピペしてるからそういう質問が出るんだろうけど、技術書見ればプリペアードステートメントとか順序を追って書いてあるもんでもないのかね
1024:デフォルトの名無しさん
18/11/11 22:28:33.94 VPyBQ4Rk.net
質問スレで質問に対して煽るやつの知能も大概だとおもうぞ
1025:デフォルトの名無しさん
18/11/11 22:31:24.54 3JRsWB+V.net
文字列の加工程度でドヤるとか w
1026:デフォルトの名無しさん
18/11/11 22:32:01.58 4KGbvnyj.net
何も調べずに質問する方が大概だろ、質問者は神様ですってかw
1027:デフォルトの名無しさん
18/11/11 23:35:34.02 infpFr5m.net
>>966
> わかってると思うが当然標準ライブラリとして提供してるAPI自体は環境に依存してない
>
> まぁ internal なコードに環境による場合分けくらいは書いてあるかもしれんけど、
> JVMにはその環境用のコードさえあればいいから、全環境のネイティブコードは必要ない
そんなことないから。java6以降環境依存な標準API追加してるからjava側で場合分けする必要ある。
1028:デフォルトの名無しさん
18/11/12 00:34:16.10 MtlIUxHY.net
>>973
prepare にしとくとSQLインジェクション防止になるというのもある。
URLリンク(blogs.oracle.com)
もちろんどうやってもそんなことは起こり得ないし1回しか同じSQL文使わないみたいな場合は埋め込めばいい。
1029:デフォルトの名無しさん
18/11/12 16:56:20.13 ayEXvCJf.net
spring frameworkはMVCですか?
1030:デフォルトの名無しさん
18/11/12 17:14:22.45 cpYKEuEA.net
spring frameworkはフレームワークで、MVCはプログラムの一つのモデルです。
1031:デフォルトの名無しさん
18/11/12 17:37:37.98 xaL5+kQv.net
>>980
> 環境依存な標準API
例えば?
1032:デフォルトの名無しさん
18/11/12 17:50:53.29 ayEXvCJf.net
>>983
どのモデルを採用してるのですか?
1033:デフォルトの名無しさん
18/11/12 22:41:38.37 JKEbmYKN.net
>>984
awtのDesktop、nio2(more nio)のファイルパーミッション等、apple javaのeawt移植。
あと6以前からのjava soundもjreに含まれてるのは単なるRIで仕様と実装は別物で、
実装部分のLineの挙動はプラットフォーム依存。7以降MIDIのソフトシンセはクロスプラットフォームになったけど。
1034:デフォルトの名無しさん
18/11/12 23:02:27.75 THHCGQKY.net
Javaのメモリ管理に関して教えてください!
例えば、PCのメモリが32GBあるPCで、
インス
1035:タンスを大量生成するプログラムを動かすとします。 また、このプログラムの起動引数に、ヒープ最大使用量=2GB を設定して起動していたとします。 この場合、大量のインスタンスを生成していった場合ですが... ヒープ最大使用量=2GBを超えてヒープを使用することはありますか? それと、ヒープサイズがヒープ最大使用量に近付いた場合、 ガベージコレクションが発生するようになりますか?
1036:デフォルトの名無しさん
18/11/13 06:25:54.30 qPPBH0nu.net
>>987
インスタンスて何?
プロセスのことか?
1037:デフォルトの名無しさん
18/11/13 06:56:40.27 t6QPVwz9.net
>>987
> ヒープ最大使用量=2GBを超えてヒープを使用することはありますか?
ないよ、ヒープ最大使用量を超えるとOutOfMemoryErrorが投げられる
> ヒープサイズがヒープ最大使用量に近付いた場合、
> ガベージコレクションが発生するようになりますか?
なるよ、サーバを管理してるけどたまにアプリにメモリリークがあって
メモリが解放されなくてGCが頻発して最終的にOutOfMemoryErrorになる
ことがある、急速にメモリを消費してGCが稼働する間もなくエラーになることもある
1038:デフォルトの名無しさん
18/11/13 08:44:10.18 z+WaWgDc.net
>> 985
Object o = new Object();
とかです!
>> 986
ありがとうございます!
ということは、PCのメモリを全部食い潰すことはないのですね。
助かります。
1039:デフォルトの名無しさん
18/11/13 09:22:02.07 3SCk9MN5.net
あほやな
1040:デフォルトの名無しさん
18/11/13 16:13:23.72 BO12xGFO.net
参照にnull渡してもすぐに廃棄してくれないから
メモリぎりぎりの処理をするとGC発生せずに落ちる
OutOfMemoryErrorの前に1度はフルGCしろよと思う
1041:デフォルトの名無しさん
18/11/13 23:42:29.05 u0U8MmUH.net
hotspotはやってるだろ?今やってないのか?
1042:デフォルトの名無しさん
18/11/18 19:34:14.79 pZxF/iWK.net
java11に移行しようとすると、ライブラリ類が対応してるのか不安
自分のアプリだけテストしても不十分だ
例えばNettyもjava11で少し問題が出たようだ
1043:デフォルトの名無しさん
18/11/18 19:51:16.43 pZxF/iWK.net
java8からの移行を考えてたけど、やっぱり一部パッケージが削除されたせいで
動作しないものが出るようだ
移行作業はまずビルドが成功するかという問題があって、
失敗したら最悪ライブラリを自分で修正しないといけなくて、
ビルドに成功したとしてもライブラリはjava11でテストされていないという状況
ほんの1年ちょい前はjava8が最新だったんだが・・・
こんなの新規プロジェクト間に合わないだろ
移行作業しつつ開発進めないといけない
1044:デフォルトの名無しさん
18/11/18 21:06:07.68 pZxF/iWK.net
URLリンク(builder.japan.zdnet.com)
>Java Policy Tool
これの代替手段はありますか?
>時代遅れとなったセキュリティAPI
これはjava.securityのことですか?java11でそのパッケージが無くなるんですか?
1045:デフォルトの名無しさん
18/11/18 23:08:00.76 JqgRfJJT.net
>>996
>これの代替手段はありますか?
ない。どうせpolicy toolはカスタムポリシー対応してないからポリシーファイルは手書きする必要がある。
そもそも、これ技術デモだから。
>これはjava.securityのことですか?java11でそのパッケージが無くなるんですか?
非ポリシーベースのsecurity apiのうち1.1時代のだけ。
1046:デフォルトの名無しさん
18/11/18 23:39:07.26 pZxF/iWK.net
java8から11に移行する場合、security apiは特に変わってないと考えていいですか?
1047:デフォルトの名無しさん
18/11/19 00:09:28.48 MZ1FDVWs.net
あー1.1のAPIを8で使ってたらそうじゃないのか
1048:デフォルトの名無しさん
18/11/19 00:35:10.50 7qQcp7Oe.net
正確にはcheckPermissionに転送してるだけのSecurityManagerの一部のメソッドだけどね。
今のところ削除予定なのは特殊なやつだけだけど1.1/1.2時代のapi削除するのは時間の問題だと思うよ。
1049:デフォルトの名無しさん
18/11/19 00:47:13.92 MZ1FDVWs.net
何で最初から理想的なAPIにできないんだろう
1050:?
1051:デフォルトの名無しさん
18/11/19 11:00:29.57 C68x9bSi.net
>>1001
君が作ってないからさ
君が作れば理想的なものになる
今すぐ新言語を作れ
1052:デフォルトの名無しさん
18/11/19 11:04:42.70 X6/A5UND.net
>>1001
バグと同じで改修に次ぐ改修で無理が想定外や見落としが出て、結果継ぎ接ぎになるんだろ。
1053:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 281日 17時間 15分 2秒
1054:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています