18/11/20 03:38:42.96 JZJLduoZ0.net
カキコ
3:デフォルトの名無しさん
18/11/24 10:37:52.52 6yt0KLFG0.net
Threadが完了しているかはどうやって調べるんですか?
isInterrupted()とisAliveはあスレッド終了時falseでした。
4:デフォルトの名無しさん
18/11/24 16:28:54.46 Q9o1GKtC0.net
>>3
URLリンク(pppurple.hatenablog.com)
5:デフォルトの名無しさん
18/11/24 17:16:53.81 6yt0KLFG0.net
どうやらisAlive()はstart()前はfalse,start()後実行中はtrue,完了したらfalseのようです。
start前と完了後を区別するにはgetStateが良いようですね
6:デフォルトの名無しさん
18/11/25 08:53:36.37 vfhmRXQZ0.net
スレッド1がメンバー変数Aを更新、そのあとメンバー変数Bを更新
スレッド2から見て、Bの更新が見えるのにAが見えない、ということはありえますか?
7:デフォルトの名無しさん
18/11/25 10:55:13.27 bdma9Nzw0.net
マルチスレッドは前後関係が決まらないから、確実なものはない。
待ち合わせでもしていれば、できるかも
デッドロックもあるし、10年以上開発していないなら無理。
資源が共有されるから、素人がプログラミングできるはずがない!
8:デフォルトの名無しさん
18/11/25 11:39:22.30 0ClRa5n60.net
スレッドは最初から並列、同期を考えてプログラムするだろう。初心者には無理
9:デフォルトの名無しさん
18/11/25 16:50:34.64 k7/W79Is0.net
>>6
その変数Aが volatile でなければ読む側のスレッドで動いているコードによっては起こり得ると思う。
(もっと他順に更新順序と読む順序の問題でそうなる事もあるが)。
かといって volatile にしただけで安心してはいけない。更にロック掛けた上で読み出した方が良い。
Java なら synchronized 使うとかだな。
10:デフォルトの名無しさん
18/11/26 23:37:17.15 iInmVawEa.net
volatileはそのAとBの間に制約があるなら使えないし、A、Bが自身の制約になるときもか。あと他の変数の不変条件になってるなら使えないよ。
ていうかvolatile変数の変更が外から見えないならロックいらんだろ。
11:デフォルトの名無しさん
18/11/27 00:38:32.20 2AqLChXV0.net
何を言ってるのかわからん。
12:デフォルトの名無しさん
18/11/27 01:26:54.27 IxTjeZ9T0.net
>>10
制約って?具体的にどういう状態?
privateにして外からgetするメソッドを呼ぶだけのいわゆるプロパティにしてしまえばマシにはなるかもな。
しかしそれだけだとA,Bを個別に読んだら一方しか更新されてない事は起こりうるのでは?
更新する側がロックせずに一つづつ更新している最中に一つづつ読んでしまえば起こりうるよね?
13:デフォルトの名無しさん
18/11/27 10:43:53.15 Kxtwr65F0.net
1スレッド書き込み、マルチスレッド読み込みの場合、
並行処理による問題が発生する可能性はありますか?
例えばHashMapにアクセスするとして。
14:デフォルトの名無しさん
18/11/27 10:50:21.39 DSo9/Qg/0.net
1. スレッドA には、Xが存在しない
2. ここで書き込みスレッドが、X を書き込むと、
3. スレッドB には、Xが存在する
15:デフォルトの名無しさん
18/11/27 12:39:58.02 gTSgzwA4a.net
>>13
あります。
16:デフォルトの名無しさん
18/11/27 15:26:01.15 r2rVvRkR0.net
ありまぁ~す
17:デフォルトの名無しさん
18/11/28 01:33:35.79 BkKDQWNJ0.net
>>13
HashMap のドキュメントに Collections.synchronizedMap() を使う方法が書いてある。
それ使った方が自分でゴチャゴチャ考えるより楽だ。
18:デフォルトの名無しさん
18/11/29 21:49:08.42 wn8bMma4a.net
排他ロックが無駄だからいちいち同期するなよ。
concurrent collectionつかえ。その用途ならConcurrentHashMapがあるだろ。
19:デフォルトの名無しさん
18/12/06 14:31:29.56 ncTdmVKO0.net
ラムダの中でローカル変数のオブジェクトを参照している場合、
そのメソッドを抜けた後そのローカル変数を参照する事は安全ですか?
//in some method
Obj local = new Obj();
GuiPart gui = new GuiPart((event)->local.method(event));
return;//この後ラムダがイベント処理で呼ばれた場合、localは参照可能か?
20:デフォルトの名無しさん
18/12/06 14:37:21.87 U/FtrhZGM.net
>>19
安全に参照可能だよ
自動生成されたクラスのインスタンスフィールドに保持される
21:デフォルトの名無しさん
18/12/06 15:00:26.25 fFxLBqGn0.net
逆に気を付けなければならないのは、
非同期処理などで、外側のオブジェクト(エンクロージングインスタンス)がいつまでも破棄されなくなる可能性があること。
22:デフォルトの名無しさん
18/12/07 02:12:41.95 5Mie+W080.net
匿名クラス(無名クラス)の型について質問です。
ArrayListに格納した後、get()で取り出して使いたいのですが
型名が分からずキャストできません。
どなたか回答をお願いします。
23:デフォルトの名無しさん
18/12/07 02:50:49.80 4kVuFzeP0.net
>>22
List にキャストすればいいのでは?
24:デフォルトの名無しさん
18/12/07 04:50:43.67 NzONXxAO0.net
>>22
クラスを定義するときに継承してるはずなので
instanceofで継承元の型かチェックして
型のクラスにキャストすればいいのじゃないかな
継承先のクラスへのキャストはわからん
25:22
18/12/07 17:13:48.47 5Mie+W080.net
>>23
>>24
ありがとうございました。
ちょっと俺の説明も分かりにくかったと思いますので、
コードを下に書きますね。
List<Object> al = new ArrayList<>();
al.add(new Object {
__int anonymousField = 5;
__void anonymousMethod() {
____System.out.println(anonymousField);
__}
});
al.get(0).anonymousMethod();
こう書くと、匿名クラスはObject型にキャストされているので、
anonymousMethod()を呼べずコンパイルエラーになります。
そこで最終行でキャスト演算子を使おうと思ったのですが、
匿名クラスの型が分からずキャスト出来なかったんです…。
26:デフォルトの名無しさん
18/12/07 17:27:22.40 bk7fHByDM.net
言語の限界に挑む系のチャレンジかなんかしてるのかそれ。
27:デフォルトの名無しさん
18/12/07 18:02:53.57 L+lXnzjp0.net
interface Hoge {
__void anonymousMethod();
}
...
List<Object> al = new ArrayList<>();
al.add(new Hoge {
__int anonymousField = 5;
__void anonymousMethod() {
____System.out.println(anonymousField);
__}
});
((Hoge) al.get(0)).anonymousMethod();
普通はList<Hoge>として、下のキャストを要らないようにする分けだが。
28:デフォルトの名無しさん
18/12/07 18:14:33.74 8/WIy6eid.net
他で呼ぶことを目的とするなら匿名クラスにしてはだめでは?
29:22
18/12/07 18:24:24.58 5Mie+W080.net
>>26
そんな大層なことではありませんが…。
>>27
>>28
ありがとうございました。
では匿名クラス内のメンバ(特にメソッド)の存在意義って何なのでしょうか?
30:デフォルトの名無しさん
18/12/07 18:39:34.95 qRyaIDL9a.net
>>29
そのクラス内で処理を分けて起きたい時に作る。
呼び出されるメソッド一つに全て書くとわかりづらくなる時とかね。
31:デフォルトの名無しさん
18/12/07 18:44:34.94 8/WIy6eid.net
渡した先で処理させるのにitemを厳密にしなくてすむ
>>25の例で言うなら自分で作ったcollectionクラスにanonymousMethodをなんか処理する機能をつけてやれば
渡すitemはanonymousMethodを持ってれば匿名でも実体があっても良くなる
32:22
18/12/07 23:44:22.73 5Mie+W080.net
>>30
>>31
ありがとうございました。
33:デフォルトの名無しさん
18/12/13 23:17:41.00 kncoc2aJ0.net
総称型の派生的な定義を一元化したいです。
class ClassA<T1>{}
とあるとき、T2 extends T1とか、T3 extends ClassB<T1>とかを定義したい。
しかしT1の横に並べるとClassAの子クラスにおいて指定する必要が生じます。
ClassA<T1, T2 extends T1> こうしたくない。
ClassAChild extends ClassA<T1Concrete, T2Concrete>みたいにT2Concreteの指定が生じるから。
しかしクラスに定義しないとメソッド毎に総称型の定義が必要になります。
T1だけを指定するという状況を保ったまま、T1に依存した他の派生的な総称型をクラス内で定義したい。
これは可能ですか?
34:デフォルトの名無しさん
18/12/13 23:40:07.10 Dzj4x6Rs0.net
>>33
こういうこと?
class A<T> {
class B<U extends T> {
}
}
35:デフォルトの名無しさん
18/12/13 23:44:58.06 kncoc2aJ0.net
class ClassA<T1>{
public <T2 extends T1> T2 method1();
public <T2 extends T1> T2 method2();
public <T2 extends T1> T2 method3();
}
このようにメソッド毎に総称型を定義するのが嫌なので、クラスのところで指定したいのですが、
そうすると子クラスでT1から自動的に決定するものをわざわざ指定しないといけません。
class ClassA<T1, T2 extends T1>{//子クラスでT2を指定する必要が発生
public T2 method1();
public T2 method2();
public T2 method3();
}
36:デフォルトの名無しさん
18/12/13 23:51:34.03 kncoc2aJ0.net
別の方法で解決できそうです。ありがとうございました
37:デフォルトの名無しさん
18/12/14 03:07:35.09 068kLwWW0.net
>>36
どんな方法ですか?
38:デフォルトの名無しさん
19/01/05 19:38:28.30 oWM93k/k0.net
以下のコードでifの中が実行されない理由がわかりません
条件がtrueなので実行されると思うのですがなんででしょうか
class Sample{
static double total;
int a = 2, b= 3;
public static void main (String[] args){
double x, a, b;
if (total == 0){
a = 3;
b = 4;
x = 0.5;
}
total = x * a * b;
System.out.println(total);
}
}
39:デフォルトの名無しさん
19/01/05 19:55:28.65 tCoREms1a.net
>>38
なぜtrueだと思うのか説明しなさい
40:デフォルトの名無しさん
19/01/05 20:09:53.68 oWM93k/k0.net
>>39
System.out.print(total == 0)がtrueだったからです
41:デフォルトの名無しさん
19/01/05 23:15:07.20 Mw4M2zcY0.net
新たにビルドしなおしたものを実行していたつもりがエラーになってて古いやつをずっと実行し続けてた的なやつだな。
とりあえずこれ10回詠唱しとけ
「コンパイラの出力は御経じゃない」
42:デフォルトの名無しさん
19/01/06 00:29:12.69 +dMvWsVO0.net
>>41
内容はJavaSE8Silverの問題集に出ていたものです
解説ではif文の中身が実行されないので初期化によるエラーが出るって書いてあり、
そのことは実際にideoneとかで実行し理解してるのですが
なぜtrueにならないのかがわからないということです
43:デフォルトの名無しさん
19/01/06 00:41:35.13 zpMal+Wd0.net
>>42
えっと、実行時には条件はtrueになるよ
コンパイル時にはtrueになることがわからんので
コンパイラが初期化されないかもってエラー投げるだけっすよ
44:デフォルトの名無しさん
19/01/06 00:49:02.45 zpMal+Wd0.net
↓これでもエラーになるんで変数が条件式にあるとダメみたいね、リテラルならおk
public static void main(String[] args) {
boolean a = true;
int b;
if (a) {
b = 2;
}
System.out.println(b);
}
45:デフォルトの名無しさん
19/01/06 00:59:14.50 a7U3YVJ70.net
>>42
そもそもコンパイル通らなくね?
条件が true になるかどうか以前の問題
>解説ではif文の中身が実行されないので初期化によるエラーが出るって書いてあり
これが本当なら説明がおかしいな
if文云々というより単に宣言された x, a, b が初期化されてないからコンパイルエラーになる
if文の中身がtrueになって{}の中が実行されて値が初期化されるかどうかは保証されない
46:デフォルトの名無しさん
19/01/06 01:10:49.61 T+vTBvBg0.net
JavaSilverはコンパイル通らないコードについても出題されるからね
初期化によるエラー云々はコンパイラーが吐くエラーメッセージの事
47:を指していると思われ
48:デフォルトの名無しさん
19/01/06 01:11:57.31 +dMvWsVO0.net
>>43-44
ありがとうございます!助かりました
>>45
本ではif文の条件に合致せず初期化せずにtotal=x*a*bを計算するのでエラーになる
って書いてたのですが…解説がおかしいかどうかはjava初心者なのでよくわかりません
49:デフォルトの名無しさん
19/01/06 01:55:23.01 dAFYlv7A0.net
コンパイラとしては実行されるまで if の条件が成立するかどうかわからないため、成立する場合と成立しない場合の両方を考慮しているだけではないかな?
で、今回のプログラムの場合は条件が成立しないと初期化されない変数が出てくるためコンパイルエラーになる。
50:デフォルトの名無しさん
19/01/09 16:45:54.79 aoiPLBBd0.net
HDDバースト事件知ってますか?
URLリンク(wikiwiki.jp)
この手の、ファイル削除系の処理で一歩間違えれば大惨事、というのを防ぐ良い方法はありますか?
51:デフォルトの名無しさん
19/01/09 21:22:34.95 xuLfg6C4a.net
なんだ物理的にバーストした話じゃないのか
52:デフォルトの名無しさん
19/01/10 01:03:37.33 V4IVFX9Qd.net
>>49
健常者に開発させる
53:デフォルトの名無しさん
19/01/10 13:56:48.41 6faDHrU6a.net
質問です
柴田望洋Javaアルゴリズム本の演習の模範解答に
( (n+1) * (n/2) + (n%2 == 1 ? (n+1)/2 : 0) )
というコードがありました。これを数学っぽく自分が翻訳すると
(1)n/2の余りが1のとき
(n+1)*(n/2) + (n+1)/2
(2)n/2の余りが1でないとき
(n+1)*(n/2) + 0
だと思ったのですが、実際にn=3やn=7を代入して実行してみると(1)と同じ答えになりません。
1からnまでの公差1の等差数列の和ということで手作業で計算してみても実際に(1)はどこかおかしいみたいです。
どなたか(1)の何が変なのか教えてください。
54:デフォルトの名無しさん
19/01/10 15:03:26.18 4z6CKeNUr.net
>>52
int型だと例えばn=7のときにn/2は3になるってだけでは
そのせいで手計算とズレるんでしょ
55:デフォルトの名無しさん
19/01/10 20:26:17.36 UUY7OixDM.net
>>52
整数同士の割り算は切り捨て
56:デフォルトの名無しさん
19/01/11 09:08:48.15 e5yPN/cUa.net
>>53-54
ありがとうございます。それで解答だと場合分けしてたんですね
場合分けしたくない場合はdoubleで計算して小数点以下が邪魔に感じられたら計算終えてからintにキャストすればいいんでしょうか。遅くなるのかな
57:デフォルトの名無しさん
19/01/11 10:10:51.79 se94ZxIpM.net
>>55
doubleからintにキャストするときも0.9999は0に切り捨てられてしまうから、Math.roundを使ったほうがいいよ。
計算途中で絶対に小数にならない保証があるなら、おそらく52bitまでならそのままdoubleを整数にキャストできるけども
58:デフォルトの名無しさん
19/01/13 01:54:50.84 Byt7I9dTa.net
>>56
なるほどなるほど。ありがとうございます。
59:デフォルトの名無しさん
19/02/12 23:11:33.01 VqanzRzk0.net
syncronizedMapとConcurrentHashMapってConcurrentHashMapの方がいいのかな
60:デフォルトの名無しさん
19/02/12 23:46:42.62 eVAdyGJj0.net
せやな
61:デフォルトの名無しさん
19/02/14 21:29:20.64 0iIJdx51a.net
マルチプラットフォームなデスクトップアプリを作るのにJavaを愛用していましたがJavaFXはオプションになるしそもそもJDK/JREもいつまで使えるかわからないので乗換先の言語を探しています。
- GUIアプリを標準で作れる
- マルチプラットフォーム
- できればコンパイラ言語
- 学習コストが低い
でおすすめは何でしょうか?
ご教示方よろしくお願いいたします。
62:デフォルトの名無しさん
19/02/15 04:13:32.67 aMcTHSTs0.net
JavaからならC#だけど
どこまでやるかだな
Macを入れるか入れないかとか
何系作ってるの?
63:デフォルトの名無しさん
19/02/15 06:17:17.01 yAjWMCK+0.net
c#だとGUIのコード共通化厳しいのでは。
Win+Macなら今さらだけどAdobeAirとか。証券会社のアプリとかで生き残っている。
LinuxもGUI共通化必要なら、現実的なのはjavaくらいしか知らない。
64:デフォルトの名無しさん
19/02/15 21:23:54.83 FjaN5554M.net
条件がGUI共通化だけならElectronとかWeb系かな
PWAはどうなってるか知らんけどその内流行るんだろう
65:デフォルトの名無しさん
19/02/21 12:06:27.49 LculVqLN0.net
これがb=aのとこでコンパイルエラーになる理由は何ですか?
AはTestIを継承したもの、TestClassはTestIを実装している。
総称型の限定において継承と実装は区別されてるんですか?
public static interface TestI {}
public static class TestClass implements TestI {}
private <A extends TestI> void f(TestClass a) {
A b = a;
}
66:デフォルトの名無しさん
19/02/21 19:48:36.10 fprmeCB00.net
>>64
TestI <- A
TestI <- TestClass
でTestClassをAに変換できないって出てるんでしょ
AはTestIを実装する任意のクラスだから
TestClassから変換できないのは当然のような
67:デフォルトの名無しさん
19/02/21 20:51:00.87 LculVqLN0.net
あーそうか
わかりました。ありがとう
68:デフォルトの名無しさん
19/02/27 04:09:48.78 ZxiXIgw80.net
interfaceでthisの型をメソッドの引数に使う方法はありますか?総称型を使わずに
これができないとequals的な自クラスの他オブジェクトを受け取るタイプのインターフェースのために
総称型を指定しなきゃいけないので面倒です
public interface TestI{
void method(ThisClass o);
}
69:デフォルトの名無しさん
19/02/27 07:02:08.01 R7mDgiP40.net
面倒も何もそれが総称型の意義です
要はComparableみたいなもんでしょ
70:デフォルトの名無しさん
19/02/27 08:45:57.23 Gr4hh2OI0.net
public interface TestI<T extends ThisClass >{
void method(T o);
}
71:デフォルトの名無しさん
19/02/27 08:51:23.70 Gr4hh2OI0.net
別に面倒でも何でもないよ。
methodの引数でThisClassの子クラスを受け取ったとしても、
intanceofとかする必要は全くない。
72:デフォルトの名無しさん
19/02/27 12:39:12.56 0d3JNljSM.net
void method(Testl t)じゃあかんの?
73:デフォルトの名無しさん
19/02/27 12:57:07.94 avwBchUKa.net
>>71
それ毎回キャストが要るやん
74:デフォルトの名無しさん
19/02/27 14:30:01.32 ZxiXIgw80.net
でも"thisの型"をデフォルトで使えても良いと思いませんか?
オブジェクトが使用される時常に明らかになっているはずです。
つまり記述を省略できても良い
75:デフォルトの名無しさん
19/02/27 15:19:00.05 Gr4hh2OI0.net
equals()については、互換性維持。
できないものはできない。
自分で定義するものについては、ジェネリクス使えばよい。
76:デフォルトの名無しさん
19/02/27 16:09:27.46 ZxiXIgw80.net
public interface TestI<T extends TestI>{
void method(T o);
}
こう書くと警告でます。extends TestIのところで
TestI<?>と書くんですか?
77:デフォルトの名無しさん
19/02/27 17:50:52.58 avwBchUKa.net
待って、それを知らずに面倒とか言ってたの
Testl<T>でいいんだよ……
78:デフォルトの名無しさん
19/02/27 18:38:23.32 ZxiXIgw80.net
それでも出来るのは最初から分かってるんですが、
意味的にTestIを実装したものしかそこに書かないでしょう?
だからその前提を記述しておきたいという話です。
79:デフォルトの名無しさん
19/02/27 18:40:40.28 ZxiXIgw80.net
あと面倒と言ってるのはそのインターフェースを実装しているクラス、
さらにそのクラスを継承したクラス、さらにそれを継承したクラスと
記述箇所が一斉に増えるからです。
抽象クラスが実装しているインターフェースにこういう要件が発生すると実際かなり面倒であることは想像できるはずです。
80:デフォルトの名無しさん
19/02/27 18:43:33.03 ZxiXIgw80.net
public abstract class AbClass<T extends AbClass> implements TestI<T>{
}
public abstract class AbClass2<T extends AbClass2> extends AbClass<T>{}
このように次々と続いていくことになります。
そしてこれらすべてで警告が出ます。
81:デフォルトの名無しさん
19/02/27 18:51:04.99 ZxiXIgw80.net
上にもありましたがComparable的なインターフェースという事になりますが
このようなインターフェースを継承ツリーの上の方で実装すると問題になります。
通常のインターフェースや、通常の総称型インターフェースでは問題無いんですが、
このようなインターフェースはたびたび継承ツリーの各クラスでそのクラスについての実装を記述する事になります。
だから、thisの型が予約語として扱えると非常に便利だろうと。
82:デフォルトの名無しさん
19/02/27 19:46:32.65 K3ri/4ZM0.net
再帰ジェネリクスの話ししてる?
違ったらごめん
interface TestI<T extends TestI<T>>{
T method(T o);
}
abstract class AbClass<T extends AbClass<T>> implements TestI<T>{ }
abstract class AbClass2<T extends AbClass2<T>> extends AbClass<T>{}
abstract class AbClass3<T extends AbClass3<T>> extends AbClass2<T>{}
83:75
19/02/27 21:45:06.35 ZxiXIgw80.net
>>81
できました。
84:デフォルトの名無しさん
19/02/27 23:40:06.72 K3ri/4ZM0.net
>>82
良かったです
85:デフォルトの名無しさん
19/02/28 08:07:59.94 RsBX7ota0.net
AbClass<T extends AbClass<T>>
こういうのってどういうのを想定してるの?
シングルトンではないenumみたいなもの?
86:デフォルトの名無しさん
19/02/28 17:19:13.77 X2FmV3yG0.net
継承ツリーの各クラスでTが連鎖的に定義されるような状況があるとき
extends AbClass1<T>の意味は、末端の具象クラスで総称型に指定されたTが
一番上の抽象クラスまで連鎖的に指定されている事を要求しているような意味がある。
87:デフォルトの名無しさん
19/02/28 17:23:29.93 X2FmV3yG0.net
AbClass<T extends AbClass<T>>これの
extends AbClass<T>この部分の意味は、って話
88:デフォルトの名無しさん
19/03/01 23:04:20.59 KZb5YrRoa.net
>>84
抽象クラスで定義したメソッドで自分の未知のサブクラス返すときとか
89:デフォルトの名無しさん
19/03/04 16:25:49.04 v/u/gYja0.net
URLリンク(detail.chiebukuro.yahoo.co.jp)
Javaプログラム(MIDI)TransmitterとReceiverと標準Synthesizer
下記のプログラムで音がなります
Sequencer sequencer = MidiSystem.getSequencer();
File myMidiFile = new File("d:/tw008.m
id");
Sequence mySeq = MidiSystem.getSequence(myMidiFile);
sequencer.setSequence(mySeq);
sequencer.open();
System.out.println("start");
sequencer.start();
Thread.sleep(60000);
ところが、SynthesizerをCloseしても、Receiverを指定しても、
標準のMIDI音源がなりつづけています。この音をけして、
自作アプリのルーチンだけにMIDIを流す手法をご存知の方いらっしゃいますか?
Windows10+JDK1.8を使用しています。
90:デフォルトの名無しさん
19/03/04 19:33:49.60 v/u/gYja0.net
解決しました
91:デフォルトの名無しさん
19/03/04 21:04:50.65 /O719wMt0.net
解決した方法ぐらい書けよクソが
92:デフォルトの名無しさん
19/03/04 21:09:40.54 v/u/gYja0.net
getSequencer(true)
または
getSequencer(false)
で
オブジェクト思考じゃないシンセサイザーが
くっつくかどうか決まる
URLリンク(osdn.net)
の
URLリンク(osdn.net)
で早速使いました
93:デフォルトの名無しさん
19/03/04 22:05:35.70 v/u/gYja0.net
javaは隠してるメソッド多いよね
今回のは過去のソースの動作などの
整合性のためだと思うけどさ
肝に銘じて作りこんでいきます
4時間悩んでjavadocみたら5秒で解決したわ
94:デフォルトの名無しさん
19/03/05 20:19:30.79 EdVc4MwEM.net
>>92
そういうのは非推奨になってないか?
95:fusianasan
19/03/06 02:05:18.33 n2VNtnMC0.net
交差型キャストの使い道、ある?
96:デフォルトの名無しさん
19/03/06 02:12:58.66 n2VNtnMC0.net
ついでにListの要素をEnumしか取れなくしたEnumListみたいなのある?(ググり済み)
97:デフォルトの名無しさん
19/03/06 12:33:32.69 twdiy1n8M.net
>>95
List<Enum>じゃあかんのか?
98:デフォルトの名無しさん
19/03/06 14:46:27.86 n2VNtnMC0.net
>>96
EnumSetとかEnumMapみたいな省メモリな実装があったらいいなーと思って
99:デフォルトの名無しさん
19/03/06 18:26:17.49 twdiy1n8M.net
>>97
ないよ♪
100:デフォルトの名無しさん
19/03/06 18:31:31.19 izEJjivba.net
重複がないからこそ連番の配列として扱えてるのに、重複が許されるリストじゃやりようがない
101:デフォルトの名無しさん
19/03/07 12:03:41.01 gGJGAOob0.net
べき乗の計算式を作りたいのですがうまくいきません
(例)
a=5;
a=a^2;
上記の例のようにしても、結果が25になりません
Javaではべき乗計算はサポートしていないのでしょうか?
102:デフォルトの名無しさん
19/03/07 12:36:39.64 p9KSjCQy0.net
ワロタ。演算子じゃなくてそういうメソッドがあるはず。Mathクラスのメソッド調べてみん
103:デフォルトの名無しさん
19/03/07 12:47:48.74 NXRNz+RGa.net
>>100
ない。Math.pow()使う。
URLリンク(www.javadrive.jp)
104:デフォルトの名無しさん
19/03/07 12:56:15.23 fEnrnvq10.net
>>100
VB系?なんで他の言語と同じだと思うのか?
105:デフォルトの名無しさん
19/03/07 17:27:05.50 GsPaI+yW0.net
XORは大昔自前のカーソルを作った時に使った記憶がある。
覚えている限りその後1度も使ってない。
106:デフォルトの名無しさん
19/03/07 17:42:58.27 5OHvHrCkM.net
>>103
演算子ってだいたいどれも同じでしょ
Javaが変態じゃなければ
107:デフォルトの名無しさん
19/03/07 20:29:39.29 wbxrkc+00.net
VBは変態
108:デフォルトの名無しさん
19/03/07 20:37:45.84 NXRNz+RGa.net
よくぞ私が変態であることを見破った。
君も仲間にしてあげよう。
109:デフォルトの名無しさん
19/03/07 20:58:32.73 wbxrkc+00.net
俺は満月の夜に変態する
110:デフォルトの名無しさん
19/03/07 23:01:15.30 fEnrnvq10.net
>>105
同じじゃないよ。
111:デフォルトの名無しさん
19/03/07 23:02:42.20 oTfLqBj1a.net
Scala「演算子ってなんだっけ」
112:デフォルトの名無しさん
19/03/08 06:06:53.29 hih03Kc60.net
>>109
同じだとは言ってない
113:デフォルトの名無しさん
19/03/09 17:58:45.34 IPK2i5wVa.net
二項^は言語によって意味が違う筆頭だから。
>>94
交差型へのキャストそのものが目的でないならラムダ式をSerializableやCloneableにするためかな。
(Lambda & Serializable)や(Lambda & Cloneable)でキャストするとコンパイラがSerializableやCloneableを導出する。
114:デフォルトの名無しさん
19/03/11 23:15:46.61 +cXkYAGY0.net
>>112
ラムダをシリアライズとかきもいし、cloneできるようにするっていうのもキモいな…なんでだろう
それはともかく解説ありがとう
115:デフォルトの名無しさん
19/03/15 10:24:40.99 Ok3y758Id.net
servletの質問です
httpServletを継承したクラスで、web.xmlに記載されたコンテキストの初期化パラメータにアクセスしたいとき、まずServletContextオブジェクトを取得すると思います。
this.getServletContext()
と
getServletConfig().getServletContext()
その方法として上記2つがあるようですが、
ServletConfigオブジェクトを経由するかしないかの違いだけで、
どちらでも同じオブジェクトを得られると考えて大丈夫でしょうか?
また、どちらの方法が推奨される、または一般的などありますか?
116:デフォルトの名無しさん
19/03/15 15:28:02.60 oN7LPR9/0.net
上は下のショートカット。
のはずなんだけど、どの実装だったか忘れた(tomcatかjetty)けど、上だとnullを返すものがあったりする。
117:デフォルトの名無しさん
19/03/15 16:26:03.07 qau92T4C0.net
作ったプログラムがきちんと動作しそうもない初心者の匂い
118:デフォルトの名無しさん
19/03/17 20:07:31.39 WG0MhxwJ0.net
順序を保証しないコンテナ系オブジェクトは同じ順番で同じ値を入力したとして
シリアライズした時のバイナリの一致を保証しますか?
@Test
public void serializeTest() {
Map<Integer, byte[]> m1 = new HashMap<>();
Map<Integer, byte[]> m2 = new HashMap<>();
Random rnd = new Random();
try {
for (int j = 0; j < 1000; j++) {
m1.clear();
m2.clear();
for (int i = 0; i < 1000; i++) {
byte[] v = new byte[32];
rnd.nextBytes(v);
m1.put(i, v);
m2.put(i, v);
}
byte[] b1 = serialize(m1);
byte[] b2 = serialize(m2);
if (!Arrays.equals(b1, b2)) {//b1,b2の同値性が保証されるか?
System.out.println("false");
}
}
} catch (Exception e) {
}
}
119:デフォルトの名無しさん
19/03/17 20:09:43.63 WG0MhxwJ0.net
private byte[] serialize(Object o) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(o);
out.flush();
return bos.toByteArray();
} catch (Exception e) {
return null;
} finally {
try {
bos.close();
} catch (IOException ex) {
}
}
}
120:デフォルトの名無しさん
19/03/17 20:11:36.70 WG0MhxwJ0.net
実行時のメモリ状況とかなんかそういうものに依存して変わってしまうのかどうか。
HashMapでなくConcurrentHashMapはどうか、HashSetはどうかとか、知りたいです。
121:デフォルトの名無しさん
19/03/18 18:40:58.81 dcUw/hqV0.net
自分で確かめてみればいいのに(΄◉◞౪◟◉`)
予想としてはちゃんと復元できると思うけど
122:デフォルトの名無しさん
19/03/18 18:46:45.54 YtFzpwnZM.net
たまたま同じになるのか
必ずそうなるのか確証が欲しいのでござろうよ
123:デフォルトの名無しさん
19/03/18 18:50:01.07 cWWfW/xk0.net
復元できるか、じゃなくて
どんな実行時状態でシリアライズしてもバイナリレベルで同値になるか、が知りたい
124:デフォルトの名無しさん
19/03/18 22:49:36.52 XEyYngRi0.net
>>122
ま、おそらく同一でしょう。
URLリンク(ideone.com)
125:デフォルトの名無しさん
19/03/18 23:48:32.22 Hb2NJ3+s0.net
保証とかいってるから、そんな何々だろうレベルの言質じゃなくて仕様書レベルを求めてるんじゃねぇかな
126:デフォルトの名無しさん
19/03/18 23:55:46.27 5wxGaqei0.net
オラクルは儲かってるのかな?
127:デフォルトの名無しさん
19/03/19 09:51:49.84 9FtXmaQk0.net
おそらく計算機のど素人と推察される
128:デフォルトの名無しさん
19/03/20 04:13:13.63 P9Hv23UK0.net
Java SE 12
URLリンク(www.oracle.com)
129:デフォルトの名無しさん
19/03/21 01:07:42.56 KPwU/5400.net
業務で全部テストをパスしても100%瑕疵がないことを保証できないのと同じ
そんなに確実にしたいんだったらJavaの言語規格とjava.util.HashMapのソースでも嫁
130:デフォルトの名無しさん
19/03/27 22:59:38.84 o4Iu/UDza.net
なんで順序持たないコレクションの順序が常に一致すると思うの?
>順序を保証しないコンテナ系オブジェクトは同じ順番で同じ値を入力したとして
最初の8文字で答え出てるし、
>どんな実行時状態でシリアライズしてもバイナリレベルで同値になるか
これに至ってはそんな事ある訳ないじゃん。
> This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.
仕様に書いてある。
>>126の言う通りだろう。
131:デフォルトの名無しさん
19/03/27 23:36:48.05 BBWM5zqe0.net
goのように意図的にランダムにしない限り
一致すると思うけどね実装が変わるわけじゃないし
状態も同じになるっしょ
132:デフォルトの名無しさん
19/03/27 23:39:11.95 BBWM5zqe0.net
>>129
ハッシュテーブルがリサイズされるから保証されないだけなんじゃないかな、普通に考えてインスタンス生成して同じ数の同じデータ打ち込んだら同じ並びになると思うけど
133:デフォルトの名無しさん
19/03/27 23:43:26.75 i+BOT5k20.net
素人が素人のフォローw
>どんな実行時状態でシリアライズして
>普通
134:デフォルトの名無しさん
19/03/27 23:47:11.56 BBWM5zqe0.net
>>132
シリアライズされる状態は一つじゃん
デシリアライズのたびに状態が変わるとは思えないなあ
135:デフォルトの名無しさん
19/03/27 23:48:33.66 BBWM5zqe0.net
チミたち考えが浅いよ薄っぺらい
136:デフォルトの名無しさん
19/03/27 23:52:10.28 BBWM5zqe0.net
質問者は鋭いよ
それに気づく僕も賢い
回答者は残念
137:デフォルトの名無しさん
19/03/28 02:21:03.21 fobYAqGk0.net
>>133
素人さんこんばんは
138:デフォルトの名無しさん
19/03/28 06:06:45.69 m1sw7rzN0.net
>>136
お前が素人
139:デフォルトの名無しさん
19/03/28 07:12:09.21 HZOnw3MEM.net
質問者は「保証しますか?」って聞いてるのにID:BBWM5zqe0は「思えないなあ」とかw
グダグダ言う前にもう少し落ち着いて質問読み返せよ
140:デフォルトの名無しさん
19/03/28 07:40:15.21 m1sw7rzN0.net
>>138
保証されるかはわからないが僕の結論
>>129は質問の本質を
141:理解してなかったようだから それはおかしいよって
142:デフォルトの名無しさん
19/03/28 07:43:49.09 m1sw7rzN0.net
質問読み直したけど129はアホ
143:デフォルトの名無しさん
19/03/28 08:13:59.98 HZOnw3MEM.net
どうみてもお前の方がアホとしか見えないけど…
144:デフォルトの名無しさん
19/03/28 08:27:35.24 td1zwKnnM.net
順番が保証されないコレクションの説明は
シリアライズでバイナリが一致することは保証されない
ことを意味するものではない
ニンジンが赤いからブタさんはピンク色なんだと言ってるようなもの
145:デフォルトの名無しさん
19/03/28 08:46:48.07 8uqRVz3RM.net
関連がありそうなものをあげてるだけで論理も何もない
雰囲気でJavaをやってるのかと
葉加瀬太郎をググったらパパイヤ鈴木が
表示されたから二人はプリキュアと言ってるようなものでしょうが!
ちなみに僕はJavaに魂と全財産を捧げる覚悟です
146:デフォルトの名無しさん
19/03/28 08:48:02.48 8uqRVz3RM.net
僕今汽車に乗ってるからip変わるよ
文体でわかるでしょ
147:デフォルトの名無しさん
19/03/28 08:57:19.80 8uqRVz3RM.net
素人呼ばわりしたことを僕に謝って欲しい
僕はJavaに残りの人生すべてかけてる
子供も恋人も友達も作らなかった
僕は30億のデバイスで動くJavaと共に生きるんだ
148:デフォルトの名無しさん
19/03/28 09:08:31.13 cT63rms5M.net
>>143
スゲェたとえw
149:デフォルトの名無しさん
19/03/28 12:30:23.43 yd30y0n6M.net
>>142
> シリアライズでバイナリが一致することは保証されない
> ことを意味するものではない
内部の順序は違うけどシリアライズする時には常に同じ順序でシリアライズするとか普通はやらないからやると言うならその根拠出してくれ
150:デフォルトの名無しさん
19/03/28 18:55:29.38 8uqRVz3RM.net
>>147
僕そんなこと言ってないから
その根拠出さない
151:デフォルトの名無しさん
19/03/28 20:13:48.28 .net
Java歴2年ぐらいです
Javaで独自のファイルリネームソフト作りたいんだけど、今の時代のJavaでのGUIに丁度いいフレームワークやライブラリって何がある?
5年ぐらい前にちょっとSwingに触れたんだけど、他にもあるみたいで、どう違うのかが分からない
それぞれの違いも強みも分からないんだが、何かアドバイスある?
152:デフォルトの名無しさん
19/03/28 21:05:44.98 KhTRBxbZa.net
シーン
153:デフォルトの名無しさん
19/03/28 21:09:30.98 .net
Javaの入門書やJavaでのWeb関連の入門書については本は沢山出てるのに
GUIとなると全然本が無い
俺はJavaしか知らないからJavaだけでGUIやりたいのに
154:デフォルトの名無しさん
19/03/28 21:10:36.27 KhTRBxbZa.net
AWTでも使っとけ
155:デフォルトの名無しさん
19/03/28 21:26:32.87 DnYr279r0.net
FXが新しいけど
156:デフォルトの名無しさん
19/03/28 21:27:09.63 ccwG1GmHM.net
あれ消えたんじゃなかったっけ?
157:デフォルトの名無しさん
19/03/28 21:44:55.82 DnYr279r0.net
Java SE 11で止めたみたいね
158:デフォルトの名無しさん
19/03/28 21:59:24.58 .net
じゃあJavaでGUIってどうなんの?
そもそも想定されてないの?
159:デフォルトの名無しさん
19/03/28 22:40:07.29 eBl2daiha.net
ググれば山のように出てくるのに何で聞くの?
160:デフォルトの名無しさん
19/03/28 22:54:34.01 K2f2dATQM.net
ID消してる奴とか相手にするなよ
161:デフォルトの名無しさん
19/03/29 00:02:31.06 .net
とっかかりの所だけ教えて欲しい
アマゾンで書籍を検索してもSwingだのJavaFXだのヒットしても出版年がどれも4,5年以上前のモノばっかり
俺は新しい技術で学習したいのに、仮にSwingで学んだとしても世間で役に立たなくなってしまうようなのはさすがにいや
162:デフォルトの名無しさん
19/03/29 03:35:37.24 SC13fhfQ0.net
>>154
JDKに含めて配布するのを止めただけでは?あのライブラリそのものはフリーで生き続けてると思うが。
163:デフォルトの名無しさん
19/03/29 03:37:10.81 SC13fhfQ0.net
>>159 君が新しいの作って世界中に広めれば良い。
165:デフォルトの名無しさん
19/03/29 06:19:17.41 K/KVc7630.net
>>159
Java自体の先行きが怪しいのに…
166:デフォルトの名無しさん
19/03/29 12:23:07.42 6mM1A6nEa.net
>>159
まあでも4,5年は生き残っている技術ではあるわけで
最新の技術は明日消えてもおかしくない
swing, spring, javafx あたりでいいんじゃないの
個人的には java そのものを進めないけどな
167:デフォルトの名無しさん
19/03/29 13:43:50.35 yvHYr2oUa.net
Kotlinもよろしく
168:デフォルトの名無しさん
19/03/29 14:20:06.19 sD1xGsa70.net
>>159
Swingが一番いい。昔から安定してるし、使いやすいし、
分かり易く、美しく、プログラマからはコントロールしやすい。
恐らく現存する ToolKit の中でも最も美しい設計だと思われる。
169:デフォルトの名無しさん
19/03/29 17:55:11.26 ueEql8o20.net
Kotlinだと探せば、Swingを美しくラップしてくれるライブラリとかありそうだけどな。
DSLで宣言的に書けるような。
170:デフォルトの名無しさん
19/03/29 18:49:42.37 Zeo6kkdW0.net
>>159
Java FXは死亡したのでSwingを使うことになるが
Swingは全然新しくなってないので古い資料で十分
新しくなる見込みもない
「JavaGUIプログラミング JavaSE6対応」のVol.1とVol.2買っとけ
171:デフォルトの名無しさん
19/03/29 20:21:36.86 llWWvfq2r.net
swingがいいと思う。
pure java で使いやすい。
172:デフォルトの名無しさん
19/03/29 20:54:44.53 yvHYr2oUa.net
え?Swing はベースが awt だから pure java ではないよな?
173:デフォルトの名無しさん
19/03/29 21:02:05.08 FFMJozVB0.net
私の小鳥は何処?
174:デフォルトの名無しさん
19/03/29 22:41:41.56 jCJGGG5lM.net
>>169
ん?
175:デフォルトの名無しさん
19/03/29 22:59:32.50 llWWvfq2r.net
ちょっと何言ってんのか分かんないっす。
176:デフォルトの名無しさん
19/03/29 23:02:34.96 FFMJozVB0.net
馬鹿乙
177:デフォルトの名無しさん
19/03/30 17:29:34.66 2+xyc9oI0.net
初心者なんですがクラスでインポートしたクラスインスタンスを作った後にそのインスタンスをメインメソッドで呼び出すって事は出来ないんですか?
178:デフォルトの名無しさん
19/03/30 19:26:42.86 M3wvGATb0.net
>>174
ちゃんと説明して!
179:デフォルトの名無しさん
19/03/30 20:43:48.96 ngbl3dxd0.net
>>175
ちゃんとエスパーしてください
180:デフォルトの名無しさん
19/03/30 20:54:22.07 XWeRwMKO0.net
こんな感じか
public class Test{
static String s = new String("a");
public static void main(String[] args){
System.out.println (s) ;
}
}
181:デフォルトの名無しさん
19/03/31 02:11:44.91 9aPRYZvk0.net
えーとですね例えばリストクラスとかをあるクラスにインポートしてインスタンス化した後そのインスタンスをメインメソッドのあるクラスで呼んで使う場合どうすればいいのかと考えたんです。
今のところメインメソッドのあるクラスでしかインポートした事ないので他のクラスでリストなどの配列処理をさせてその処理の結果をメインメソッドで出力したいのです。
182:デフォルトの名無しさん
19/03/31 06:06:39.63 x4Dlbn8C0.net
>>178
そのクラスのメソッドから List のインスタンス返せば良いだけでは?
何に悩んでるかよくわからない。
183:デフォルトの名無しさん
19/03/31 09:18:12.51 RM3UTWN00.net
staticメソッドとインスタンスメソッドの区別がついてないだけだろ。
184:デフォルトの名無しさん
19/03/31 10:00:29.29 bS6sgKsX0.net
staticでない変数をstaticコンテキストから参照することはできません
185:デフォルトの名無しさん
19/03/31 10:11:45.90 CwgH065r0.net
>>179
返信ありがとうございます
そのやり方をコードで見せてもらえませんか?
186:デフォルトの名無しさん
19/03/31 10:14:59.85 5L0dnt340.net
これでいいんじゃね?何も難しいことない。
*** TestMain.java ***
package testPackage;
import java.util.List;
public class TestMain {
public static void main(String[] args) {
TestSub testSub = new TestSub();
List<String> myList = testSub.getList();
System.out.println(myList);
}
}
*** TestSub.java ***
package testPackage;
import java.util.ArrayList;
import java.util.List;
public class TestSub {
public List<String> getList() {
List<String> strList = new ArrayList<>();
strList.add("a");
strList.add("b");
return strList;
}
}
187:デフォルトの名無しさん
19/03/31 10:21:19.41 dQUnpGay0.net
初心者スレでやれよ
188:デフォルトの名無しさん
19/03/31 10:32:54.83 CwgH065r0.net
>>183
ありがとうございます!!メソッドの中でインスタンスを生成するのとそのインスタンスメソッドをメインメソッドで代入する時の型はどうすればいいのかが分かんなかったんです。
ただ自分のコードで書いたらメインJavaの操作は安全ではありませんと出てコンパイルエラーになる(´・ω・`)
189:デフォルトの名無しさん
19/03/31 10:43:23.73 CwgH065r0.net
調べたらエラーじゃなくて警告なんですね実行できました!!初心者スレでするべきでしたね答えてくれた方々ありがとうございました^_^
190:デフォルトの名無しさん
19/04/01 01:52:33.40 //wZRuJn0.net
>>177
こら!StringのコンストラクタにString渡すんじゃない!
191:デフォルトの名無しさん
19/04/06 13:59:48.50 2ennWA4x0.net
メインアプリのプロジェクトA
そのアップデータのプロジェクトB
があります。メインアプリもアップデータも自己完結型パッケージにして
1個のzipかインストーラでインストールする予定です。
あとBからAのクラスを参照したい。
それで今こう考えてるんですが妥当なのかどうか。
・プロジェクト参照でBの開発中にAのクラスやライブラリを参照することができる
・自己完結型パッケージにするときAとBでclassファイルやjarを共通化できる?
・実行可能ファイルが複数あっても自己完結型パッケージにできる?
192:デフォルトの名無しさん
19/04/06 14:08:17.53 2ennWA4x0.net
疑問を追加します
・自己完結型パッケージにおいて、アップデータを実行しているJREをアップデータが更新できるのか?
193:デフォルトの名無しさん
19/04/06 14:34:50.23 2ennWA4x0.net
加えます。
・Java8よりJava9以降のJigsaw対応バージョンの方が自己完結型パッケージのサイズは小さくなる?
・ライセンスを確認したところ独自のソフトウェアと同梱する場合JDKを再配布しても良いようだった。
URLリンク(www.oracle.com)
>「ユーザーが開発したソフトウェアとともに配布すること」という制限事項があります
・アップデータでインストールされた自己完結型パッケージのJRE部分を丸ごと削除して新しいものに置き換える動作はライセンスの範囲内のように読める。
つまりデスクトップアプリでメインアプリ+アップデータという構成でどうやればいいのかなと。
自己完結型パッケージ+Java8とか考えてるんですが、
OpenJDKなのかOracle JDKなのかとか選択肢が多くてちょっと混乱してます。
194:デフォルトの名無しさん
19/04/06 14:45:29.44 2ennWA4x0.net
・AdoptOpenJDKというのがあり、OracleJDKやOpenJDKなどと異なる”ビルド”であると
説明されますが、ソースコードが同じなのにビルドでどれだけ変わるんですか?
これまでOracleJDKで開発してきたソースコードはAdoptOpenJDKに移行すると問題が生じますか?
195:デフォルトの名無しさん
19/04/06 15:18:21.79 2ennWA4x0.net
Javaのビルドについて考えてるとブラウザのタブがどんどん増えていく・・・
Correttoが良さそうですね。
HotSpotの代用としてGraalVMが作られているようで、じきにこれがHotSpotを性能で上回るでしょう。
しかも少なくとも商業的にはOracleが独占的ライセンスを維持する可能性が高く、
Oracle以外のJREでは利用できないでしょう。
つまりOpenJDKビルドが乱立している状況はHotSpotが自由なライセンスで公開されている事に依存していて、
OracleがGraalを始動させたら終わってしまうかもしれないということです。
現時点でGraalはHotSpotの性能を上回っていません。
196:デフォルトの名無しさん
19/04/07 10:19:05.70 cWSWTJIR0.net
何で自己完結型はJREを含めるのにexeを作るんだ?
同梱されたJREで ./path/to/jre/bin/java app.jar でいいだろ
197:デフォルトの名無しさん
19/04/07 11:27:31.20 PGBDtD6t0.net
それでいくら払えるの?
198:デフォルトの名無しさん
19/04/08 18:05:51.31 wSfHRAdHp.net
ポリモーフィズムって過程はともかく同じメソッドの呼び方で様々な結果が出れば良いって考えなんだけど違う?
199:デフォルトの名無しさん
19/04/08 18:13:17.86 4OqfLsPj0.net
クラス、抽象クラス、interfaceと多数の型を備えている事では?
200:デフォルトの名無しさん
19/04/08 21:56:49.44 +97MZh9m0.net
異なる具象クラスのインスタンスを
まとめてメソッドに渡せる仕組みだと勝手に思ってる
象クラス、麒麟クラス、うさぎクラス
まとめて受け取る動物メソッドみたいなもん
201:デフォルトの名無しさん
19/04/09 01:24:14.25 03qzHG/tM.net
バナナゴリラジャングル問題
202:デフォルトの名無しさん
19/04/09 13:15:30.33 xq+Mg1lAa.net
レールの幅が同じなら違う車両も乗せて走らせられるみたいな
203:デフォルトの名無しさん
19/04/09 22:43:07.81 3cQd1WBf0.net
”様々な結果が出れば良い”
これだと引数が違えば違う結果が出るから妥当じゃない
逆に異なる型の異なるメソッドを呼び出したとしても同じ出力になるかもしれない
1種類の型に対して定義されたメソッドが複数の型に対して機能する、ってことだ
204:デフォルトの名無しさん
19/04/11 23:44:09.20 jdRk1pWI0.net
Function<A, B>とFunction<B, R>を合成してFunction<A, R>にしたい
そしてふたつのConsumer<T>を合成してConsumer<T>にしたい
教えてクレメンス
205:デフォルトの名無しさん
19/04/12 00:40:24.29 lCQDwLY00.net
>>201
andThenメソッドでどう?
206:デフォルトの名無しさん
19/04/12 01:37:06.31 kPkxqpeR0.net
>>200
歴史的な経緯もある。
オーバーロード・オーバー・ライドの多態性が先で、テンプレート(ジェネリクス)が後だから、時代によって勧める多態性が違う。
207:デフォルトの名無しさん
19/04/12 15:11:37.91 f02m+jwt0.net
EclipseでコンパイルレベルJDK11までしか選べないんだけど
まだJDTが12まで対応してないとか?
208:デフォルトの名無しさん
19/04/12 15:23:21.41 f02m+jwt0.net
自己解決。ベータ版のプラグインを入れる必要があったようで
209:デフォルトの名無しさん
19/04/12 16:44:45.43 LhXUTlO1M.net
>>204
eclipseはJDK8と心中だろう
そんな最新のJDK使える開発で未だにeclipseに拘る意味がわからない
いい加減IntelliJに乗り換えろよ
210:デフォルトの名無しさん
19/04/12 16:47:18.07 ob9MV6nx0.net
有料じゃないと使えないとか
211:デフォルトの名無しさん
19/04/12 22:41:55.90 f02m+jwt0.net
IntelliJは使ったこと無いな
NetBeansよりオススメ?
212:デフォルトの名無しさん
19/04/13 00:02:18.39 UkAWtOas0.net
試しにNetBeans, IntelliJ両方入れてみたけど重くてもEclipseのUIが一番でしょ
213:デフォルトの名無しさん
19/04/13 09:14:21.94 zAmtHmMK0.net
Eclipseって立ち上げが異様に遅くない?うちだと2分くらいかかるよ。Windowsのアップデートが来るとうんざりする。
214:デフォルトの名無しさん
19/04/13 19:18:26.87 a4r2Gpw40.net
IBMは何でEclipseで無駄な開発をしたのかね。無償提供して何か報われたのかな。
215:デフォルトの名無しさん
19/04/13 19:27:05.58 vzJQEXVg0.net
当時はeclipseに代わるもの無かったし
216:デフォルトの名無しさん
19/04/13 20:14:34.32 osnUgzxu0.net
>>211
それを言うなら日本はなんでアメリカと戦争したのかね
核を落とされただけじゃないか
217:デフォルトの名無しさん
19/04/13 20:57:38.93 Puj10Jqk0.net
爺さんのプライドのためだよ
218:デフォルトの名無しさん
19/04/14 01:30:00.79 zEHeHyPc0.net
>>202
さんくす
ちゃんと合成できたわ
219:デフォルトの名無しさん
19/04/14 01:33:26.33 zEHeHyPc0.net
>>208
オヌヌメ
UIが好き勝手にできる (そりゃ当たり前か?)しかっこの前にスペースを入れる入れないとか細かい次元で設定もできる、おまけにリファクタリングが充実してる
欠点としてはズームで拡大縮小ができないことぐらいかな
CommunityエディションでもすごいけどUltimateエディションだともっとすごい
OSSとか開発してるならただで手に入るから試してみ
220:デフォルトの名無しさん
19/04/14 11:06:33.13 JuY/4ckm0.net
Kotlinもよろしく
221:デフォルトの名無しさん
19/04/14 22:01:17.23 W2teM0KI0.net
jvmのgcは実際どれくらいのラグを引き起こすものなの?
例えばメモリ1GBくらい使ってるアプリで
222:デフォルトの名無しさん
19/04/14 22:02:44.54 W2teM0KI0.net
java8のGCで。デフォだとパラレルGCだな。
コンカレントGCだとどれくらいなんだろう。
223:デフォルトの名無しさん
19/04/14 22:39:42.36 JOroMq8K0.net
>>216
そんな機能いらんだろ・・・
224:デフォルトの名無しさん
19/04/15 02:16:43.52 cuQSJXma0.net
JVMからデバイスドライバの機能を呼び出す事ってできます?
Javaで特殊デバイスと連携するプログラムは開発できるのかなとおもって
225:デフォルトの名無しさん
19/04/15 10:56:39.66 JaYwanV70.net
>>221
普通はJNIで橋渡しする部分を作る必要があると思う。
しかしLinuxみたいに特殊なファイルに読み書きするだけである程度の操作ができるようなOS及びデバイスドライバならばファイルの読み書きだけでなんとかなってしまうかも知れない。
rootユーザーにならないと駄目かも知れないけど。
226:デフォルトの名無しさん
19/04/15 11:14:12.89 JaYwanV70.net
しかし例え Linux だったとしてもなるべく /dev や /sys 以下の特殊ファイルを直接読むように作るんじゃなくて読み書き用のコマンド実行するように作った方が良いかも。
というのは kernel のアーキテクチャやバージョンによって同じファイルが違ったりなかったりするかも知れないから。
例えばLinuxでCPUの温度を取得する方法が書いてあるページが以下にあるが、 /sys/devices/platform/coretemp.0/temp[0-9]_input または /sys/class/thermal/thermal_zone0/temp を読めばいいことになっている。
URLリンク(qiita.com)
しかし lm_sensors をインストールして sensors コマンドで読むようにした方が良い。
その方が違いがあってもそこで吸収してくれる可能性があるし、Windows 等の他の OS だったとしても同じ形式で出力をするコマンドがあれば(またはなければ自作すれば) Java の方のプログラムを変えなくて済むからだ。
227:デフォルトの名無しさん
19/04/15 13:57:59.38 cuQSJXma0.net
OSGiの説明読んでたら実行時に依存ライブラリを置き換えれるみたいに書いてあったんだけど
危なくない?
228:デフォルトの名無しさん
19/04/15 16:31:32.77 qwL+GUlh0.net
クソ古い機種でなければ、SELinuxが邪魔するはずだ。
229:デフォルトの名無しさん
19/04/15 16:33:08.61 qwL+GUlh0.net
ごめん。Androidスレと勘違いした。
230:デフォルトの名無しさん
19/04/17 09:29:11.77 u6KluhBw0.net
新しいswitch構文いいね
Java13でも何か増えてほしい
231:デフォルトの名無しさん
19/04/17 16:59:30.42 ZvmEwgGQa.net
まるで Kotlin のような switch だなあれ。
こうやって徐々に拡張してって気づいたら Kotlin そっくりになってたりしてなw
232:デフォルトの名無しさん
19/04/18 18:04:38.09 wChKEQpu0.net
JavaFX11をJava8で動かす事はできる?
例えばCorretto8とかで
233:デフォルトの名無しさん
19/04/18 20:11:19.95 Hosp3yF6M.net
JavaFXはもうJavaファミリーじゃなくて単なる野良ライブラリの一つだから他所で聞いて
234:デフォルトの名無しさん
19/04/19 00:53:02.95 PyPy8gHp0.net
substance.jarとかlookandfeelのライブラリもみんな死んだよなあ
235:デフォルトの名無しさん
19/04/19 20:15:42.29 9+uD8sSlr.net
arrayListのaddメソッドについて質問です。
中身のないリストに、インデックス無しのaddメソッドで中身を追加していくと
0.1.2.3~順番に自動でインデックスを付けてくれました。
この挙動は信頼して良いでしょうか?
それとも引数無しでaddしていくと、稀にインデックスがおかしくなったりしますか?
236:デフォルトの名無しさん
19/04/19 20:33:56.27 8v3VlEds0.net
char型配列についてお聞きしたいことがあります。例えば
char[] array = {'J','a','v','a'};
とした時、array[4]が「何もない(空である)」ことはどうコードで検出すればよいのでしょうか?
if文などで、4要素目が「空である」ことを検出するコードを書きたいのですが…。
237:デフォルトの名無しさん
19/04/19 23:18:37.51 Bzn5o3i30.net
>>233
配列の長さを調べる。
238:デフォルトの名無しさん
19/04/20 00:35:16.58 CMR5Akfm0.net
>>232
ArrayListのaddはリストの最後に値を追加するから
値を追加した順番にインデックスがつけられることは保証されるよ
239:デフォルトの名無しさん
19/04/20 06:05:00.74 FdhFaaGT0.net
>>235
ありがとうございます。
240:デフォルトの名無しさん
19/04/20 20:06:24.28 JruJqlnL0.net
1
jar実行時のカレントディレクトリが環境によってまちまちだって聞いたんだけど本当?
2
コマンドラインでディレクトリAに居ながらjavaコマンドでディレクトリBのjarを起動したら
そのjarの中でカレントディレクトリはAとBどちらになる?
241:デフォルトの名無しさん
19/04/20 20:36:06.72 JruJqlnL0.net
2を自分で実験してみたんですが
コマンドラインのカレントディレクトリがjar内部でもカレントディレクトリですね。
つまり./folderを作成したら、コマンドラインの位置に出現する。
242:デフォルトの名無しさん
19/04/20 22:30:51.50 ZG2GZstI0.net
new File(".").getCanonivalPath()
あってるかどうかは知らん
243:233
19/04/20 22:53:08.89 8ST0JapT0.net
>>234
返信が遅くなりすいません。
ありがとうございました。
244:デフォルトの名無しさん
19/04/21 15:13:37.03 oGsU9OH20.net
>>239
シンボリックリンクを手繰っても良い場合はそれでも良くて、ダメな場合は Paths.get(relativePath).toRealPath(LinkOption.NOFOLLOW_LINKS) のようだ。
URLリンク(qiita.com)
245:238
19/04/25 08:51:23.69 ximnnd2X0.net
これやばくないですか?
プロジェクトのトップからの相対パスで色々なファイルを指定する事は珍しくないはずです。
そうして作られたjarをコマンドライン等から呼び出すとき
カレントディレクトリが狂わないように調整する必要がある。
相対パスのFileオブジェクトの参照先はカレントディレクトリ依存ですよね?
しかもカレントディレクトリがどうなるかは環境依存ですよね?
と思ったらjavaコマンドの引数で-Duser.dirを指定すればいいようです。
でも、デスクトップアプリだと、環境別に起動スクリプト書かなきゃまずいですね。
エンドユーザーは-Duserr.dirを指定しません。
どこから呼び出しても良いようにしたい、エンドユーザーの利便性のためなのに、
起動スクリプトを使うのは本末転倒な気がします。
と言ってもコマンドラインから呼び出す場合しか実際問題にならないだろうけど。
URLリンク(bugs.java.com)
user.dirは起動後だと修正不可能。
246:デフォルトの名無しさん
19/04/25 09:45:05.55 sal5bxLGM.net
>>242
カレントディレクトリに依存しないように
プログラム組めばよいし
カレントディレクトリに依存するなら
シェルスクリプトやバッチファイルで
カレントディレクトリを指定するのがセロリーですよ
247:デフォルトの名無しさん
19/04/25 09:46:41.65 sal5bxLGM.net
プロジェクトのトップからの相対パスになるんだなんて
思い込みがなければ問題ナッシング
248:デフォルトの名無しさん
19/04/25 09:57:47.94 ximnnd2X0.net
カレントディレクトリに依存してはいけないというなら、
相対パスを使えないという事になるのでは?
しかし絶対パスはたびたびOSのユーザー名など個人情報が入ります。
できれば扱いたくない。
249:デフォルトの名無しさん
19/04/25 10:11:29.05 ximnnd2X0.net
URLリンク(d.hatena.ne.jp)
やはりいい方法が無いと。
それどころか、リソースファイルを取得する時URLクラスで相対パスを使うのが
ベストプラクティスとして紹介されている事がある。
それはカレントディレクトリに依存するのか?クラスパス依存だから問題ない?
そもそも、クラスパスが相対パスだったらカレントディレクトリ依存で解決されるだろう。
どうやって相対パスを使わずに組むんだ?
250:デフォルトの名無しさん
19/04/25 10:44:52.10 w8/bGs7/0.net
エクスプローラーから直接実行ファイルをダブルクリックしたら、そこがカレントディレクトリじゃないの?
ショートカットを作成して、それをデスクトップとか他のフォルダに置いた場合、
そのショートカットのプロパティをみると、「作業フォルダー」ってのがあって、それがカレントディレクトリではないかと。
251:デフォルトの名無しさん
19/04/25 11:24:18.30 DeQsB6RVM.net
>>246
どんな実行方法でもjarがある場所をベースにしたいってことならjarファイルのパスを取得してそこから相対パスで扱えばよいよ
252:デフォルトの名無しさん
19/04/25 13:37:42.97 wpotMNKo0.net
各種リソースは、プロジェクトフォルダからの相対パスだろ
PROJECT_PATH などの定数・変数を作って、そこからの相対パスを定義すればよい
253:デフォルトの名無しさん
19/04/25 17:48:56.39 PdDg4Yo8M.net
>>245
パスを引数で渡したり
カレントディレクトリに依存するなら起動するときに
指定するのがセロリーだよ
254:デフォルトの名無しさん
19/04/25 17:53:11.84 PdDg4Yo8M.net
>>246
リソースファイルは普通クラスパスから読み込むよ
シェルスクリプトやバッチファイルで
起動時にリソースを配置したディレクトリを
クラスパスに指定するのがセロリーですよ
255:デフォルトの名無しさん
19/04/25 17:58:48.54 PdDg4Yo8M.net
例えば実行時にworkフォルダに相対パスでファイルを吐き出したいときは
シェルスクリプトで
cd work
のコマンドを実行してから
javaを実行するよ
256:デフォルトの名無しさん
19/04/25 18:14:02.08 PdDg4Yo8M.net
スクリプトからjarを実行すれば
プロキシを指定したり使用メモリの上限を指定したり
ログの出力を変えたりできるよ
エンドユーザーの利便性を考えるなら起動スクリプトを
作るべきだと思うよ
jarは直接実行するものじゃない
257:デフォルトの名無しさん
19/04/25 18:22:50.99 PdDg4Yo8M.net
>>249
プロジェクトフォルダってソースコードを管理する
ものだから実行時にその存在を前提にするのは設計としておかしいと思う
開発環境からしか実行しないなら問題ないけど
今回のようにjarを配布して実行してもらうならマズいですよ
258:デフォルトの名無しさん
19/04/25 18:57:50.14 PdDg4Yo8M.net
>>237
の質問はよくわかる、なぜなら俺もむかしそう思ってたから
実行時にはjarの内部にいるんだと思いがちだけど
jarにはクラスファイルが入ってて
それを外から実行してるだけなんよ
259:デフォルトの名無しさん
19/04/25 22:38:36.18 O+x6W6lz0.net
>>249
すげぇな、お前。
260:デフォルトの名無しさん
19/04/25 23:09:48.66 ximnnd2X0.net
URLリンク(aarkiton.blogspot.com)
>実行時にクラスがjarファイルなどに格納されている場合、実行環境によりなぜかgetResourceAsStream()でリソースが読み込めない場合があるようだ。
こういう記事があるから、リソースの読み込みをクロスプラットフォームにするには、
URLでアクセスするのが良いとされている。
ところがURLアクセスの方法は相対パスを使用している。
クロスプラットフォームかつどのフォルダからも実行できるようにする方法はない。
あるとすれば、環境別に起動スクリプトを書く場合だけ。
起動引数無しで起動されたら即終了するようにして、
必ずスクリプトから起動させるしかない。
でも、それって、JVMが動いてても起動スクリプトが無いと動かないから、
マイナー環境向けにスクリプト書かれないだろうから、
クロスプラットフォーム感激減だ
261:デフォルトの名無しさん
19/04/25 23:11:54.85 ximnnd2X0.net
なんていうか、プログラムってしんどいね
環境ごとの無意味な違い(ファイルパスの区切り文字とか)で振り回されるし
262:デフォルトの名無しさん
19/04/25 23:35:13.14 7lYh8BWfM.net
つーかその張ってるリンク先で言ってる話はまた別の話だと思う
読み込むpropertiesファイルもまとめてjarにいれた場合に読めないって話でしょ
結局やりたいことの為に何が必要なのか考えてみた方がよいと思う
263:デフォルトの名無しさん
19/04/26 00:23:14.47 Q79mrf5i0.net
プログラム上の問題というより環境的な問題だから
自分じゃどうしようもない
これはプログラムが悪いんじゃなく、ソフトウェアエコシステムの問題だ
すんなりとクロスプラットフォームになって
カレントディレクトリとか余計な問題に悩まなくていい開発方法があればいいのに
264:デフォルトの名無しさん
19/04/26 01:15:44.98 if9lRvGxM.net
カレントディレクトリを前提にパスを扱うからいけないだけ
jarファイルの場所を起点として相対パスを使えばいいだけだよ
265:デフォルトの名無しさん
19/04/26 02:14:57.44 Q79mrf5i0.net
それは絶対パスを使う事になるから、できれば避けたい
でもそれしかないかもしれない
266:デフォルトの名無しさん
19/04/26 04:22:09.54 51IpWYw80.net
スクリプト書けばいいのに
シェルスクリプトならPOSIXに対応した環境で使えるし
WindowsならPowerShellとかBATファイルとかあるじゃん
スクリプトじゃなくてプログラムでも良いけど
それができない環境はないよ
JavaのクロスプラットフォームはJVMが環境の差異を吸収するからソースコードコンパイルし直さなくて平気だよってものなのでカレントディレクトリが実行環境によって変わりますっていうのは別の事柄だよ
Java製のV2CやEclipse、NetBeansといったソフトウェアもjarを直接起動することないよ、起動用のプログラムは別で用意されてて一緒に配布されてる
カレントディレクトリの概念は便利なものだよ
267:デフォルトの名無しさん
19/04/26 04:28:32.96 Q79mrf5i0.net
便利なのはわかるんだ
例えばmkdirだって、どこかに置かれたプログラムで、カレントディレクトリにおいて作用するわけで。
関数的なプログラムはそれでいい。
でも状態を持つプログラムにおいてそのプログラムが置かれたフォルダに状態を作るというのも便利なものだ。
これはOOP的。
エンドユーザーからすれば、良く分からんところに状態を作られるのは嫌。
268:デフォルトの名無しさん
19/04/26 04:34:30.93 51IpWYw80.net
>>264
じゃあユーザーにはスクリプトを配布してそれを実行してもらうようにすればいいよ
269:デフォルトの名無しさん
19/04/26 04:50:17.67 51IpWYw80.net
カレントディレクトリ無視してjarのディレクトリで動作しますというのがユーザーにとって迷惑なこともあるわけでユーザーがコントロールできるのが望ましいのじゃないかな
OOPや関数型プログラミングは今回の件と関係があるとは思えない
270:デフォルトの名無しさん
19/04/26 05:21:05.77 51IpWYw80.net
・プログラムの動作上必要なファイルをjarと同じ場所に配置する
・プログラムではそのファイルに相対パスでアクセスする
という要件でしょ
271:デフォルトの名無しさん
19/04/26 05:55:44.11 51IpWYw80.net
相対パスはカレントディレクトリからのパスなので
カレントディレクトリを変えるしかなく
スクリプトでカレントディレクトリを変える
jarのパスを引数で渡すなり実行時に取得するなりして
Path.resolveメソッドで相対パスを解決する
272:デフォルトの名無しさん
19/04/26 06:01:41.80 51IpWYw80.net
他にあるかなー
273:デフォルトの名無しさん
19/04/26 06:30:18.37 Q79mrf5i0.net
・個人情報が含まれることがあるから絶対パスを使いたくない。
274:デフォルトの名無しさん
19/04/26 07:10:21.98 pn/dKCHp0.net
>>270
その理由がよくわからない
パスはプログラム内部で使用するだけじゃないの?
パスを公開するん?
275:デフォルトの名無しさん
19/04/26 07:39:19.02 pn/dKCHp0.net
カレントディレクトリからの相対パスを使用したとしても
Path.of(".").toAbsolutePath()
としたらプログラムでは見れるので
プログラムに対して絶対パスを隠す意味はないですよね
絶対パスを指定するとしたら実行時にスクリプトで絶対パスを取得して
javaに渡すなり、javaから取得するなりすると思うんですよ
Path resourcePath = ...;
Path text = resourcePath.resolve("text.txt");
こんな感じで
ログに出力したくないというのであればtext.getFileName()をログに出力するようにすればよいかと
絶対パスを使いたくない意味がよくわからない
276:デフォルトの名無しさん
19/04/26 08:25:41.39 QL2+v1a40.net
>プログラムの動作上必要なファイルをjarと同じ場所に配置する
この要件が意味不明過ぎる。
初めからプログラムが知っているべきものなら、CLASSPATHから辿れるResourceでいいし、
外部から与えられるファイル(設定ファイルとかデータファイルとか)なら、
ユーザが「知っている」はずだから、それに従うだけ。
277:デフォルトの名無しさん
19/04/26 09:02:13.01 yevOEnv90.net
自分ならjarのあるディレクトリに移動してプログラムを起動するバッチファイルを使うわ。
プログラムではカレントディレクトリにあるはずのファイルが無かったらエラーを吐いて止まる。
278:デフォルトの名無しさん
19/04/26 09:21:40.52 v0BTRdTiM.net
それosごとに書くの?
write everywherewww
279:デフォルトの名無しさん
19/04/26 09:35:16.97 YRtkzMZRa.net
Write once
Bug anywhere
280:デフォルトの名無しさん
19/04/26 09:44:37.15 pkS4CFHAM.net
>>275 シェルスクリプトならUnix系のOSで使える WindowsならPowerShellでいんじゃないかな 実質2つだけかと
282:デフォルトの名無しさん
19/04/26 10:00:15.39 QL2+v1a40.net
頭悪すぎ。
権限とかセキュリティを考慮すれば、ワーキングディレクトリもユーザ側に委ねるべきもの。
283:デフォルトの名無しさん
19/04/26 13:39:16.32 A/WNBxWE0.net
>>258
Ruby では、Windows のパス区切りも、/ で統一されている。
Dir.glob( 'C:/Users/Owner/Pictures/*' )
Rails では「設定より規約」というポリシーだから、何も設定しない場合には、
プロジェクトフォルダ内でのリソースの置き場や、
それらのdeploy 後の置き場や、アクセス方法も決まっている
このように、フレームワークを使うと、その規則に従うから、何も考えなくてよい!
284:デフォルトの名無しさん
19/04/26 14:10:43.88 YRtkzMZRa.net
>>279
え?Windowsって昔からプログラムでファイルオープンする時は / 使えなかったっけ?
昔々 Delphi とかで使えた記憶があるんだけど。言語の問題じゃなくて Windows API が / も受け付けてるって事ね。
コマンドラインから受け付けないようになってる理由は昔から / をスイッチとして使ってるからだと思う。
285:279
19/04/26 14:36:03.51 A/WNBxWE0.net
C:\Users\Owner\Pictures\
Python では、\ をエスケープするために、\\ を2つ使った、表記をよく見る。
C:\\Users\\Owner\\Pictures\\
一方、Ruby では、
C:/Users/Owner/Pictures/
286:デフォルトの名無しさん
19/04/26 14:41:28.21 YRtkzMZRa.net
>>281
わからんけど試しにWindowsのPythonで / でやってみな。多分できる。
Perl もできた。
てか、言語関係ない筈。
287:デフォルトの名無しさん
19/04/26 15:17:33.53 YKU/5GWf0.net
スレチ
288:デフォルトの名無しさん
19/04/26 21:05:21.66 sJC66QNU0.net
Rubyキチは黙ってスルー。
289:デフォルトの名無しさん
19/04/27 00:27:38.86 0PNVGbCs0.net
カレントディレクトリをユーザ側に委ねると
前回のセーブデータを必要とするとき、GUIとかでユーザーに設定してもらう必要がある。
アプリフォルダに入ってれば自動的に見つけれる。
俺はカレントディレクトリをユーザ側に委ねる使用法を否定していない。
ちゃんと読んでくれ。誰もそんな事は言ってない。
ただアプリによってアプリフォルダに状態を持つ方法が必要になると言ってる。
しかもそれを相対パスとして実現できる必要がある。
この話は、Oracleも必要性を認めていて、しかし問題があり却下していたはず
290:デフォルトの名無しさん
19/04/27 00:35:07.92 0PNVGbCs0.net
URLリンク(bugs.java.com)
>A chdir that has inheritable thread local semantics is much safer and
clearly useful, but it is quite an implementation challenge.
291:デフォルトの名無しさん
19/04/27 00:38:18.41 0PNVGbCs0.net
カレントディレクトリを大部分のアプリにおいてユーザ側が制御できる事と
一部アプリにおいてアプリ側が制御できる事は両立する。
誰もカレントディレクトリをユーザ側で制御する事を否定してないのに、なんでそんな話が出てくる?
292:デフォルトの名無しさん
19/04/27 00:45:30.79 0PNVGbCs0.net
> It's really too bad that there is no system interface that allows a
> program to save and restore the current working directory reliably
Ruby is another application platform that embraces threading and has a
process-wide chdir. In the latest ruby release, a warning is issued if
chdir is used in a program with more than one active thread.
ルビーではプログラム側でchdir出来ると書いてある。
そういう需要があるという事だろう。
しかしプロセス単位で設定するのは危険で、
スレッド別に設定できるべきだという意見が2つ出ている。
例えば1プロセスでマルチユーザーを達成するプログラムがあった場合、
アクセスしたユーザーに応じてchdirできる。
APIの用途なんかいくらでも出てくる。
Javaが実行時chdirを持たない事は欠陥だ。
アプリコードで実行されたクラスのパスを取得してそれをプリフィクスにすればいいと
上で意見が出ているが、それではライブラリの動作が透過的に変更されない。
293:デフォルトの名無しさん
19/04/27 00:53:45.71 0PNVGbCs0.net
俺の説明が正しいかは分からない。
俺は細かいところを間違えたかもしれない。
でも、javaが実行時chdirを持たない事が欠陥なのは間違いない。
294:デフォルトの名無しさん
19/04/27 01:06:06.63 0PNVGbCs0.net
カレントディレクトリをユーザーが指定しつつ
同時にプログラム側でchdirすべき場合があるじゃないか。
1プロセスでマルチユーザーからのアクセスを受け付けるプログラムで、
ユーザーがカレントディレクトリを指定して、
プログラム側でスレッド別にユーザーが指定したカレントディレクトリにchdirする場合。
295:デフォルトの名無しさん
19/04/27 01:11:53.55 Je+FHpVzM.net
>>285
だからその用途の場合は実行時にjarの場所を取得して、そこからの相対パスで扱うべきって話をしてるわけだが
相対パス=カレントディレクトリを基準に使わなければいけない、みたいな謎ルールがあるのか?
296:デフォルトの名無しさん
19/04/27 01:17:58.25 0PNVGbCs0.net
これ2006年ごろ会社でBtoBtoCのシステム作っててやったの思い出した
クライアント別にchdir
ApacheとLinuxの仕組みを活用して達成できたけど、
クロスプラットフォームなやり方は無いと思う。
297:デフォルトの名無しさん
19/04/27 01:18:26.51 0PNVGbCs0.net
>>291
>それではライブラリの動作が透過的に変更されない。
298:デフォルトの名無しさん
19/04/27 01:19:54.56 0PNVGbCs0.net
>>286-288と>>290と>>292あたり読んでね
読まずに返信したらダメだよ
理解してから書いて
この話題は>>290が完ぺきな説得力を持って俺の中では終わってる
299:デフォルトの名無しさん
19/04/27 01:21:56.36 0PNVGbCs0.net
そのオラクルのサイトでもこう書かれてる。
>This needs co-operation from the runtime (if we chdir() the VM, then the
IO libariries would get transparently updated).
chdirはライブラリの動作を透過的に変更できる。
お前らが言ってるクラスファイルのパスを取得して接頭辞にしろというアイデアは、
ライブラリの動作で問題が生じる。
300:デフォルトの名無しさん
19/04/27 10:12:27.47 Msh+cD000.net
>>294
自己完結
301:デフォルトの名無しさん
19/04/27 10:12:49.27 Msh+cD000.net
自己完結しましたってことね
302:デフォルトの名無しさん
19/04/27 10:13:08.94 Msh+cD000.net
ここは質問スレッドなので質問ありますか?
303:デフォルトの名無しさん
19/04/27 10:28:47.67 Msh+cD000.net
カレントディレクトリのファイルを読み書きするライブラリなんてあるのかね
ファイルを読み書きするならFileなりPathなりInputStreamなりOutputStreamなり
を引数として取るように作るんじゃないかな
もともとはカレントディレクトリがプロジェクトのディレクトリになるという
勘違いから起こった話題だけど何を解決しようとしてるのかよくわかんない
304:デフォルトの名無しさん
19/04/27 11:40:58.78 0PNVGbCs0.net
もともとは「カレントディレクトリが何になるか環境依存で決まる」という話。
ライブラリでカレントディレクトリに依存しているものはたくさんある。
305:デフォルトの名無しさん
19/04/27 12:51:28.78 Msh+cD000.net
>>300
具体的になんてライブラリなの?
たくさんあるうちから比較的有名なものを教えていただけると
306:デフォルトの名無しさん
19/04/27 15:14:58.99 0PNVGbCs0.net
具体例をあげさせようというのは、
「そんなライブラリ存在しない」と本気で思えるからなのか?
言語仕様的にカレントディレクトリへの依存なんてFileを相対パスで使ったら生じるもので
それが一般に無いなんて前提は持ちようがない。
お前は単に俺に無駄な手間をかけさせようとしているだけとしか思えないんだが?
お前の本心は何だ?”本気でその質問がここに居る人たちをより優れた認識に導くと思っているのか?”
あるいはただのクズか?
307:デフォルトの名無しさん
19/04/27 15:17:25.68 0mLMZlTmM.net
まあ解決したみたいだしもういいでしょ
308:デフォルトの名無しさん
19/04/27 15:35:16.29 0PNVGbCs0.net
Javaを使う全ケースで共通のカレントディレクトリ依存のファイル作成処理。
URLリンク(docs.oracle.com)
このファイルが作成される事はプログラム側の問題だから
プログラム側のフォルダに作成されるのは基本的に正しい。
多重起動防止テクニック
URLリンク(d.hatena.ne.jp)
1フォルダにつき1つしかプログラムを起動させたくないなら、
プログラム側のフォルダにロックファイルを作るのが正しい。
HTTPサーバつきのDBはプログラム側のフォルダにDBを作る事が多いだろう。
他にも全利用のログや統計が必要な場合。
結局一人で調べて一人で解決したほうがいいんだなと思った。
正しい着眼点と方向性で進めててもアホ呼ばわりされる。
こいつら極限まで分かり易く示さない限りアホ呼ばわりしてきそうだ
309:デフォルトの名無しさん
19/04/27 15:41:51.22 0PNVGbCs0.net
ああ・・・エラー処理はカレント側に作成されてるな
ただ、これもそうだが、分かり易い事例を示すのが難しいだけで俺の意見が正しい。
現実のプログラムであればそういうシステムを多々見てきたし、
プログラム側のフォルダに状態を作るべき場合は存在する。
たとえ事例が無くてもそれが存在するのが分かる。
オラクルのエンジニアだってそういうメリットがあるから
スレッド別の継承型chdirが望ましいと書いてたろ?
「自分でわかる」「著名人もそう言ってる」
この段階からさらにお前らが分かるような事例を持ってこいってのはさらに難しい
310:デフォルトの名無しさん
19/04/27 16:11:19.17 Msh+cD000.net
>>302
俺はカレントディレクトリのファイルを読み書きするライブラリを知らない
君はそれをたくさん知ってるということだったので
教えてもらいたかっただけだよ
URLリンク(docs.oracle.com)
これはファイルパスを指定できるようになってて
デフォルトではカレントディレクトリだよってことですね
ライブラリではなくてjavaの仮想マシンがそういう動作をするってことですよね
URLリンク(d.hatena.ne.jp)
これはカレントディレクトリを使ってはいけないんだってことを
君は言いたいのかな、よくわかんなかったけど
311:デフォルトの名無しさん
19/04/27 16:12:22.32 nhVWQaIpM.net
例の一つもしめせない正しさなんかいらない。
連休明けにお前の席、ねーからー!w
312:デフォルトの名無しさん
19/04/27 16:38:17.73 Msh+cD000.net
>>305
君が見てきたいろんなシステムはjarを直接起動するシステムばかりだったの?
特殊な環境にいたのかなと
プログラム側のフォルダに状態を作るべき場合が存在するのは否定しないよ
そういうこともある、その場合はjavaを実行する前に指定しましょうというのが
一般的なやり方だよ
前にも挙げたけどEclipseとかV2CとかNetBeansとか
Java製のソフトウェアは起動用のプログラムとjarが別れてるよ
アプリケーションサーバのTomcatなんかもそうだよ
起動用のスクリプトの中でパラメータを指定したり環境変数を定義したり
して実行環境を整えてjavaを実行してるよ
313:デフォルトの名無しさん
19/04/27 16:55:22.93 Msh+cD000.net
↓ここみるかぎりworking directoryをJavaで変えるのはできそう
URLリンク(stackoverflow.com)
314:デフォルトの名無しさん
19/04/30 23:09:51.16 ase7yW+4a.net
お前ら6ヶ月超えたLTSはどうしてる?
ぶっちゃけAdapt OpenJDKとOpen J9しか無かった頃はOpen J9は影響力無いだろうからAdapt OpenJDKがupstreamに変更内容pushしてくれれば済んだじゃん。
ディストロ乱立した今Azulみたいに大してupstreamに貢献してない所あるからディストロ毎の変更の差が広がるけど。
315:デフォルトの名無しさん
19/05/03 17:48:48.96 iE5UbyHCM.net
JAVAも人気が無くなっちゃったね
勉強しようかと思ってたけど今は何がおすすめ? C++あたりかな?
316:デフォルトの名無しさん
19/05/04 00:54:34.37 wCMSKwhZa.net
Kotlin もよろしく
317:デフォルトの名無しさん
19/05/06 13:16:22.90 ial3K7dNM.net
天の邪鬼なんで今からjava勉強しようと思います
もとの専門が強電と計装なんですけどつながる所ありますか?
318:デフォルトの名無しさん
19/05/06 13:40:45.97 9LoLzBoXM.net
理系脳があれば文系Javaマの大多数よりは上
現場のレベルの低さは想像を絶する
319:デフォルトの名無しさん
19/05/06 13:44:38.65 iQFGW4dP0.net
プログラムの才能は理系・文系とは別
320:デフォルトの名無しさん
19/05/06 20:21:56.86 NYoOX9LAa.net
なんだろうね。数学的能力はあった方が良いがそれだけではないし。
手順を言葉で表現する能力もある必要があるがそれだけでもないし。
321:デフォルトの名無しさん
19/05/06 23:47:19.20 HTogq+szM.net
よくわからんまとめサイトにjavaって読書好きな人向けみたいに書いてあったんだけど本当?
何時間も細かい文章読んでても気にならないタイプなんだけど
ただイメージわかない物は苦手ですが(英語とか辞書とか)
322:デフォルトの名無しさん
19/05/07 00:32:26.40 nFO0GtdSM.net
>>317
長くて複雑な資料を読んで理解できる能力は言語関係なくITエンジニアにとって極めて重要
応用情報の午後の過去問なんかをダウンロードして見てみたらイメージ掴みやすいと思う
あれはよく読めば大して知識なくても解けるもので、そういう人は向いてる
323:デフォルトの名無しさん
19/05/07 06:49:28.50 VFlw4N8yM.net
>>318
ありがとうございます
読んでみます
324:デフォルトの名無しさん
19/05/08 00:47:24.78 S67A12g30.net
Kotlinはjsにコンパイルする環境がすでに整ってるけど
Javaはgwtがコケて完全に死んだよね
325:デフォルトの名無しさん
19/05/08 09:32:17.94 86ZxxcQ40.net
KGBに監視されている
326:デフォルトの名無しさん
19/05/09 21:35:28.39 qPClD7aOM.net
某組み込み系の比率が高い県の未経験者です
組み込み系(C言語)とWeb系(PHP)両方の経験を積みたいんですが最初にjavaをがっつりやるのはありですか?
javaがっつりやって流れでC言語もPHPも出来るようになる作戦なんですが虫が良すぎでしょうか
それとももっと良い言語がある?
327:デフォルトの名無しさん
19/05/09 21:52:11.67 pU2pcSqk0.net
JavaがわかればPHPは余裕
C言語はクラスがなかったりポインタとかメモリ管理とかJavaの常識が通用しない
ループとか条件分岐とか関数はほとんど同じだけど
やってみたらいいじゃない1週間あればいけるっしょ
328:デフォルトの名無しさん
19/05/09 23:28:52.95 vGDrZ5vaa.net
>>323
なるほど、古いほど難しい感じ?なんですかね?
とりあえず今やってるjavascript終わったらしばらくjava一本に絞ってみます
329:デフォルトの名無しさん
19/05/10 13:49:52.47 sZdncDhCM.net
brainfuckはcより新しいぞ
330:デフォルトの名無しさん
19/05/10 20:42:23.89 eVjZi54sa.net
URLリンク(sbfl.net)
にある回転弾幕を参考に同じように回転弾幕を作成しているのですが、回転しません。
radianの計算が違うのでしょうか?
URLリンク(pastebin.com)
331:デフォルトの名無しさん
19/05/13 15:18:49.84 LmLPA4i2a.net
すいません、今からならjava8やるべきですかそれとも11ですか
まあ11は探しても本無いんで何すべきかわかんないですが
332:デフォルトの名無しさん
19/05/13 16:07:46.34 fPgpveE6M.net
11でコード書いたら下方互換がないのってLambdaのvarくらいか。
非互換さえ理解しておけば、11から始めてもいいんじゃないか。
どうせそんなこと聞いているくらいだから、Tiger時代くらいのAPIしか
使わんのだろうし。
333:デフォルトの名無しさん
19/05/13 17:30:27.34 rnX6vlMta.net
Kotlinもよろしく
334:デフォルトの名無しさん
19/05/13 22:00:41.33 Il2FdqNea.net
今からやるならモジュールから入ったほうが良いから11かな。
下位互換のためだけにあるunnamed moduleとautomatic moduleの
ルールが複雑だから9以降初学者は最初に普通のモジュール使ったほうが覚えるの簡単だと思う。
あとは>>328の言う通り8以降でapiかなり変わってるからapi覚え直したほうが良い。
335:デフォルトの名無しさん
19/05/13 22:16:51.52 9QsNbP8la.net
今からやるんだったら
まず Java をやらない方がいい
としか言いようがないな
336:デフォルトの名無しさん
19/05/13 22:23:05.62 nkZ+yA1j0.net
Javaのめんどくさいところを知っておくとよい
337:デフォルトの名無しさん
19/05/14 08:21:57.15 YPQOCYqpa.net
ありがとうございますm(_ _)m
338:デフォルトの名無しさん
19/05/14 22:58:57.58 /fg2d0W/0.net
関数型インターフェースを使いたいときって自分で作ったほうがいい感じ?
実行するときに.accept()とか書いてあっても何するのかわかりずらかったりするかなーって思った
339:デフォルトの名無しさん
19/05/15 02:24:44.79 heW47YQ/a.net
未経験者です
すっきりわかるjava入門上下2冊とeffective java第3版どちらにするか迷うんですがeffective javaシリーズは初心者が触っても大丈夫なものですか?
340:デフォルトの名無しさん
19/05/15 07:56:51.46 IyGA5vUia.net
>>335
effective javaは将棋に例えるなら定跡集
駒の動かし方は書いていないから初学者には一ミリも理解できない
341:デフォルトの名無しさん
19/05/15 09:09:39.48 QPuK5v7oa.net
>>336
ありがとうございますm(_ _)m