◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:★★Java質問・相談スレッド182★★ YouTube動画>12本 ->画像>6枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1542595026/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 http://pc11.2ch.net/hp/ Webプログラミング http://pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 (p)http://www.wikiroom.com/java/?path,classpath ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 ・String に == は使うな。equals() を使え。※ 質問時の心得 ・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。 ・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。 前スレ ★★Java質問・相談スレッド181★★ http://2chb.net/r/tech/1518252580/ VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured Threadが完了しているかはどうやって調べるんですか? isInterrupted()とisAliveはあスレッド終了時falseでした。
どうやらisAlive()はstart()前はfalse,start()後実行中はtrue,完了したらfalseのようです。 start前と完了後を区別するにはgetStateが良いようですね
スレッド1がメンバー変数Aを更新、そのあとメンバー変数Bを更新 スレッド2から見て、Bの更新が見えるのにAが見えない、ということはありえますか?
マルチスレッドは前後関係が決まらないから、確実なものはない。 待ち合わせでもしていれば、できるかも デッドロックもあるし、10年以上開発していないなら無理。 資源が共有されるから、素人がプログラミングできるはずがない!
スレッドは最初から並列、同期を考えてプログラムするだろう。初心者には無理
>>6 その変数Aが volatile でなければ読む側のスレッドで動いているコードによっては起こり得ると思う。
(もっと他順に更新順序と読む順序の問題でそうなる事もあるが)。
かといって volatile にしただけで安心してはいけない。更にロック掛けた上で読み出した方が良い。
Java なら synchronized 使うとかだな。
volatileはそのAとBの間に制約があるなら使えないし、A、Bが自身の制約になるときもか。あと他の変数の不変条件になってるなら使えないよ。 ていうかvolatile変数の変更が外から見えないならロックいらんだろ。
>>10 制約って?具体的にどういう状態?
privateにして外からgetするメソッドを呼ぶだけのいわゆるプロパティにしてしまえばマシにはなるかもな。
しかしそれだけだとA,Bを個別に読んだら一方しか更新されてない事は起こりうるのでは?
更新する側がロックせずに一つづつ更新している最中に一つづつ読んでしまえば起こりうるよね?
1スレッド書き込み、マルチスレッド読み込みの場合、 並行処理による問題が発生する可能性はありますか? 例えばHashMapにアクセスするとして。
1. スレッドA には、Xが存在しない 2. ここで書き込みスレッドが、X を書き込むと、 3. スレッドB には、Xが存在する
>>13 HashMap のドキュメントに Collections.synchronizedMap() を使う方法が書いてある。
それ使った方が自分でゴチャゴチャ考えるより楽だ。
排他ロックが無駄だからいちいち同期するなよ。 concurrent collectionつかえ。その用途ならConcurrentHashMapがあるだろ。
ラムダの中でローカル変数のオブジェクトを参照している場合、 そのメソッドを抜けた後そのローカル変数を参照する事は安全ですか? //in some method Obj local = new Obj(); GuiPart gui = new GuiPart((event)->local.method(event)); return;//この後ラムダがイベント処理で呼ばれた場合、localは参照可能か?
>>19 安全に参照可能だよ
自動生成されたクラスのインスタンスフィールドに保持される
逆に気を付けなければならないのは、 非同期処理などで、外側のオブジェクト(エンクロージングインスタンス)がいつまでも破棄されなくなる可能性があること。
匿名クラス(無名クラス)の型について質問です。 ArrayListに格納した後、get()で取り出して使いたいのですが 型名が分からずキャストできません。 どなたか回答をお願いします。
>>22 クラスを定義するときに継承してるはずなので
instanceofで継承元の型かチェックして
型のクラスにキャストすればいいのじゃないかな
継承先のクラスへのキャストはわからん
>>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()を呼べずコンパイルエラーになります。
そこで最終行でキャスト演算子を使おうと思ったのですが、
匿名クラスの型が分からずキャスト出来なかったんです…。
言語の限界に挑む系のチャレンジかなんかしてるのかそれ。
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>として、下のキャストを要らないようにする分けだが。
他で呼ぶことを目的とするなら匿名クラスにしてはだめでは?
>>26 そんな大層なことではありませんが…。
>>27 >>28 ありがとうございました。
では匿名クラス内のメンバ(特にメソッド)の存在意義って何なのでしょうか?
>>29 そのクラス内で処理を分けて起きたい時に作る。
呼び出されるメソッド一つに全て書くとわかりづらくなる時とかね。
渡した先で処理させるのにitemを厳密にしなくてすむ
>>25 の例で言うなら自分で作ったcollectionクラスにanonymousMethodをなんか処理する機能をつけてやれば
渡すitemはanonymousMethodを持ってれば匿名でも実体があっても良くなる
総称型の派生的な定義を一元化したいです。 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に依存した他の派生的な総称型をクラス内で定義したい。 これは可能ですか?
>>33 こういうこと?
class A<T> {
class B<U extends T> {
}
}
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(); }
別の方法で解決できそうです。ありがとうございました
以下のコードで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 System.out.print(total == 0)がtrueだったからです
新たにビルドしなおしたものを実行していたつもりがエラーになってて古いやつをずっと実行し続けてた的なやつだな。 とりあえずこれ10回詠唱しとけ 「コンパイラの出力は御経じゃない」
>>41 内容はJavaSE8Silverの問題集に出ていたものです
解説ではif文の中身が実行されないので初期化によるエラーが出るって書いてあり、
そのことは実際にideoneとかで実行し理解してるのですが
なぜtrueにならないのかがわからないということです
>>42 えっと、実行時には条件はtrueになるよ
コンパイル時にはtrueになることがわからんので
コンパイラが初期化されないかもってエラー投げるだけっすよ
↓これでもエラーになるんで変数が条件式にあるとダメみたいね、リテラルならおk public static void main(String[] args) { boolean a = true; int b; if (a) { b = 2; } System.out.println(b); }
>>42 そもそもコンパイル通らなくね?
条件が true になるかどうか以前の問題
>解説ではif文の中身が実行されないので初期化によるエラーが出るって書いてあり
これが本当なら説明がおかしいな
if文云々というより単に宣言された x, a, b が初期化されてないからコンパイルエラーになる
if文の中身がtrueになって{}の中が実行されて値が初期化されるかどうかは保証されない
JavaSilverはコンパイル通らないコードについても出題されるからね 初期化によるエラー云々はコンパイラーが吐くエラーメッセージの事を指していると思われ
>>43-44 ありがとうございます!助かりました
>>45 本ではif文の条件に合致せず初期化せずにtotal=x*a*bを計算するのでエラーになる
って書いてたのですが…解説がおかしいかどうかはjava初心者なのでよくわかりません
コンパイラとしては実行されるまで if の条件が成立するかどうかわからないため、成立する場合と成立しない場合の両方を考慮しているだけではないかな? で、今回のプログラムの場合は条件が成立しないと初期化されない変数が出てくるためコンパイルエラーになる。
質問です 柴田望洋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)の何が変なのか教えてください。
>>52 int型だと例えばn=7のときにn/2は3になるってだけでは
そのせいで手計算とズレるんでしょ
>>53-54 ありがとうございます。それで解答だと場合分けしてたんですね
場合分けしたくない場合はdoubleで計算して小数点以下が邪魔に感じられたら計算終えてからintにキャストすればいいんでしょうか。遅くなるのかな
>>55 doubleからintにキャストするときも0.9999は0に切り捨てられてしまうから、Math.roundを使ったほうがいいよ。
計算途中で絶対に小数にならない保証があるなら、おそらく52bitまでならそのままdoubleを整数にキャストできるけども
>>56 なるほどなるほど。ありがとうございます。
syncronizedMapとConcurrentHashMapってConcurrentHashMapの方がいいのかな
マルチプラットフォームなデスクトップアプリを作るのにJavaを愛用していましたがJavaFXはオプションになるしそもそもJDK/JREもいつまで使えるかわからないので乗換先の言語を探しています。 - GUIアプリを標準で作れる - マルチプラットフォーム - できればコンパイラ言語 - 学習コストが低い でおすすめは何でしょうか? ご教示方よろしくお願いいたします。
JavaからならC#だけど どこまでやるかだな Macを入れるか入れないかとか 何系作ってるの?
c#だとGUIのコード共通化厳しいのでは。 Win+Macなら今さらだけどAdobeAirとか。証券会社のアプリとかで生き残っている。 LinuxもGUI共通化必要なら、現実的なのはjavaくらいしか知らない。
条件がGUI共通化だけならElectronとかWeb系かな PWAはどうなってるか知らんけどその内流行るんだろう
これが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; }
>>64 TestI <- A
TestI <- TestClass
でTestClassをAに変換できないって出てるんでしょ
AはTestIを実装する任意のクラスだから
TestClassから変換できないのは当然のような
interfaceでthisの型をメソッドの引数に使う方法はありますか?総称型を使わずに これができないとequals的な自クラスの他オブジェクトを受け取るタイプのインターフェースのために 総称型を指定しなきゃいけないので面倒です public interface TestI{ void method(ThisClass o); }
面倒も何もそれが総称型の意義です 要はComparableみたいなもんでしょ
public interface TestI<T extends ThisClass >{ void method(T o); }
別に面倒でも何でもないよ。 methodの引数でThisClassの子クラスを受け取ったとしても、 intanceofとかする必要は全くない。
void method(Testl t)じゃあかんの?
でも"thisの型"をデフォルトで使えても良いと思いませんか? オブジェクトが使用される時常に明らかになっているはずです。 つまり記述を省略できても良い
equals()については、互換性維持。 できないものはできない。 自分で定義するものについては、ジェネリクス使えばよい。
public interface TestI<T extends TestI>{ void method(T o); } こう書くと警告でます。extends TestIのところで TestI<?>と書くんですか?
待って、それを知らずに面倒とか言ってたの Testl<T>でいいんだよ……
それでも出来るのは最初から分かってるんですが、 意味的にTestIを実装したものしかそこに書かないでしょう? だからその前提を記述しておきたいという話です。
あと面倒と言ってるのはそのインターフェースを実装しているクラス、 さらにそのクラスを継承したクラス、さらにそれを継承したクラスと 記述箇所が一斉に増えるからです。 抽象クラスが実装しているインターフェースにこういう要件が発生すると実際かなり面倒であることは想像できるはずです。
public abstract class AbClass<T extends AbClass> implements TestI<T>{ } public abstract class AbClass2<T extends AbClass2> extends AbClass<T>{} このように次々と続いていくことになります。 そしてこれらすべてで警告が出ます。
上にもありましたがComparable的なインターフェースという事になりますが このようなインターフェースを継承ツリーの上の方で実装すると問題になります。 通常のインターフェースや、通常の総称型インターフェースでは問題無いんですが、 このようなインターフェースはたびたび継承ツリーの各クラスでそのクラスについての実装を記述する事になります。 だから、thisの型が予約語として扱えると非常に便利だろうと。
再帰ジェネリクスの話ししてる? 違ったらごめん 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>{}
AbClass<T extends AbClass<T>> こういうのってどういうのを想定してるの? シングルトンではないenumみたいなもの?
継承ツリーの各クラスでTが連鎖的に定義されるような状況があるとき extends AbClass1<T>の意味は、末端の具象クラスで総称型に指定されたTが 一番上の抽象クラスまで連鎖的に指定されている事を要求しているような意味がある。
AbClass<T extends AbClass<T>>これの extends AbClass<T>この部分の意味は、って話
>>84 抽象クラスで定義したメソッドで自分の未知のサブクラス返すときとか
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11204388166?fr=ios_other 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を使用しています。
javaは隠してるメソッド多いよね 今回のは過去のソースの動作などの 整合性のためだと思うけどさ 肝に銘じて作りこんでいきます 4時間悩んでjavadocみたら5秒で解決したわ
ついでにListの要素をEnumしか取れなくしたEnumListみたいなのある?(ググり済み)
>>96 EnumSetとかEnumMapみたいな省メモリな実装があったらいいなーと思って
重複がないからこそ連番の配列として扱えてるのに、重複が許されるリストじゃやりようがない
べき乗の計算式を作りたいのですがうまくいきません (例) a=5; a=a^2; 上記の例のようにしても、結果が25になりません Javaではべき乗計算はサポートしていないのでしょうか?
ワロタ。演算子じゃなくてそういうメソッドがあるはず。Mathクラスのメソッド調べてみん
>>100 VB系?なんで他の言語と同じだと思うのか?
XORは大昔自前のカーソルを作った時に使った記憶がある。 覚えている限りその後1度も使ってない。
>>103 演算子ってだいたいどれも同じでしょ
Javaが変態じゃなければ
よくぞ私が変態であることを見破った。 君も仲間にしてあげよう。
二項^は言語によって意味が違う筆頭だから。
>>94 交差型へのキャストそのものが目的でないならラムダ式をSerializableやCloneableにするためかな。
(Lambda & Serializable)や(Lambda & Cloneable)でキャストするとコンパイラがSerializableやCloneableを導出する。
>>112 ラムダをシリアライズとかきもいし、cloneできるようにするっていうのもキモいな…なんでだろう
それはともかく解説ありがとう
servletの質問です httpServletを継承したクラスで、web.xmlに記載されたコンテキストの初期化パラメータにアクセスしたいとき、まずServletContextオブジェクトを取得すると思います。 this.getServletContext() と getServletConfig().getServletContext() その方法として上記2つがあるようですが、 ServletConfigオブジェクトを経由するかしないかの違いだけで、 どちらでも同じオブジェクトを得られると考えて大丈夫でしょうか? また、どちらの方法が推奨される、または一般的などありますか?
上は下のショートカット。 のはずなんだけど、どの実装だったか忘れた(tomcatかjetty)けど、上だとnullを返すものがあったりする。
作ったプログラムがきちんと動作しそうもない初心者の匂い
順序を保証しないコンテナ系オブジェクトは同じ順番で同じ値を入力したとして シリアライズした時のバイナリの一致を保証しますか? @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) { } }
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) { } } }
実行時のメモリ状況とかなんかそういうものに依存して変わってしまうのかどうか。 HashMapでなくConcurrentHashMapはどうか、HashSetはどうかとか、知りたいです。
自分で確かめてみればいいのに(΄◉◞౪◟◉`) 予想としてはちゃんと復元できると思うけど
たまたま同じになるのか 必ずそうなるのか確証が欲しいのでござろうよ
復元できるか、じゃなくて どんな実行時状態でシリアライズしてもバイナリレベルで同値になるか、が知りたい
保証とかいってるから、そんな何々だろうレベルの言質じゃなくて仕様書レベルを求めてるんじゃねぇかな
業務で全部テストをパスしても100%瑕疵がないことを保証できないのと同じ そんなに確実にしたいんだったらJavaの言語規格とjava.util.HashMapのソースでも嫁
なんで順序持たないコレクションの順序が常に一致すると思うの?
>順序を保証しないコンテナ系オブジェクトは同じ順番で同じ値を入力したとして
最初の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 の言う通りだろう。
goのように意図的にランダムにしない限り 一致すると思うけどね実装が変わるわけじゃないし 状態も同じになるっしょ
>>129 ハッシュテーブルがリサイズされるから保証されないだけなんじゃないかな、普通に考えてインスタンス生成して同じ数の同じデータ打ち込んだら同じ並びになると思うけど
素人が素人のフォローw >どんな実行時状態でシリアライズして >普通
>>132 シリアライズされる状態は一つじゃん
デシリアライズのたびに状態が変わるとは思えないなあ
質問者は鋭いよ それに気づく僕も賢い 回答者は残念
質問者は「保証しますか?」って聞いてるのにID:BBWM5zqe0は「思えないなあ」とかw グダグダ言う前にもう少し落ち着いて質問読み返せよ
>>138 保証されるかはわからないが僕の結論
>>129 は質問の本質を理解してなかったようだから
それはおかしいよって
順番が保証されないコレクションの説明は シリアライズでバイナリが一致することは保証されない ことを意味するものではない ニンジンが赤いからブタさんはピンク色なんだと言ってるようなもの
関連がありそうなものをあげてるだけで論理も何もない 雰囲気でJavaをやってるのかと 葉加瀬太郎をググったらパパイヤ鈴木が 表示されたから二人はプリキュアと言ってるようなものでしょうが! ちなみに僕はJavaに魂と全財産を捧げる覚悟です
僕今汽車に乗ってるからip変わるよ 文体でわかるでしょ
素人呼ばわりしたことを僕に謝って欲しい 僕はJavaに残りの人生すべてかけてる 子供も恋人も友達も作らなかった 僕は30億のデバイスで動くJavaと共に生きるんだ
>>142 > シリアライズでバイナリが一致することは保証されない
> ことを意味するものではない
内部の順序は違うけどシリアライズする時には常に同じ順序でシリアライズするとか普通はやらないからやると言うならその根拠出してくれ
>>147 僕そんなこと言ってないから
その根拠出さない
Java歴2年ぐらいです Javaで独自のファイルリネームソフト作りたいんだけど、今の時代のJavaでのGUIに丁度いいフレームワークやライブラリって何がある? 5年ぐらい前にちょっとSwingに触れたんだけど、他にもあるみたいで、どう違うのかが分からない それぞれの違いも強みも分からないんだが、何かアドバイスある?
Javaの入門書やJavaでのWeb関連の入門書については本は沢山出てるのに GUIとなると全然本が無い 俺はJavaしか知らないからJavaだけでGUIやりたいのに
じゃあJavaでGUIってどうなんの? そもそも想定されてないの?
とっかかりの所だけ教えて欲しい アマゾンで書籍を検索してもSwingだのJavaFXだのヒットしても出版年がどれも4,5年以上前のモノばっかり 俺は新しい技術で学習したいのに、仮にSwingで学んだとしても世間で役に立たなくなってしまうようなのはさすがにいや
>>154 JDKに含めて配布するのを止めただけでは?あのライブラリそのものはフリーで生き続けてると思うが。
>>159 君が新しいの作って世界中に広めれば良い。
>>159 まあでも4,5年は生き残っている技術ではあるわけで
最新の技術は明日消えてもおかしくない
swing, spring, javafx あたりでいいんじゃないの
個人的には java そのものを進めないけどな
>>159 Swingが一番いい。昔から安定してるし、使いやすいし、
分かり易く、美しく、プログラマからはコントロールしやすい。
恐らく現存する ToolKit の中でも最も美しい設計だと思われる。
Kotlinだと探せば、Swingを美しくラップしてくれるライブラリとかありそうだけどな。 DSLで宣言的に書けるような。
>>159 Java FXは死亡したのでSwingを使うことになるが
Swingは全然新しくなってないので古い資料で十分
新しくなる見込みもない
「JavaGUIプログラミング JavaSE6対応」のVol.1とVol.2買っとけ
swingがいいと思う。 pure java で使いやすい。
え?Swing はベースが awt だから pure java ではないよな?
初心者なんですがクラスでインポートしたクラスインスタンスを作った後にそのインスタンスをメインメソッドで呼び出すって事は出来ないんですか?
こんな感じか public class Test{ static String s = new String("a"); public static void main(String[] args){ System.out.println (s) ; } }
えーとですね例えばリストクラスとかをあるクラスにインポートしてインスタンス化した後そのインスタンスをメインメソッドのあるクラスで呼んで使う場合どうすればいいのかと考えたんです。 今のところメインメソッドのあるクラスでしかインポートした事ないので他のクラスでリストなどの配列処理をさせてその処理の結果をメインメソッドで出力したいのです。
>>178 そのクラスのメソッドから List のインスタンス返せば良いだけでは?
何に悩んでるかよくわからない。
staticメソッドとインスタンスメソッドの区別がついてないだけだろ。
staticでない変数をstaticコンテキストから参照することはできません
>>179 返信ありがとうございます
そのやり方をコードで見せてもらえませんか?
これでいいんじゃね?何も難しいことない。 *** 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; } }
>>183 ありがとうございます!!メソッドの中でインスタンスを生成するのとそのインスタンスメソッドをメインメソッドで代入する時の型はどうすればいいのかが分かんなかったんです。
ただ自分のコードで書いたらメインJavaの操作は安全ではありませんと出てコンパイルエラーになる(´・ω・`)
調べたらエラーじゃなくて警告なんですね実行できました!!初心者スレでするべきでしたね答えてくれた方々ありがとうございました^_^
>>177 こら!StringのコンストラクタにString渡すんじゃない!
メインアプリのプロジェクトA そのアップデータのプロジェクトB があります。メインアプリもアップデータも自己完結型パッケージにして 1個のzipかインストーラでインストールする予定です。 あとBからAのクラスを参照したい。 それで今こう考えてるんですが妥当なのかどうか。 ・プロジェクト参照でBの開発中にAのクラスやライブラリを参照することができる ・自己完結型パッケージにするときAとBでclassファイルやjarを共通化できる? ・実行可能ファイルが複数あっても自己完結型パッケージにできる?
疑問を追加します ・自己完結型パッケージにおいて、アップデータを実行しているJREをアップデータが更新できるのか?
加えます。
・Java8よりJava9以降のJigsaw対応バージョンの方が自己完結型パッケージのサイズは小さくなる?
・ライセンスを確認したところ独自のソフトウェアと同梱する場合JDKを再配布しても良いようだった。
https://www.oracle.com/technetwork/jp/articles/java/ja-topics/jdk-release-model-4487660-ja.html >「ユーザーが開発したソフトウェアとともに配布すること」という制限事項があります
・アップデータでインストールされた自己完結型パッケージのJRE部分を丸ごと削除して新しいものに置き換える動作はライセンスの範囲内のように読める。
つまりデスクトップアプリでメインアプリ+アップデータという構成でどうやればいいのかなと。
自己完結型パッケージ+Java8とか考えてるんですが、
OpenJDKなのかOracle JDKなのかとか選択肢が多くてちょっと混乱してます。
・AdoptOpenJDKというのがあり、OracleJDKやOpenJDKなどと異なる”ビルド”であると 説明されますが、ソースコードが同じなのにビルドでどれだけ変わるんですか? これまでOracleJDKで開発してきたソースコードはAdoptOpenJDKに移行すると問題が生じますか?
Javaのビルドについて考えてるとブラウザのタブがどんどん増えていく・・・ Correttoが良さそうですね。 HotSpotの代用としてGraalVMが作られているようで、じきにこれがHotSpotを性能で上回るでしょう。 しかも少なくとも商業的にはOracleが独占的ライセンスを維持する可能性が高く、 Oracle以外のJREでは利用できないでしょう。 つまりOpenJDKビルドが乱立している状況はHotSpotが自由なライセンスで公開されている事に依存していて、 OracleがGraalを始動させたら終わってしまうかもしれないということです。 現時点でGraalはHotSpotの性能を上回っていません。
何で自己完結型はJREを含めるのにexeを作るんだ? 同梱されたJREで ./path/to/jre/bin/java app.jar でいいだろ
ポリモーフィズムって過程はともかく同じメソッドの呼び方で様々な結果が出れば良いって考えなんだけど違う?
クラス、抽象クラス、interfaceと多数の型を備えている事では?
異なる具象クラスのインスタンスを まとめてメソッドに渡せる仕組みだと勝手に思ってる 象クラス、麒麟クラス、うさぎクラス まとめて受け取る動物メソッドみたいなもん
レールの幅が同じなら違う車両も乗せて走らせられるみたいな
”様々な結果が出れば良い” これだと引数が違えば違う結果が出るから妥当じゃない 逆に異なる型の異なるメソッドを呼び出したとしても同じ出力になるかもしれない 1種類の型に対して定義されたメソッドが複数の型に対して機能する、ってことだ
Function<A, B>とFunction<B, R>を合成してFunction<A, R>にしたい そしてふたつのConsumer<T>を合成してConsumer<T>にしたい 教えてクレメンス
>>200 歴史的な経緯もある。
オーバーロード・オーバー・ライドの多態性が先で、テンプレート(ジェネリクス)が後だから、時代によって勧める多態性が違う。
EclipseでコンパイルレベルJDK11までしか選べないんだけど まだJDTが12まで対応してないとか?
自己解決。ベータ版のプラグインを入れる必要があったようで
>>204 eclipseはJDK8と心中だろう
そんな最新のJDK使える開発で未だにeclipseに拘る意味がわからない
いい加減IntelliJに乗り換えろよ
IntelliJは使ったこと無いな NetBeansよりオススメ?
試しにNetBeans, IntelliJ両方入れてみたけど重くてもEclipseのUIが一番でしょ
Eclipseって立ち上げが異様に遅くない?うちだと2分くらいかかるよ。Windowsのアップデートが来るとうんざりする。
IBMは何でEclipseで無駄な開発をしたのかね。無償提供して何か報われたのかな。
>>211 それを言うなら日本はなんでアメリカと戦争したのかね
核を落とされただけじゃないか
>>208 オヌヌメ
UIが好き勝手にできる (そりゃ当たり前か?)しかっこの前にスペースを入れる入れないとか細かい次元で設定もできる、おまけにリファクタリングが充実してる
欠点としてはズームで拡大縮小ができないことぐらいかな
CommunityエディションでもすごいけどUltimateエディションだともっとすごい
OSSとか開発してるならただで手に入るから試してみ
jvmのgcは実際どれくらいのラグを引き起こすものなの? 例えばメモリ1GBくらい使ってるアプリで
java8のGCで。デフォだとパラレルGCだな。 コンカレントGCだとどれくらいなんだろう。
JVMからデバイスドライバの機能を呼び出す事ってできます? Javaで特殊デバイスと連携するプログラムは開発できるのかなとおもって
>>221 普通はJNIで橋渡しする部分を作る必要があると思う。
しかしLinuxみたいに特殊なファイルに読み書きするだけである程度の操作ができるようなOS及びデバイスドライバならばファイルの読み書きだけでなんとかなってしまうかも知れない。
rootユーザーにならないと駄目かも知れないけど。
しかし例え Linux だったとしてもなるべく /dev や /sys 以下の特殊ファイルを直接読むように作るんじゃなくて読み書き用のコマンド実行するように作った方が良いかも。
というのは kernel のアーキテクチャやバージョンによって同じファイルが違ったりなかったりするかも知れないから。
例えばLinuxでCPUの温度を取得する方法が書いてあるページが以下にあるが、 /sys/devices/platform/coretemp.0/temp[0-9]_input または /sys/class/thermal/thermal_zone0/temp を読めばいいことになっている。
https://qiita.com/koara-local/items/1fac13704123717f5cc8 しかし lm_sensors をインストールして sensors コマンドで読むようにした方が良い。
その方が違いがあってもそこで吸収してくれる可能性があるし、Windows 等の他の OS だったとしても同じ形式で出力をするコマンドがあれば(またはなければ自作すれば) Java の方のプログラムを変えなくて済むからだ。
OSGiの説明読んでたら実行時に依存ライブラリを置き換えれるみたいに書いてあったんだけど 危なくない?
クソ古い機種でなければ、SELinuxが邪魔するはずだ。
新しいswitch構文いいね Java13でも何か増えてほしい
まるで Kotlin のような switch だなあれ。 こうやって徐々に拡張してって気づいたら Kotlin そっくりになってたりしてなw
JavaFX11をJava8で動かす事はできる? 例えばCorretto8とかで
JavaFXはもうJavaファミリーじゃなくて単なる野良ライブラリの一つだから他所で聞いて
substance.jarとかlookandfeelのライブラリもみんな死んだよなあ
arrayListのaddメソッドについて質問です。 中身のないリストに、インデックス無しのaddメソッドで中身を追加していくと 0.1.2.3~順番に自動でインデックスを付けてくれました。 この挙動は信頼して良いでしょうか? それとも引数無しでaddしていくと、稀にインデックスがおかしくなったりしますか?
char型配列についてお聞きしたいことがあります。例えば char[] array = {'J','a','v','a'}; とした時、array[4]が「何もない(空である)」ことはどうコードで検出すればよいのでしょうか? if文などで、4要素目が「空である」ことを検出するコードを書きたいのですが…。
>>232 ArrayListのaddはリストの最後に値を追加するから
値を追加した順番にインデックスがつけられることは保証されるよ
1 jar実行時のカレントディレクトリが環境によってまちまちだって聞いたんだけど本当? 2 コマンドラインでディレクトリAに居ながらjavaコマンドでディレクトリBのjarを起動したら そのjarの中でカレントディレクトリはAとBどちらになる?
2を自分で実験してみたんですが コマンドラインのカレントディレクトリがjar内部でもカレントディレクトリですね。 つまり./folderを作成したら、コマンドラインの位置に出現する。
new File(".").getCanonivalPath() あってるかどうかは知らん
>>234 返信が遅くなりすいません。
ありがとうございました。
>>239 シンボリックリンクを手繰っても良い場合はそれでも良くて、ダメな場合は Paths.get(relativePath).toRealPath(LinkOption.NOFOLLOW_LINKS) のようだ。
https://qiita.com/nwtgck/items/5dd7a3008a5a31bf964e これやばくないですか?
プロジェクトのトップからの相対パスで色々なファイルを指定する事は珍しくないはずです。
そうして作られたjarをコマンドライン等から呼び出すとき
カレントディレクトリが狂わないように調整する必要がある。
相対パスのFileオブジェクトの参照先はカレントディレクトリ依存ですよね?
しかもカレントディレクトリがどうなるかは環境依存ですよね?
と思ったらjavaコマンドの引数で-Duser.dirを指定すればいいようです。
でも、デスクトップアプリだと、環境別に起動スクリプト書かなきゃまずいですね。
エンドユーザーは-Duserr.dirを指定しません。
どこから呼び出しても良いようにしたい、エンドユーザーの利便性のためなのに、
起動スクリプトを使うのは本末転倒な気がします。
と言ってもコマンドラインから呼び出す場合しか実際問題にならないだろうけど。
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4045688 user.dirは起動後だと修正不可能。
>>242 カレントディレクトリに依存しないように
プログラム組めばよいし
カレントディレクトリに依存するなら
シェルスクリプトやバッチファイルで
カレントディレクトリを指定するのがセロリーですよ
プロジェクトのトップからの相対パスになるんだなんて 思い込みがなければ問題ナッシング
カレントディレクトリに依存してはいけないというなら、 相対パスを使えないという事になるのでは? しかし絶対パスはたびたびOSのユーザー名など個人情報が入ります。 できれば扱いたくない。
http://d.hatena.ne.jp/yomama/touch/20080718/1216394398 やはりいい方法が無いと。
それどころか、リソースファイルを取得する時URLクラスで相対パスを使うのが
ベストプラクティスとして紹介されている事がある。
それはカレントディレクトリに依存するのか?クラスパス依存だから問題ない?
そもそも、クラスパスが相対パスだったらカレントディレクトリ依存で解決されるだろう。
どうやって相対パスを使わずに組むんだ?
エクスプローラーから直接実行ファイルをダブルクリックしたら、そこがカレントディレクトリじゃないの? ショートカットを作成して、それをデスクトップとか他のフォルダに置いた場合、 そのショートカットのプロパティをみると、「作業フォルダー」ってのがあって、それがカレントディレクトリではないかと。
>>246 どんな実行方法でもjarがある場所をベースにしたいってことならjarファイルのパスを取得してそこから相対パスで扱えばよいよ
各種リソースは、プロジェクトフォルダからの相対パスだろ PROJECT_PATH などの定数・変数を作って、そこからの相対パスを定義すればよい
>>245 パスを引数で渡したり
カレントディレクトリに依存するなら起動するときに
指定するのがセロリーだよ
>>246 リソースファイルは普通クラスパスから読み込むよ
シェルスクリプトやバッチファイルで
起動時にリソースを配置したディレクトリを
クラスパスに指定するのがセロリーですよ
例えば実行時にworkフォルダに相対パスでファイルを吐き出したいときは シェルスクリプトで cd work のコマンドを実行してから javaを実行するよ
スクリプトからjarを実行すれば プロキシを指定したり使用メモリの上限を指定したり ログの出力を変えたりできるよ エンドユーザーの利便性を考えるなら起動スクリプトを 作るべきだと思うよ jarは直接実行するものじゃない
>>249 プロジェクトフォルダってソースコードを管理する
ものだから実行時にその存在を前提にするのは設計としておかしいと思う
開発環境からしか実行しないなら問題ないけど
今回のようにjarを配布して実行してもらうならマズいですよ
>>237 の質問はよくわかる、なぜなら俺もむかしそう思ってたから
実行時にはjarの内部にいるんだと思いがちだけど
jarにはクラスファイルが入ってて
それを外から実行してるだけなんよ
http://aarkiton.blogspot.com/2011/09/getresourceasstream.html >実行時にクラスがjarファイルなどに格納されている場合、実行環境によりなぜかgetResourceAsStream()でリソースが読み込めない場合があるようだ。
こういう記事があるから、リソースの読み込みをクロスプラットフォームにするには、
URLでアクセスするのが良いとされている。
ところがURLアクセスの方法は相対パスを使用している。
クロスプラットフォームかつどのフォルダからも実行できるようにする方法はない。
あるとすれば、環境別に起動スクリプトを書く場合だけ。
起動引数無しで起動されたら即終了するようにして、
必ずスクリプトから起動させるしかない。
でも、それって、JVMが動いてても起動スクリプトが無いと動かないから、
マイナー環境向けにスクリプト書かれないだろうから、
クロスプラットフォーム感激減だ
なんていうか、プログラムってしんどいね 環境ごとの無意味な違い(ファイルパスの区切り文字とか)で振り回されるし
つーかその張ってるリンク先で言ってる話はまた別の話だと思う 読み込むpropertiesファイルもまとめてjarにいれた場合に読めないって話でしょ 結局やりたいことの為に何が必要なのか考えてみた方がよいと思う
プログラム上の問題というより環境的な問題だから 自分じゃどうしようもない これはプログラムが悪いんじゃなく、ソフトウェアエコシステムの問題だ すんなりとクロスプラットフォームになって カレントディレクトリとか余計な問題に悩まなくていい開発方法があればいいのに
カレントディレクトリを前提にパスを扱うからいけないだけ jarファイルの場所を起点として相対パスを使えばいいだけだよ
それは絶対パスを使う事になるから、できれば避けたい でもそれしかないかもしれない
スクリプト書けばいいのに シェルスクリプトならPOSIXに対応した環境で使えるし WindowsならPowerShellとかBATファイルとかあるじゃん スクリプトじゃなくてプログラムでも良いけど それができない環境はないよ JavaのクロスプラットフォームはJVMが環境の差異を吸収するからソースコードコンパイルし直さなくて平気だよってものなのでカレントディレクトリが実行環境によって変わりますっていうのは別の事柄だよ Java製のV2CやEclipse、NetBeansといったソフトウェアもjarを直接起動することないよ、起動用のプログラムは別で用意されてて一緒に配布されてる カレントディレクトリの概念は便利なものだよ
便利なのはわかるんだ 例えばmkdirだって、どこかに置かれたプログラムで、カレントディレクトリにおいて作用するわけで。 関数的なプログラムはそれでいい。 でも状態を持つプログラムにおいてそのプログラムが置かれたフォルダに状態を作るというのも便利なものだ。 これはOOP的。 エンドユーザーからすれば、良く分からんところに状態を作られるのは嫌。
>>264 じゃあユーザーにはスクリプトを配布してそれを実行してもらうようにすればいいよ
カレントディレクトリ無視してjarのディレクトリで動作しますというのがユーザーにとって迷惑なこともあるわけでユーザーがコントロールできるのが望ましいのじゃないかな OOPや関数型プログラミングは今回の件と関係があるとは思えない
・プログラムの動作上必要なファイルをjarと同じ場所に配置する ・プログラムではそのファイルに相対パスでアクセスする という要件でしょ
相対パスはカレントディレクトリからのパスなので カレントディレクトリを変えるしかなく スクリプトでカレントディレクトリを変える jarのパスを引数で渡すなり実行時に取得するなりして Path.resolveメソッドで相対パスを解決する
・個人情報が含まれることがあるから絶対パスを使いたくない。
>>270 その理由がよくわからない
パスはプログラム内部で使用するだけじゃないの?
パスを公開するん?
カレントディレクトリからの相対パスを使用したとしても Path.of(".").toAbsolutePath() としたらプログラムでは見れるので プログラムに対して絶対パスを隠す意味はないですよね 絶対パスを指定するとしたら実行時にスクリプトで絶対パスを取得して javaに渡すなり、javaから取得するなりすると思うんですよ Path resourcePath = ...; Path text = resourcePath.resolve("text.txt"); こんな感じで ログに出力したくないというのであればtext.getFileName()をログに出力するようにすればよいかと 絶対パスを使いたくない意味がよくわからない
>プログラムの動作上必要なファイルをjarと同じ場所に配置する この要件が意味不明過ぎる。 初めからプログラムが知っているべきものなら、CLASSPATHから辿れるResourceでいいし、 外部から与えられるファイル(設定ファイルとかデータファイルとか)なら、 ユーザが「知っている」はずだから、それに従うだけ。
自分ならjarのあるディレクトリに移動してプログラムを起動するバッチファイルを使うわ。 プログラムではカレントディレクトリにあるはずのファイルが無かったらエラーを吐いて止まる。
それosごとに書くの? write everywherewww
>>275 シェルスクリプトならUnix系のOSで使える
WindowsならPowerShellでいんじゃないかな
実質2つだけかと
頭悪すぎ。 権限とかセキュリティを考慮すれば、ワーキングディレクトリもユーザ側に委ねるべきもの。
>>258 Ruby では、Windows のパス区切りも、/ で統一されている。
Dir.glob( 'C:/Users/Owner/Pictures/*' )
Rails では「設定より規約」というポリシーだから、何も設定しない場合には、
プロジェクトフォルダ内でのリソースの置き場や、
それらのdeploy 後の置き場や、アクセス方法も決まっている
このように、フレームワークを使うと、その規則に従うから、何も考えなくてよい!
>>279 え?Windowsって昔からプログラムでファイルオープンする時は / 使えなかったっけ?
昔々 Delphi とかで使えた記憶があるんだけど。言語の問題じゃなくて Windows API が / も受け付けてるって事ね。
コマンドラインから受け付けないようになってる理由は昔から / をスイッチとして使ってるからだと思う。
C:\Users\Owner\Pictures\ Python では、\ をエスケープするために、\\ を2つ使った、表記をよく見る。 C:\\Users\\Owner\\Pictures\\ 一方、Ruby では、 C:/Users/Owner/Pictures/
>>281 わからんけど試しにWindowsのPythonで / でやってみな。多分できる。
Perl もできた。
てか、言語関係ない筈。
カレントディレクトリをユーザ側に委ねると 前回のセーブデータを必要とするとき、GUIとかでユーザーに設定してもらう必要がある。 アプリフォルダに入ってれば自動的に見つけれる。 俺はカレントディレクトリをユーザ側に委ねる使用法を否定していない。 ちゃんと読んでくれ。誰もそんな事は言ってない。 ただアプリによってアプリフォルダに状態を持つ方法が必要になると言ってる。 しかもそれを相対パスとして実現できる必要がある。 この話は、Oracleも必要性を認めていて、しかし問題があり却下していたはず
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4045688 >A chdir that has inheritable thread local semantics is much safer and
clearly useful, but it is quite an implementation challenge.
カレントディレクトリを大部分のアプリにおいてユーザ側が制御できる事と 一部アプリにおいてアプリ側が制御できる事は両立する。 誰もカレントディレクトリをユーザ側で制御する事を否定してないのに、なんでそんな話が出てくる?
> 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を持たない事は欠陥だ。 アプリコードで実行されたクラスのパスを取得してそれをプリフィクスにすればいいと 上で意見が出ているが、それではライブラリの動作が透過的に変更されない。
俺の説明が正しいかは分からない。 俺は細かいところを間違えたかもしれない。 でも、javaが実行時chdirを持たない事が欠陥なのは間違いない。
カレントディレクトリをユーザーが指定しつつ 同時にプログラム側でchdirすべき場合があるじゃないか。 1プロセスでマルチユーザーからのアクセスを受け付けるプログラムで、 ユーザーがカレントディレクトリを指定して、 プログラム側でスレッド別にユーザーが指定したカレントディレクトリにchdirする場合。
>>285 だからその用途の場合は実行時にjarの場所を取得して、そこからの相対パスで扱うべきって話をしてるわけだが
相対パス=カレントディレクトリを基準に使わなければいけない、みたいな謎ルールがあるのか?
これ2006年ごろ会社でBtoBtoCのシステム作っててやったの思い出した クライアント別にchdir ApacheとLinuxの仕組みを活用して達成できたけど、 クロスプラットフォームなやり方は無いと思う。
>>291 >それではライブラリの動作が透過的に変更されない。
>>286-288 と
>>290 と
>>292 あたり読んでね
読まずに返信したらダメだよ
理解してから書いて
この話題は
>>290 が完ぺきな説得力を持って俺の中では終わってる
そのオラクルのサイトでもこう書かれてる。 >This needs co-operation from the runtime (if we chdir() the VM, then the IO libariries would get transparently updated). chdirはライブラリの動作を透過的に変更できる。 お前らが言ってるクラスファイルのパスを取得して接頭辞にしろというアイデアは、 ライブラリの動作で問題が生じる。
カレントディレクトリのファイルを読み書きするライブラリなんてあるのかね ファイルを読み書きするならFileなりPathなりInputStreamなりOutputStreamなり を引数として取るように作るんじゃないかな もともとはカレントディレクトリがプロジェクトのディレクトリになるという 勘違いから起こった話題だけど何を解決しようとしてるのかよくわかんない
もともとは「カレントディレクトリが何になるか環境依存で決まる」という話。 ライブラリでカレントディレクトリに依存しているものはたくさんある。
>>300 具体的になんてライブラリなの?
たくさんあるうちから比較的有名なものを教えていただけると
具体例をあげさせようというのは、 「そんなライブラリ存在しない」と本気で思えるからなのか? 言語仕様的にカレントディレクトリへの依存なんてFileを相対パスで使ったら生じるもので それが一般に無いなんて前提は持ちようがない。 お前は単に俺に無駄な手間をかけさせようとしているだけとしか思えないんだが? お前の本心は何だ?”本気でその質問がここに居る人たちをより優れた認識に導くと思っているのか?” あるいはただのクズか?
Javaを使う全ケースで共通のカレントディレクトリ依存のファイル作成処理。
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/troubleshoot/felog001.html このファイルが作成される事はプログラム側の問題だから
プログラム側のフォルダに作成されるのは基本的に正しい。
多重起動防止テクニック
http://d.hatena.ne.jp/knowledgefort/20090902/1251885412 1フォルダにつき1つしかプログラムを起動させたくないなら、
プログラム側のフォルダにロックファイルを作るのが正しい。
HTTPサーバつきのDBはプログラム側のフォルダにDBを作る事が多いだろう。
他にも全利用のログや統計が必要な場合。
結局一人で調べて一人で解決したほうがいいんだなと思った。
正しい着眼点と方向性で進めててもアホ呼ばわりされる。
こいつら極限まで分かり易く示さない限りアホ呼ばわりしてきそうだ
ああ・・・エラー処理はカレント側に作成されてるな ただ、これもそうだが、分かり易い事例を示すのが難しいだけで俺の意見が正しい。 現実のプログラムであればそういうシステムを多々見てきたし、 プログラム側のフォルダに状態を作るべき場合は存在する。 たとえ事例が無くてもそれが存在するのが分かる。 オラクルのエンジニアだってそういうメリットがあるから スレッド別の継承型chdirが望ましいと書いてたろ? 「自分でわかる」「著名人もそう言ってる」 この段階からさらにお前らが分かるような事例を持ってこいってのはさらに難しい
>>302 俺はカレントディレクトリのファイルを読み書きするライブラリを知らない
君はそれをたくさん知ってるということだったので
教えてもらいたかっただけだよ
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/troubleshoot/felog001.html これはファイルパスを指定できるようになってて
デフォルトではカレントディレクトリだよってことですね
ライブラリではなくてjavaの仮想マシンがそういう動作をするってことですよね
http://d.hatena.ne.jp/knowledgefort/20090902/1251885412 これはカレントディレクトリを使ってはいけないんだってことを
君は言いたいのかな、よくわかんなかったけど
例の一つもしめせない正しさなんかいらない。 連休明けにお前の席、ねーからー!w
>>305 君が見てきたいろんなシステムはjarを直接起動するシステムばかりだったの?
特殊な環境にいたのかなと
プログラム側のフォルダに状態を作るべき場合が存在するのは否定しないよ
そういうこともある、その場合はjavaを実行する前に指定しましょうというのが
一般的なやり方だよ
前にも挙げたけどEclipseとかV2CとかNetBeansとか
Java製のソフトウェアは起動用のプログラムとjarが別れてるよ
アプリケーションサーバのTomcatなんかもそうだよ
起動用のスクリプトの中でパラメータを指定したり環境変数を定義したり
して実行環境を整えてjavaを実行してるよ
お前ら6ヶ月超えたLTSはどうしてる? ぶっちゃけAdapt OpenJDKとOpen J9しか無かった頃はOpen J9は影響力無いだろうからAdapt OpenJDKがupstreamに変更内容pushしてくれれば済んだじゃん。 ディストロ乱立した今Azulみたいに大してupstreamに貢献してない所あるからディストロ毎の変更の差が広がるけど。
JAVAも人気が無くなっちゃったね 勉強しようかと思ってたけど今は何がおすすめ? C++あたりかな?
天の邪鬼なんで今からjava勉強しようと思います もとの専門が強電と計装なんですけどつながる所ありますか?
理系脳があれば文系Javaマの大多数よりは上 現場のレベルの低さは想像を絶する
なんだろうね。数学的能力はあった方が良いがそれだけではないし。 手順を言葉で表現する能力もある必要があるがそれだけでもないし。
よくわからんまとめサイトにjavaって読書好きな人向けみたいに書いてあったんだけど本当? 何時間も細かい文章読んでても気にならないタイプなんだけど ただイメージわかない物は苦手ですが(英語とか辞書とか)
>>317 長くて複雑な資料を読んで理解できる能力は言語関係なくITエンジニアにとって極めて重要
応用情報の午後の過去問なんかをダウンロードして見てみたらイメージ掴みやすいと思う
あれはよく読めば大して知識なくても解けるもので、そういう人は向いてる
Kotlinはjsにコンパイルする環境がすでに整ってるけど Javaはgwtがコケて完全に死んだよね
某組み込み系の比率が高い県の未経験者です 組み込み系(C言語)とWeb系(PHP)両方の経験を積みたいんですが最初にjavaをがっつりやるのはありですか? javaがっつりやって流れでC言語もPHPも出来るようになる作戦なんですが虫が良すぎでしょうか それとももっと良い言語がある?
JavaがわかればPHPは余裕 C言語はクラスがなかったりポインタとかメモリ管理とかJavaの常識が通用しない ループとか条件分岐とか関数はほとんど同じだけど やってみたらいいじゃない1週間あればいけるっしょ
>>323 なるほど、古いほど難しい感じ?なんですかね?
とりあえず今やってるjavascript終わったらしばらくjava一本に絞ってみます
すいません、今からならjava8やるべきですかそれとも11ですか まあ11は探しても本無いんで何すべきかわかんないですが
11でコード書いたら下方互換がないのってLambdaのvarくらいか。 非互換さえ理解しておけば、11から始めてもいいんじゃないか。 どうせそんなこと聞いているくらいだから、Tiger時代くらいのAPIしか 使わんのだろうし。
今からやるならモジュールから入ったほうが良いから11かな。
下位互換のためだけにあるunnamed moduleとautomatic moduleの
ルールが複雑だから9以降初学者は最初に普通のモジュール使ったほうが覚えるの簡単だと思う。
あとは
>>328 の言う通り8以降でapiかなり変わってるからapi覚え直したほうが良い。
今からやるんだったら まず Java をやらない方がいい としか言いようがないな
関数型インターフェースを使いたいときって自分で作ったほうがいい感じ? 実行するときに.accept()とか書いてあっても何するのかわかりずらかったりするかなーって思った
未経験者です すっきりわかるjava入門上下2冊とeffective java第3版どちらにするか迷うんですがeffective javaシリーズは初心者が触っても大丈夫なものですか?
>>335 effective javaは将棋に例えるなら定跡集
駒の動かし方は書いていないから初学者には一ミリも理解できない
俺は物事がわかってスッキリしたという感覚がわからない。わかるかどうかとスッキリするかどうかは無関係ではないか?
スッキリてどゆこと? 保守するときにメソッド名が関係なかったら理解するのに時間かかるじゃん
質問、Javaでint型変数だけを宣言すると初期値は何も入らないんですか? Cの場合はint型変数を宣言した時点で変数に初期値を入れない場合、乱数が格納されると記憶に残ってるんですけども
jniでネイティブコードを呼び出した場合、 オーバーヘッドじゃなくて実行中の性能に差は出るんだろうか?
それはそのnativeなコードがどう作られているかによるのでは?
>>344 結構、出るはず。
特に、C/C++ は GC が無いので、体感速度に影響が出るくらい速く動く場合
も少なくないはず。実際、現実にC#とC++でもかなりの速度差があるのは、GCの
せいだと考えられるし。
native バイナリで動く言語は、システムへの保護がCPUレベルの #GPE などで コスト0で行えるのに対し、VMで動く言語は通常、VMシステムへのデータ保護 がソフトウェアレベルで行われていることが多く、JITコンパイラでバイナリ コードに変換されても、その部分による速度差が埋まらない。 だから、アプリ自身のコードは、nativeバイナリに比べて3~5倍程度の 遅さで動いていることが多い。
>>344 が聞きたいのはそういうことじゃないと思うよ
JNIから呼び出されたネイティブコードvs純粋なネイティブコード の話。 オーバーヘッドがあるのは分かるけど、 それ以外の実行中の性能にも差があるのか?
>>349 ああ、そういうことなら、原則的に「無い」ハズ。
本当に CPU が Linux の普通のbinaryのコマンドと同じように
実行してるだけだから。実際、JNI のC/C++部分のコードは、
shared library の libxxxx.so になっていて、Activity の
クラスの初期化時にプロセスの中に動的にロードされて使われている。
この so ファイルは、linux の elf 形式の arm バイナリ・コード
になっていて、Androidではない、UbuntuなどのLinuxの普通の
共有ライブラリと全く同じように実行されている。
むしろ
>>344 をほかにどんな意味に受け取るのか教えて欲しい
GraalVMだとネイティブコードでも配列の境界チェックとかをしてるとかで ちょっと遅いらしいんだけど JVMだとそれは無いのか
>>334 1. 3つ以上の引数を受け取りたい時はそうしなきゃいけないし、Byte、Float、Short、Booleanのボクシングのコストを許容しない場合もそうしなきゃいけない。
2. FuctionalInterfaceは主にラムダ式用だから明示的にacceptはよびださないとおもう。
>>353 Java言語規格で境界チェックは必須になってたような?でもJITで境界チェックが(明示的に安全なfor-eachとかで)取り除かれるとかはあるかも?
>>353 >>355 JNI の native コードは、単純にCPUが NO CHECK で実行するだけなので、
JVMもろとも壊そうと思えば壊せるはず。
逆に言えばなんでも出来て、推定だけど、Linuxのシステムコールは基本的に
自由に呼べると思う。ただし、su, sudo コマンドみたいなものまで
作れるかどうかは良く知らない。
コマンドの permission に 「setuid bit」が立ってないと sudo のような コマンドは作れないらしいね・・・。s
たぶんID:/8K02Lja0はgraalのどこかを勘違いしてるんだと思う。 graalはまず、javaでjitコンパイラ書くapiが新しく作られて、それを利用したjitを持つランタイムでjavaとは全く別の製品だからjavaの仕様は無関係。 ネイティブコード吐くときに境界チェックするとかはこのコンパイラ挙動で、それを実装するのがjitコンパイラ書くapiのユーザーの仕事なんだよ。
jarに同梱されてるクラスと クラスパスに与えられたjarのクラスで パッケージ名やクラス名が重複していたら どっちが優先して使われる?
>>360 未定義
Javaでは同一の修飾名をもつクラスは絶対に存在してはいけない
>>360 クラスパスに指定されてる順に優先されるよ
-cp A.jar:B.jar
だったらA.jarが優先される
>>361 んなこたーない(タモさん
パッケージプロテクテッドのメソッドをオーバーライドするときに
同じパッケージにクラス作ることあるよ
>>362 でも-jar xxx.jarみたいな場合、-cpじゃないんですが
>>364 -jarが優先されるよ
-jarと-cpは併用できない
https://stackoverflow.com/questions/18413014/run-a-jar-file-from-the-command-line-and-specify-classpath ここによると-cpの時Mainメソッドを含むクラスを指定しなきゃいけないみたいだけど
発見されるマニフェストファイルが1つだったらそれを頼りにMainメソッドを特定できそうだけど
いちいち指定するしかないの?
>>369 指定するしかないよ
マニフェストファイルのMain-Classは実行可能Jarで使用されるものだから
それが使われるのは-jarを使ったときのみ
>>371 詭弁ですね…
①OpenJDK は新しいバージョンが出るとサポートが打ち切られる
②8年間のサポートが保障される LTS は有償
ど う 考 え て も J a v a は 有 償
アダプトとかアマゾンとかが数年単位のサポートは提供するよ
古いバージョンそのまま使い続けたらどうなるん? 何か困るんかね
アプリの実装に問題がなくても、 Javaの脆弱性を突かれて問題が発生したりして、 偉い人に怒られる。
インターフェースやジェネリクスの勉強がてらqueueの実装をしてみたいのですが、 何かお手本になるOSSやクラスありましたら教えて下さい。
javaの各バージョンの利用者割合の最新情報ある?
>>381 それを知ってどうするの?
SIなら要件上許される範囲で最も新しいLTSを選べばよい。
自社(or個人)サービスなら非LTSの最新を選べばよい。
まさかとは思うがデスクトップアプリの話してるのだとしたら、スタンドアロンJREは廃止されたから、クライアントに元々インストールされているJavaに依存することはできない。
好きなバージョンをアプリに同梱して配布することになる。
いずれにしてもJavaのバージョンは開発者がコントロールするものであり、シェアを気にする意味はない。
wordpressとかいうのをいじるのつまらなくなったからスッキリわかるjavaかったがやっぱり勉強ってこういう分厚い参考書でやるのが楽しいんだよな! という事でweb系からjavaの勉強に切り替えます! 俺だけ?
>>382 永劫 Java8 で固定される(LTSも延長される)未来が見えます…
>>383 奇遇ですね、私は Java8 から web 系(rails)に乗り換える予定なのです
>>382 私はJavaエコシステムがJava8に留まってJava9+を無視するのではないかと思っています。
私自身はそうします。
Jigsawや自己完結型というアイデアを拒否します。
それで、世界の動向がどうなのか知りたかった。
Javaについて調べていると「Javaはサンドボックスを持つ」みたいな記述が出てくるんですが それはアプレットの事で現在のJavaにはありませんよね?
executable jar fileはどの環境でもダブルクリックで起動できますか?
>>395 ・javaがインストールされてる
・拡張子.jarがjavaに設定されている
の条件が必要かと
>>394 一番堅いのはJVMの仕様書を読むこと
昔も今もJVM上で動くプログラムはすべてSandboxで実行される
その外に出ようとする動作はSecurityManagerが許可不許可を判断して、ダメなら例外を投げて落ちる仕組み
ただし、ローカルで実行されるアプリはデフォルトがすべて許可なので例外が起きることはない
未経験の他業種工業系アヘアヘ資格マンなんだがオラクル資格は制作物作った後にそのレベル相応の色の奴を取った方がよいの? それともアヘ顔でgoldの参考書から先に手をつけても良いの
goldでも実務経験ないと「で?」って対応されるで
>>400 そもそも電気主任技術者は実務が簡単で、さらに試験が実務とかけ離れていて、とにかく謎資格だから比較対象として挙げるべきではない。
>>400-401 あれは地頭をみるための篩なんですよ、持ってればエントリーできる、持ってなければ門前払い、ってやつです
証書番号で試験組か認定組かを判別できるようにしてあるのも、そういう理由によるものです
sandboxなんてとっくの昔にない。大昔からパーミッションと特権で動いてる。 AccessControllerのjavadoc読め。いつまでsandboxとか言ってんだ。
>>403 その機構をオラクルがsandboxって呼んでるじゃん
eclipseのクラス図自動生成ができない ドラッグ&ドロップしてもプログラムのタブが開くだけ
>>404 呼んでないからSecurity関連の文書読め。
https://qiita.com/rubytomato@github/items/e4fda26faddbcfd84d16 この記事のHello Worldを表示させるところが分かりません。何故そう表示されるのでしょうか?因みにそのところまで書いてmvn compileやmvn packageは成功してます
>>408 補足: hello worldとどこにも書いてないのにそのように出力されるらしい理由を知りたいです
因みに私の環境ではhelloworldと出てません
springでentityクラスの最後にこのようなメソッドがありました。 どういう意味ですか? @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);
>>408 多分著者の勘違い
ただSpring Bootで特にView作らずに動かしてブラウザで見に行ったら画面上には出てこなかったっけ?
>>410 toStringがわからんというならjava.lang.Objectのjavadoc読め
中に書いてることがわからんというならimport文に書いてる通りcommons-langのメソッドだからそっちのjavadoc読め
直接Java言語ではないんだけど自分も質問 最終的な配布形態がライブラリ(jarでメインメソッドを持たない、組み込まれること前提)のとき、 ログの実装ってどうするのがベターなのでしょうか 今はHikariCPのプロジェクトを参考にしてこんな感じにしていますが、正しいのかわからない - build.gradle上はテストの時だけlog実装やブリッジを依存関係に入れる implementation( slf4j-api ) testImplementation( logback ) testImplementation(jul-to-slf4jなどのブリッジ ) - log設定はtest-resourceにのみ入れる src/test/resources/logback.xml - コーディングはいつもどおりだけど、組み込まれた側に出力されないように、原則debugで出す
エクリプスでクラス図自動生成できる人いたらバージョンいくつか教えて
抽象クラスに設定したアノテーションは子クラスでも有効ですか? つまりアノテーションは継承されますか?
@SomeAnnotation public abstract class Base{} public class Child extends Base{} このときChildはSomeAnnotationを持っていますか?
「java annotation 継承」で検索! 通常、Java ではアノテーションを継承したり合成したりできませんが、 Spring のアノテーションはできます
>>410 Ruby で説明すると、"~" 内で、#{ a } のように、オブジェクトを入れると、
そのオブジェクトを文字列化しようとして、Object.to_s が呼ばれる
その際、自分で作ったカスタムクラスでは、デフォルトでは、
<A:0x0000000002bf5c78> のように、訳の分からない文字列が表示されるので、
自クラスで、Object.to_s を上書きして、好きな文字列に変える事ができる
class A
end
a = A.new
puts "#{ a }"
#=> <A:0x0000000002bf5c78>
class A
def to_s
"インスタンスです!" # 上書きする
end
end
b = A.new
puts "#{ b }"
#=> インスタンスです!
rubyはマイナー糞言語なので説明には適さない。 未知の物事を基地の物事で言い換えるのが説明。 rubyなんて誰も知らないので説明には適さない。
SpringのModelAndViewってhtmlのフォームから送られてきた値が同じメソッドの引数に書かれたxxxFormクラスやxxxBeanクラスのインスタンスに勝手にバインドされないの?
されるようにするにはどうすればいいの?
https://qiita.com/yakumo3390/items/4d4214fc4ded78f40517 プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
http://2chb.net/r/tech/1559872586/ 142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141 名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
thymeleafのth:attrってどう使うの?タグがリプレイスされるのは分かるけど条件指定とかは?多言語のメカニズムはどうなってる?
Mavenがオワコンな理由が分からん 確かにXMLはダルいけどMavenに関してはmvn repositoryでググって切った張ったするだけじゃん GradleやBezelとやらが必要な理由は?
Mainクラス{ main{ try{ Clac()を呼ぶ System.exit(0) }キャッチException ){ 例外が発生したらSystem.exit(1) } } private内部メソッドCalc{ 別クラスRead()を呼んで文字列を受け取る if(文字列.equals("バカ")){ System.exit(異常) } return 文字列 } } ---------------------------------------------- Readクラス{ public ReadTxt{ try{ A.propertiesの一部内容("お前は"項目)を読む 項目の中身"天才"を取得 return "お前は"項目の文字列(="天才") }キャッチ(FileNotFoundException ){ 読めなかったらSystem.exit(異常) } } }
>>430 続き
----------------------------------------------------
A.properties中身
~
お前は
天才
~
----------------------------------------------------
正常テスト
@Test
test00{
main()
}
mainで例外発生テスト
@Test
test01{
mainで即例外を発生させる処理 ←わからん
}
A.propertiesの中身が"アホ"だったテスト
@Test
test02{
Main.Calc()の"天才"を格納した変数を書き換える処理? ←わからん
}
>>430 >>431続き
A.propertiesが読めなかったテスト
@Test
test03{
Read.ReadTxt()の読み込みパスを一時的に書き換える処理? ←わからん
}
・一回一連のテスト流してバレッジ100%にしたい
・main側で即例外がでる処理が分かりません。
・Test01でA.txtを読んだ値を格納した変数を”天才”"→アホ"へ変更する処理が分かりません。
・・Test03で読み込み先を一時的に変更する処理が分かりません。
テストのやり方を知らない者同士でテストをやっているのかね?
>>435 java.util.Arrays.sort(T[] a, Comparator<? super T> c) 使えば良いのでは?
Comparator 自分で書く事になるから1次元だろうが2次元だろが何次元だろうがソートできる。
springとかの依存性の注入ごわからないんだけど コーディングしている時にコンパイルエラーが出ない以上の意味があるの?
継承より委譲と言われるけど、逆に継承のメリットってなんですか?
合成使えっていうけど、合成用にセットしたオブジェクトが複数あったとして、それらの間に依存関係を 作りたい場合、実はそれって多重継承みたいなものじゃないですか?
継承は多様性のために使え 機能の流用のために(それだけを目当てに)使うなってことかと
多様性っていうけど、そりゃ継承って何らかの仮想メソッドがあったり、 子クラスでメソッドとか状態を追加したりするんだから、 ほとんどの場合多様性じゃないの? 継承の場合 abstract class Animal{ private int age; } class Dog extends Animal{} class Cat extends Animal{} 委譲の場合 class AgeHolder implements AgeHolderI{ private int age; public int getAge(){return age;} } class Dog implements AgeHolderI{} class Cat implements AgeHolderI{} こんな感じにしていけるから、ほとんど常に継承は委譲に置き換えれるのでは?
Animalに対してDog,Catが定義されるのは多様化だと思うけど この場合に継承を使う事は妥当なんだろうか? この調子で多くの動物を扱っていくとして。 検索してみるとそのような事すら否定されてる気がする
https://qiita.com/tutinoco/items/6952b01e5fc38914ec4e >コンポジションの使い方は、下記のコードを見ただけですぐ理解できるでしょう。
車によって自動ブレーキシステムを搭載しているかが違うが、
Carクラスは自動ブレーキシステムのフィールドを一応持っておいて
自動ブレーキシステムを持たない車種ではnullにしておくんですか?
そうすると車のあらゆる概念を扱っていった時、nullだらけになりませんか?
50年前の車が持っていた概念、非常にマイナーな車が持っていた概念とかどう扱う?
継承なら共通概念を括りだせる()からマイナーな車は単に抽象Carクラスを継承して
自分が持つマイナーなフィールドを追加するだけです。
継承は例えば、Ruby on Rails みたいな、フレームワークを使う場合だろ
http://localhost:3000/friends/new ここで、自分で定義した(カスタム)コントローラーは、friends で、アクションは、new とする。
カスタムコントローラーは、フレームワークのコントローラーの、ApplicationController から継承して作られる。
その中には、アクションのメソッドを定義する
class FriendsController < ApplicationController
def new
end
end
ファイル名は、friends_controller.rb, application_controller.rb
このように、継承は作り方がきっちり決まっている、フレームワークの主要クラスで使われる。
お作法!
そういうのは分かる。明らかに継承が便利。 でもアプリ独自のモデルクラスで継承を使うのはどうなのかと思って。
継承を合成に書き換えるとしたら、 継承における上下の依存関係、つまり親クラスのprotectedな要素へのアクセスや 仮想メソッドを通じた子クラスによる振る舞いの変更は、合成でどう書くのか? つまり委譲先オブジェクトが多数ありそれらが相互に依存しているような場合。 AllDependencyHolderみたいなインターフェースをホストオブジェクトに実装して 各種委譲先オブジェクトのゲッターを宣言して 委譲先オブジェクトのメソッドにいちいちthisを渡すような実装しかない気がするんだけど合ってる?
Project Loomのfiberと呼ばれている技術で100万スレッドできるらしいですが ExecutionServiceに100万タスクを登録するのと何が違いますか? 定期実行のもあるわけですが
通常のスレッドよりスイッチングが高速、とあるな。 ExecutionServiceは内部でThread使ってるからタスクの切り替えコストが違うのか
Process#getOutputStream これでパスワードを送信するのは安全?つまり他プロセスに傍受される心配はある? localhost内で、送信元と送信先は自分のアプリのプロセスで。
>>451 インテル脆弱性の前には何をやっても無駄なのでは?
それを丸パクリしたJavaScriptでも大変不評です
Mavenと比較すると一部のクラスを完全に非公開にできるというだけでしょ。 でもその程度では結局後方互換性の問題の完全解決ではないから 強制導入させて何がやりたいのか
Javaの高速リリースとかいって無駄に複雑化させまくってる面がかなりある
Javaの良いところ殺してるからな 言語仕様ころころ変えられて迷惑でしかない
8と11で3年以上空いてるだろ。次のLTSも2年以上先だ。
>>460 Javaの良いところは安い人員をバルクで調達できるところだからねえ
言語仕様の拡張は人員のクオリティにムラが出る原因になる
しばらく高速リリースでいいよ。今までがチンタラしすぎて、言語機能やらライブラリかなり他と比べて見劣りしてた。どんどん新機能追加がんばれ
Enterprise Java とか称してjavacのソースバージョンを6に指定するのが流行りそう
https://docs.oracle.com/javase/jp/8/javafx/layout-tutorial/size_align.htm >border.setPadding(new Insets(20, 0, 20, 20));
>vbButtons.setSpacing(10);
こういう大きさとか座標系の数値はピクセル?
調べても単位が不明なんだが。
module-info.javaのrequiresはバージョンを指定しないから 依存性解決として不十分だと思うんだけど もし実行時環境にバージョンが異なる複数のモジュールがあったらどうするの? しかもいずれも必要で他のモジュールから参照されていたら。 pom.xmlを標準で採用してjarに含めるようにしたほうがよかったんじゃないの?
あるディレクトリの1階層に下にあるファイルとディレクトリを取得したいのですが 簡単な方法ありますか? あるディレクトリはPath型で指定して 取得するファイルやディレクトリはPath型のListに格納したいです
Ruby では、glob で、/*/* を使うと、1階層下のみ。 /**/* なら、その下を再帰的にすべてたどる dirs = [ ]; files = [ ] Dir.glob( 'C:/Users/Owner/Documents/Ruby/selenium/*/*' ) do |path| if File.directory? path # directory dirs.push path else files.push path end end p dirs, files
public class Employee{ private final string HIRA = "111" private final string PRESIDENT = "555" private interface length { //文字長 int HIRA = 3; int PRESIDENT = 3; } private interface japanese { //日本語 string HIRA = "平社員" string PRESIDENT = "社長" } //以下main処理 } こんなプログラムを改修していたのですが,「private interface 」とは何なのでしょうか? インターフェースは別クラスに作り,それをmainクラスなりでimplementするものだと思ってました。 確かにこれなら同じ名前を用いることができて便利だなあと関心し,他に意味があるのかと調べたんですが, 「private interface」というものは出てきませんでした。
定数をまとめてるだけ privateはそのクラス内でしか参照しないってこと
大したことやってない調子に乗るなとコメントに書いといたが良い
テストコード書いたことなくて勉強してるんだけど どんな粒度で書けばいいのか分からない どこかいいソースとかサイト誰か教えて JavaのArrayListとかってテストコードあるの?
streamに対する操作として、max(Comparator::natualOrder)みたいにメソッド参照で操作できますか。どの参考書にもComparator.natualOrder()を使ってるのですが
>>479 やってみればわかるけどmax(Comparator::natualOrder)はコンパイルエラーになるよ
maxの引数はComparator型のオブジェクト
Comparatorは任意の型の値を2つ受け取ってint型の値を返すもの
Comparator::natualOrderは0個の引数を受け取ってComparatorを返すもの
natualOrderが返すものがComparatorであってnatualOrder自体はComparatorじゃないからムリ
固定リスト(aslist)と不変リスト(list.of)の意味の違いがわかりません。 addとか操作できないなら同じじゃないんですか?
プロジェクトをjarに出力しようとしてる。 jarのmeta-infフォルダの内容をカスタマイズしたいがどうすればできるか?
Javaプロジェクトで作成してソースフォルダ直下に置いたらできた でもMavenプロジェクトだとソースフォルダ直下に何かを置くという操作ができないな
Javaのアップデートに関する質問です。 環境はwindows8.1で、タスクバーにJavaのアイコンが現れて「Java Update利用可能」の状態なのですが、 アイコンをダブルクリックすると スクリプトエラー このページでスクリプトエラーが発生しました。 ライン; 1 文字 : 1 エラー: ')' がありません。 コード: 0 URL: と表示されてインストールが出来ません。 どうすればアップデートできるのでしょうか?
>>487 わからない。一度アンインストールしてから新しいやつ自分でダウンロードしてインストールし直したら?
>>489 ,490
ありがとう、公式からインストーラーダウンロードして手動でインストールしたら出来ました。
しかしインストール後 Javaコントロールパネル を覗いてみると 「アップデート」のタブがなくなっています。
「アップデート」のタブって消えたりするものでしたっけ?
初心者なんですが ホームページ作るんですけどmysql使ってデータ入力して そのデータを例えばプルダウンメニューからa-zの頭文字をクリックして引き出して表示させる、みたいな感じにしたいんですが 色々調べたらphp使った方がいいみたいな記事ばかりなんですが javaだと難しいんでしょうか?
javaを使える人が試しにphp使うとphpの楽さがわかる程度に楽なはず odbcを難なく使えるならばjavaですんなり作れる腕のはず
難しいというかゴキブリを殺るのにショットガンを持ち出すようなもの
最近のGは殺虫剤耐性あるらしいから、確実性を狙うならあるいは…
eclipseいれたんですが、重すぎて全然動かなくて困りまして‥ 軽くておすすめのIDEありますか?みなさんは何を使っているんでしょうか
NetBeansしか使ってないけど、ふつうに快適だお。
今だとIntelliJかVSCodeだな eclipseが重いならIntelliJも辛いかも VSCodeは設定が少々面倒だが軽いしeclipseとかいうゲロ糞よりは遥かに使いやすい
俺もvscodeしか使わなくなってしまったけど、eclipseのリファクタ機能は神がかってたと思う
>>497 netbeans使ってるわ
動き自体は軽くて快適だよ
apacheに移って将来性良くわからんけどね
5Gの時代だとJAVAの需要って増えるんでしょうか?
javaってなんでjavaって名になったんですか?
>>506 「私はJavaと命名しました」と当時のOak製品マネージャーであり、現在はMarimba
Inc.のCEOであるKim Polese氏は語ります「私は正確に正しい名前を付けたかった
ので、Javaの命名に多くの時間と労力を費やしました。 このプログラミング言語は非常
にユニークであるため、私はオタク的な名前を避けることにしました。 私は、かっこよ
く、ユニークで、そして綴りが簡単で、言えることが楽しい何かが欲しいと思いました。
「私はチームを部屋に集め、「ダイナミック」、「生きている」、「衝撃」、「衝撃的」
、「革命的」などの単語をホワイトボードに書いて、グループをブレインストーミングに
導いた」とPoleseは言った。 。 「このセッション中に[Java]という名前が登場し
ました。WebRunnerLanguage用のDNA、Silk、Ruby、WRLなどの他の名前には、
yuck!」
So why did they decide to call it Java? | JavaWorld
https://www.javaworld.com/article/2077265/so-why-did-they-decide-to-call-it-java-.html 通知バーのJAVAアイコンからインストールしようとするとかっこがありませんっていう構文エラーが出てきてうんともすんとも言わなくなるんだけど何なの?
>>487 よくみたらこれだわ
7でも10でも会社のPCでももれなく起きるわ
公式で何か言ってくれてたりしないのかな
ライセンス変更になって、OTNに登録していないとDLできないようになったからじゃね? どのみち、Java8を最後にJRE単体配布もなくなるし。
仮にそれだとして)がありませんエラーでタスクバーにアイコン表示させっぱなしにするという糞対応する?
java silverとるなら8と11どっちがいいんだろ?
public <T> T & Cloneable makeItCloneable(final T it) { return (T & Cloneable) it; } みたいなことってどうやったらできるんですか?このソースコードだとマーカーアノテーションのくせにCCEが投げられるんですけど
図書館で2007年出版の参考書借りてきたんですがまだ使えますか?
使ってみたらライブラリDLするところでリンク切れてて実行環境作れませんでした・・・出直してきます 環境変数とドキュメントの入手は成功したんですが古い参考書はダメですね
awtは今後もサポートされ続けるの? 打ち切りの話とか出てる?
さあ?しかし swing のベースにもなっているので無くなれば swing ごと消滅になると思うよ。
Desktopクラスがawtだから javaでURLを開いてデフォルトブラウザで開こうとしたらawt必須でしょ? javafxにDesktopクラスに相当するものがないし awtはGUIフレームワークというよりもっと広い範囲の機能を持ってしまってる
Javaの課題が大量に出たのですがメソッドがうまく理解できず全く進めません
厚かましいですが問題を解いて解説できる方がいらっしゃったらお願いします
>>529 どこまで自分でかけたのか晒してくれないと教える気にならん
すみません、問題を間違えてました
こちらの問題です
かけたのはここまでです
メソッドの書き方自体は問題無いから中身だね a % b == 0 のときaはbの倍数 これとfor文とif文を組み合わせてカウントして出力しよう
DateTimeFormatterについて教えて。 日付を月と日にフォーマットしたいのですが簡単な方法はありませんか? システムの言語が日本語だったら10月15日で英語(US)だったらOctober 15などと表示したいです。 DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).format(localDate)とすると 2019年10月15日となってしまって年が不要です。 JDK1.8でandroidアプリです。
ありがとう 簡単にできそうです OSによって微妙に動作が違うっぽいけどいろいろ使えそう
javaとc#で総称型の実装が違うけど javaのイレージャというのは実際どう思う? 実際書いてるとなんとかなるけど、総称型情報が実行時に取得できないというのは、 処理系の評価としてはどうなんだろうか? つまりjavaは付け焼刃の中途半端な実装をしているんだろうか? それともイレージャが理想なんだろうか?
SecurityManagerで動的にロードされたプログラムにポリシーを適用するという方法で 「動的にロードされたプログラムはこれらのパッケージ(またはメソッド)にのみアクセスしていい」 というような制限は実現できる?
AWTPermissionみたいないろんなパーミッションがあるけど そもそもある動作がどんなパーミッションを必要とするか?をカスタマイズできるのかどうか。 自分の独自クラスが独自パーミッションを必要とする、という事は可能なのか?
そのページにSecurityManagerに関したことは何もないと思うが?
>>542 ハッシュの有無で表示されるページが変わる(5chはurl encode/decodeしてないからjumpページでハッシュが消費される)
デスクトップ版のURL
https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=88487519 今swingでアプリ作ってるんだけど JButtonで別クラスの処理を呼び出してその進捗をJTextAreaとかに表示させたい場合は引数としてJTextAreaの変数を持たせるのでいいのかな?
すまん書き忘れた 一応動いてはいるけどこれが正しい手法なのか知りたい
>>545 Observerパターン使うかコールバック関数渡すかして進捗報告のタイミングでコールバックさせる
>>547 なるほどありがとう
あとずっと気になってたんだけど
時々コンストラクタじゃなくてそのクラスのstaticメソッド使ってインスタンスを初期化するようなクラスがあるけど
アレってどんな意味があるの?
>>548 Effective JavaのItem1なので
「"static factory method" "effective java"」で検索して解説を読むといいと思う
>>548 必ずコンストラクタで初期化するものなら、コンストラクタそのものがいらないことに気づかないのか?
間違った。コンストラクタで同じ初期化をされると都合が悪い場合だった。 コンストラクタは常に同じ初期状態を作るために存在しているので、初期状態を複数パターン持ちたい場合は、コンストラクタが邪魔になる。
>>549 ありがとう
ちょっと内容紹介してるブログ読んだけどこの本わかりやすくていいな
>>548 実装を隠したい時とかかな。
interface または abstrct クラスを公開して実装したクラスを非公開にして直接 new させない。
しかしどこかで new する必要があるので stasic メソッド作ってそこでやる。
>>553 隠したいってのは知的財産的な意味で?
完全な趣味でやってるからその辺の事情となるとよくわかんないや
>>554 例えばLocaleによって実装クラスを変えたい時とか。
コンストラクタは初期化処理部分を明示するために存在しているブロックにすぎない。
以下の場合、オブジェクト指向で考えると、 何をクラスにし、何をメソッドにするのが良いのかを教えてください。 ・商品の状態がテキストファイルに記録されていて、それをExcelへ一覧出力します。 テキストには、商品ID、名前、製造日がスペース区切りで記録されていて、 それら情報を毎日、Excelのセルへ入力する部分をjavaで実装します。 ・本を読むと、Id、Name等を宣言して、Item.name等で名前を管理すべきかとも思います。 (以下は文法上誤りですが雰囲気として書きます) class Item{ public void Id() public void Name() public void date() } 今は商品ID、名前、製造日を2次元配列に読み込ませて処理しています。
俺ならこうかな ・商品クラス ・テキストファイルから商品を読み込むクラス ・エクセルに商品を出力するクラス
クラスは対象物テキストやエクセル()、 メソッドは動作(読み込みや書き出し)と言う風に作るという事ですか?
書き間違えました。 ---- クラスは対象物(テキストやエクセル)、 メソッドは動作(読み込みや書き出し)と言う風に作るという事ですか?
読み込みと書き込みは分けた方がテストしやすいだろうなってだけ 概念的なことは何も考えてない
その分け方はオブジェクト指向のクラス分けではなくモジュール分けにすぎないが否定はしない。
>557です 単に手続きを分けるだけなら考えついたのですが、 ちょっとオブジェクト指向ではないと思っています。 商品というオブジェクトをどう管理するのかが 肝だと思うんですが、言い分け方ないでしょうか。
>>563 スペース区切りのデータをCSVにしてExcelで管理してる台帳に追記するだけだと理解したんだけど、もしそうなら商品をオブジェクトとして扱う価値はあんまりないよ
それ以上の処理かあるのかな? 例えば名前、製造日についてビジネスルールに沿ったバリデーションがあったり、DBに保存や専用のUIに表示したり、そういう値の中身を意識する必要のある処理
>>564 目的は自分がオブジェクト指向を理解する為です。
簡単な例で理解したいと思いまして。
プログラムをこれ以上修正する要件はありません。
なるほど勉強用ね 商品と商品たちはそれぞれクラスにする ItemクラスとItemListクラス ただし一般的な用件ならjava.util.Listで十分なので商品たちはList<Item>とすればいい JavaでOOPらしくしたいなら配列はまず使わない ほかに思考のヒントとしては ItemクラスとProductクラスを分けてhas-a関係にするとか 商品IDクラスや製造日クラスの導入を検討するなど 製造日クラスも実用上はjava.time.LocalDateあたりで十分 日付の類いをStringのまま取り回すのはやはりOOPらしくはない
>>565 オブジェクト指向でもそうじゃなくても、モデルが適切かどうかは、解こうとしてる問題に対しての有用性で判断するもの。
データに「商品」があるからとあってそれをクラスとしてモデリングすべきかどうかは、それが解こうとしてる問題に対して有用がどうかで判断する。
今回のケースではXXXReader、XXXWriter、XXXImporter、XXXConverterみたいなクラスから考えた方が適切。
>>567 その場合、商品データはどうやって管理しますか?
>>568 テキストファイル
Javaで書かなくてもをExcelのインポート機能でも似たようなこと出来るよね? Excelには商品クラス定義されてないにも関わらず。
テキストデータの各行を特定の型として捉えないと困るような処理(製造日を特定のルールで加工するとか商品マスタに登録されてないIDはエラーにするとか)がなければ、不必要に入力データの中身に依存せず、汎用的なスペース区切りのテキスト処理として考える。
各行の値に依存した処理が必要なら商品をクラスや構造体にして型として扱うがその場合でもXXXConverterのconvertメソッドのようなプログラムの大枠は変わらないからそっちから先に考えた方がいい。
あくまでも勉強用に小さなデータでクラス概念を理解しようとしているので、 Excelのデータ区切りは考えていません。 聞きたかったのは、テキストデータを読み込むとして どのようにデータを保持するのかです。 単に配列に入れて管理ならもう作ってあります。 >566さんのやり方で1度作ってみます。
>>570 Readerで読みつつWriterで書き出せばいいから、配列とかにデータを保持する必要ないよ
商品クラスから考えて作りたいならそれでやってみて試行錯誤から学べばいい
すみません。 大事なことを言い忘れてました。 商品のデータは1列に書かれていません。 商品名は必ず先頭にあるのですが、その情報は複数行にわかれて書かれています。 例えば、 商品A 重さ 型版 商品A 注文日 など。 しかも商品によって書き方はバラバラで、 唯一の規則性は商品名から必ず始まる事とスペース区切なことです。 商品の情報が何行に記述されるか、 一行に何個情報がスペース区切りされているかは、ランダムとしか言えません。 (本当は規則があるんでしょうけど・・・) ということで、商品クラスを作って実装しました。 これは配列より暗黙的な部分が少なくていい感じです。 ありがとうございました。 非常に勉強になりました。
moduleでパッケージAを非公開、パッケージBを公開、 パッケージBのクラスのAPIがパッケージAのクラスを返す、 とした場合に外部のプログラムはそのAPIを利用できますか?
そんなことできたら、moduleの意味が全くなくなる。 典型的なWrapperパターンの出番(ProxyとかAdapterをBに用意する)
>>574 Wrapperクラスを使えば直接対象クラスにアクセスしないからmoduleの制約に引っかからないという事?
>>575 usesとかprovidesで指定されたインターフェースが非公開のクラスを返す場合、
あるいは公開されたクラスを返すとしても返値のクラスのgetterで非公開のクラスが返される場合、
アクセスできるんだろうか?できないんだろうけど。
インターフェースXが公開、実装Yが非公開の場合、YのオブジェクトをXとして使用する事はできるんだろうか?
というのは、良く連鎖的にクラスの依存関係が生じていくわけで、
moduleで外部プログラムとの連携をやろうとしたらほとんどの場合
大量のパッケージを公開設定しなきゃいけないんじゃないか?と。
moduleをうまく使うテクニックみたいなのはあるんだろうか。
例えば公開用インターフェースをまとめたクラスを作ってそれだけを公開するとか?
でも、そのインターフェースから非公開のクラスに辿れてしまったら機能しないんだよな。
JAVAの求人が多いと知り、 就職の為にJAVAを学ぼうと思うんですが、 本屋さんのプログラミング書籍の棚のJAVA本が充実しすぎて困ったぁ! 僕はどれを買えばいいんですかね?
>>577 どれを買っても一緒だから独断と偏見で一冊買って最後まで読め
コンピューターサイエンスの本に関して一般的に言えることだが一冊でオールマイティな本なんて存在しないし存在し得ない
何冊か買っては読み買っては読みしていくうちに自ずから獲得するべき知識がわかってくるものだ
ひたすら精進あるのみ
Java と言えば、オブジェクト指向を学ぶ、歴史を変えた本! スッキリわかる Java入門 第2版、2014 この本の大ヒットにより、革命が起きて、 あちこちへ、スッキリシリーズが浸透していった! たのしいRuby 第6版、2019/3/19 未だに、プログラミング・オブジェクト指向を学ぶには、この2冊がベスト! ただし、Java の就職は、建設業と同じで、5大SIer を頂点とした土方系! 1社経由するごとに、3割抜かれる! 貴族・奴隷、Waterfall 型、上流・下流の階級制度! 顧客は上流としか、契約を結ばない 一方、Ruby on Rails は、モダンな自社サービスWeb 系だから、抜かれない!
>>578 了解です!
今はあまり深く考えないでおきます
>>576 exportされたクラスで、
public void X openMethod() {return new Y();}
public void Y openMethod() {return new Y();}
とした場合、
上は全くOK。
下は、client側で”import”しない限りはOK(コンパイルは通ってしまう)。
var変数への代入も可能。
けれどメンバーには一切アクセスできない(こっちはコンパイルエラー)。
export側でコンパイルエラーにならない理由はわからん。
>>582 レスありがとう
じゃあリフレクションでYにアクセスする事はできないけどXとしてYを使用する事はできると。
JPMSはリフレクションでも非公開インターフェースにアクセスできないようにするのが売りだろうから。
リフレクションで任意のクラスにアクセスできないとなると
デバッガみたいなものが作りづらくなりそうだ。
JPMSはやはり納得しづらい感じがある
後者はコンパイル時に問題が見つかりにくくなっているという問題もあるのか。 恐らく後者のコードで実行時にYにアクセスしたら例外が出るはず。 そうじゃなきゃJPMSの意味が無い 直接非公開クラスにアクセスしたらアウト、じゃなくて 非公開クラスである事を知りつつアクセスしたらアウト、という事になるのか。
なんで? 使う側は安全(コンパイルエラー)でしょ。 公開メソッド(たとえばtoString)は普通にアクセスできる。 純粋にimport(Y)できないから、型明示の代入やCastもできない。 あと、ディープリフレクションはexportとは別設定。
メゾットの連続番号を簡略化するのは無理でしょうか? aho=new baka1(); ↑ このbakaのナンバーを変更したいのです for(int i=1;i<5;i++)aho[i]=new baka+i+(); ↑ みたいにするとエラーが出ます なんかいい方法はないでしょうか?
「メゾット」じゃなくて「メソッド(method)」、 あと new Hoge(); はメソッドではなくコンストラクタの呼出し。 クラスを動的にインスタンス化したいならリフレクション使う。大雑把に書くと Class.forName(...) -> clazz.getConstructor(...) -> constructor.newInstance(...) する。後は自分で調べて。
クラスとかメソッドに連番を振るようなのは、 それぞれのクラスがどういった機能を持つかとか覚えきれなくなるだろうし ろくな事にならないからヤメとけ、と思いますけどね。 ※感想には個人差があります。
>>586 何に使うかさっぱりわからんからエスパーだけど
そういう時は
baka(int i)ってコンストラクタを作ってその中で条件分岐させたほうが良い
>>586 ありません。
それと、ゾじゃなくてソだ。
>>587 あそうか。リフレクションでできるか。
しかしうクラス名変わったらおしまいな方法なのでお勧めする気が起きないな。
Javaで、string型のデータをhtml使わずhttpconnection使ってサーバーにつないで、postで送るんですが、springbootで作られたサーバーではどう書けば受け取れますか? どうやってもうまくいかなくて…説明も下手ですみません。 @Requestparamで受け取れるかと思ったんですが、変数どうやって指定したらいいかとか解決できない状況です
Ruby on Rails なら、ルーティングを設定する
Post メソッドで、/login というパスで、Sessions コントローラーのlogin アクション。
post "login" => "sessions#login"
Rails では、下のどちらの書き方でも、params[ :name ] で取り出せる
http:// ~/コントローラー/アクション/sato
http:// ~/コントローラー/アクション?name=sato
「spring boot post」で検索して!
>>587 コストラクトの連番の簡略化できました。ありがとうございます。
for(int i=1;i<5;i++){
Class<?> c=Class.forName("baka"+i);
aho[i]=c.newInstance();
}
↑
これでできました!
ハァ? クラス名の連番?w メタプログラミングじゃあるまいし、Ruby から、学び直せ!w Ruby にも、メタプログラミング用で、動的にメソッド名を付ける、define_method は有る。 これは、規則性のあるメソッド名を、複数つける場合に使う こういう手法は、たいてい「メタプログラミングRuby 第2版」みたいな 「メタプログラミング何々」というような本に書いてある 「メタプログラミング Java」という本は無さそうだけど、リフレクションだろ
>>594 でもそれ出来れば設計考え直した方が良いと思うよ。自分では変更不可の領域に連番クラスがあるというのなら仕方ないけど。
aho配列に入れるBakaクラスなら連番でもいいのだ 一人一人のBakaに代入互換性はなく総称しても使い道がない ただaho配列に並ぶだけ これでいいのだ
>>598 全てのBakaに共通するインターフェースがない限りObjectクラスとしてしか扱えないのであまり価値がないのではないか?
動的にクラス名を生成するのは、Ruby on Rails で言えば、 コマンド「bin/rails g controller コントローラー名 アクション名」で、 例えば、top コントローラー、index アクションなら、 自動的に、ApplicationController の派生クラス名・メソッド名が定義される class TopController < ApplicationController def index end end こういうフレームワークを作る側のメタプログラミングだから、10年以上のメンテナー・ベテランの話! 君らは「スッキリわかる Java入門 第2版」にも書いてある通り、 フレームワークを使う側の人でしょ? 1. スッキリなどの入門書 2. Effective 何々、逆引き本 3. フレームワークを使う側の本 4. メタプログラミング、フレームワークを作る側の本 こういう順序で言えば、4は、一生関係ない人がほとんど!
>>600 rubyは聞いていません。javaで回答してもらえませんか?
あれ?rubyってJavaで作られてたの?じゃあJVM言語の一種?
何で クラス連番にしたらいけなひの? 便利だよ ほんと
調べたら Class.forName("クラス名"); ってあんまり推奨されてないみたいなんだけど 暗号化の関係かな? よおわからん
>>606 いけなくないけど不便だよ。君が便利と感じるのは経験が浅くてまだ困難に直面した事がないからだと思う。ま、頑張れ。
>>606 数が多くなると管理できなくなるんだよ
18と19の間に18.5を入れたくなったり
さらに18.3と18.4の間に18.35を入れたくなったりすると
完全に訳が分からなくなる
数ヶ月したらどの番号が何をやってるかなんて忘れてしまうから クラス名を番号にしてると修正が必要になったときに全部開いて確認する羽目になる 設計書に番号と処理の対応表を書いておけばよいけれども 設計書を開かないとわからないし設計書と実装を見比べて探し当てるよりは クラスにはだいたいの概要がつかめるような名前をつけたがよいよ どうせ作っておしまいだからと思ってたら完全に忘却したあとに 修正が必要になるなんてことザラにあるからわかりやすい名前をつけて 整理しとかないと泣きながら修正することになる みんなが一度は通る道だろうけど
>>606 他人と違うことやる俺カッケー
でもこういうやつの中から天才現れるんだよな。
まあ、頑張れ。
あ、クラスか。 クラスを連番にする意味はないと思うが、何をする処理ですかね?
一つ一つ名前考える手間が省ける。swingのボタンとかラベルとかテキストフィールドとか。
ボタン? それなら尚更ちゃんと名前つけてあげないとわけわかんない事になるのでは……
まあ程度問題やね。 コンポーネントが20個とか30個になると、全部一つ一つnewしてアクションリスナーに登録して、JPanelにaddするのがしんどくなる。 for文でまとめてやりたいという誘惑に駆られるから。
>>617 コンポーネントなら普通にやるじゃん。
チェックボックス10個並べるときなんかは配列にしてfor文で呼ぶし。
今時JavaでGUIアプリを作ること自体が全くもって普通ではないから無意味な例だな
>>617 インスタンスならわかるけどクラスだしなぁ
IDEでボタン配置とかやってるならクラス名は連番だろうが何だろうがあまり気にならんかもな。どのボタンがどのクラスかなんてのはIDEでわかるんだろうし。
Java的には連番はご法度だよな メソッド名も主語=オブジェクトに関連する動詞じゃなきゃだめ しかも英語で略語も禁止 SunのJavaの教科書はそう書いてる だからIDE使う 連番の入れ替えとか歯抜け追加起きたとき プロジェクト炎上するなこいつのは 1 2 5 4 9 31 6 とかになる
やるなら、 inteface Hage { void pushShigeki(); } class Tako implements Hage class Hanako implements Hage Hage[] listKokyaku = new Hage[2]; listKokyaku[0] = new Tako(); listKokyaku[1] = new Hanako(); for(Hage aitsu : listKokyaku) { aitsu.pushShigeki(); } うは、俺天才
UMLからお勉強だな
http://objectclub.jp/technicaldoc/uml/ こんなアホな設計者にカネばらまいて
いざとなったらトンズラきめて
末端の派遣社員が鬱病になって
2chで粘着されて会社が潰れるのが目に浮かぶわww
そうだな、Hageは不適切だった Enkeidatsumoshowがいいな
頭の中で勝手にエンジニアと決めつけてキレてるやつ怖いわ どう見ても素人だろこんなん というかどんな現場だろうがこのレベルの奴が自分で設計なんてさせられるわけないわ
現場にもいろいろあるんやで 失敗を積み重ねて人は成長するんやで
画面部品を一つ一つ異なるクラスにする意味あるの? インスタンスが連番なのじゃなくて? 都市伝説っぽいが、会社規則でクラスをコード+連番にしないといけないという愚痴ならどこかで読んだことがある
どうも、都市伝説です 謎略称+連番はロクにまともなコードも書けない人間が略称→機能を暗記して周りにマウント取るためのテクニックとして確立されてる
まぢれすすると page1.java page2.java........と作っていて 選択したページに移動したいだけなんすよね ちなみに趣味れす
>>635 それ同じクラスを使いまわして引数で分岐させる方がラクだよ
普通に名前つけさせようとすると 英語もろくすっぽできないプログラマーがわけわからん名前つけるからな! いかなる創造的仕事もSE様のしごとだ プログラマーは工員のごとく黙って番号を付与された部品を組み立てておればよい
日本語でクラス名付けちゃえよ。その他変数名とかも。ソースを外国に輸出しないならそれでも良かろう。 Javaなんだし漢字が識別子に普通に使えるよ。入力の切り替えが面倒ってのはあるかも知れないが可読性は上がる。
それでMacのNFDもどきでハマるんですね、分かります
ソースはアルファベット、コメントは日本語が一番見やすいが・・・。
間違った英語の単語を変数名に使われるのも迷惑 加減乗除余りの余りを surplus としたのがある surplus は割り算の余りという意味ではなくて 損益の余りという意味でしか使われないのだが
日本語は文字コードの問題があって、コメントは英語が基本と言われていますね。
643に文字コードとは何なのかから説明しないといけない問題
>>643 素人がエンジニアを名乗るの図
どこでさ仕事したらそんな歪んだ知識になるんだ
正規化の問題があるといえばあるか。 見た目全く同じファイル名とかUnicodeだと作れちゃうよね。濁点とか半濁点が曲者。 その辺を考慮してくれるテキストエディターでないといつかその内ハマる。 多分WindowsとMac混在で編集するとその時は早めに来る。
それては濁点はコーティンク規約て禁止しよう ◯と○や長音も紛らわしいから禁止た
SpringBootの勉強中なんだけど、誰かわからないから教えてもらえませんか? Aという名前のプロジェクトとBというプロジェクトがそれぞれ存在していて、 AのプロジェクトからBのプロジェクトのある画面を呼び出すことは可能でしょうか? マルチプロジェクト?というので可能でしょうか?
ここで聞けよ
【DI】Java Spring Frameworkを語るスレ 5.0
http://2chb.net/r/tech/1322414231/ そもそも「画面を呼び出す」って訊き方が? ・httpとかネットワーク的な話なのか ・画面がコンポーネントになっていて、それを含むモジュールをimportして使いたいという意味なのか どっちにとっても、Spring以前の話だな。
@ComponentScanしてcontroller経由かViewResolverをchainする
Queue<Integer>の合計を取る場合、拡張forを使用していますが、 stream().sum()の様な方法で求めることはできますか?
q.stream().sum()でいいんじゃない?
メソッドの処理時間を返すメソッドを作りたいと思ってるのですが実装方法がよく分かりません… 関数型プログラミングをつかえとネット上で書いてあったのですが中々理解出来ずにいます… やりたいこと: int runProcessTime(メソッド){ long start = System.currentTimeMillis(); // 引数のメソッドを実行 long end = System.currentTimeMillis(); return (int)end - start } どなたかこのポンコツめに実装方法を教えてください……よろしくお願いします…
試してないけどこんな感じかな int runProcessTime(Runnable proc){ long start = System.currentTimeMillis(); proc.run(); long end = System.currentTimeMillis(); return (int)end - start } // 呼び出し runProcessTime(() -> {you.doSomething();}); 例外投げんなと怒られたらCallable版も用意してreturn false Effectively finalで怒られたら引数の宣言にfinalでもつけて修正
ジェネリックな高階関数定義するのひたすら面倒だね。戻り値の有無や引数の数が一般化出来ないケースは実質使えない
https://paiza.io/projects/Eh3ihZ2kTIdiBv-2ItS5wg?language=java 本番環境でも使いたければAOP使ってログ出力かな
>>658-660 ありがとうございます
参考にしてもらって調べてみましたが、プロファイラやAOPを使ったログ出力をすればたしかに解決出来そうです!
ただそろそろラムダ式とちゃんと向き合わなきゃ駄目かなと思っているので
>>660 のコードを参考に読み解いてこうと思います!
>>659 のコードにはとりあえずrunnable実装したクラス投げてみたんですがどうも上手くいかなかったです…
これもラムダ式が理解出来てれは動作するんでしょうか…?
もしかしてdoSomethingメソッドの戻り値をRunnable型のオブジェクトにしちゃった…? runProcessTime(() -> {System.out.println("呼ばれた");}); でいいんだよ 引数と戻り値のないラムダ式がRunnableとして型推論される
>>662 とりあえず動作確認がしたくて試行錯誤した結果こんな感じなら通るのかなぁって思ってました
https://wandbox.org/permlink/hflsLOytE8IIIZkt ご指摘の通りに書いてみたら上手く動作してくれました!ありがとうございます!
https://wandbox.org/permlink/jl8r7LPtWxuNBPkh 型推論…便利だけど仕様理解してないとなんか不思議な感覚ですね
アプリを開く→(複数のユーザーが)学習時間を入力→サーバーにデータを送信・保存→管理者がcsvで出力 というようなスマホアプリ(ユーザーが複数)を作りたいと思っているのですが 参考になる書籍等ありませんでしょうか。そもそも、実現可能なものでしょうか。 スレ違いでしたらすみません。
>>665 その辺詳しくて暇な学生でも知り合いにいたら焼肉でも奢って作ってもらえるレベル。
自分でやりたいならサーバーもアプリ開発も入門書から。
>>657-663 Ruby なら、考える事もない。標準ライブラリのbenchmark を使うだけw
require 'benchmark'
Benchmark.bmbm do |bmbm|
bmbm.report( "#1" ) { sleep 1 }
bmbm.report( "#2" ) { sleep 2 }
end
出力
user system total real
#1 0.000000 0.000000 0.000000 ( 1.005784)
#2 0.000000 0.000000 0.000000 ( 2.000958)
>>667 ゲロ遅Rubyでベンチマークとかアホかな
巣に帰れ
C#erですけどこれからjava学ぶ価値はありますか? 煽り抜きで有償化後から敬遠されてるように見えて
ここで聞くより自分の勤め先に聞いた方がいいんじゃね?
C#ができるならJavaの現場にいきなり投入されても全然問題ないから、あえて自分で勉強しておく必要はないと思う JavaはC#でいうところのVB的なバカの受け皿がないので、C#に比べるとプログラマの平均レベルはかなり落ちる
>>665 google sheet じゃいけないの?
イミフ >JavaはC#でいうところのVB的なバカの受け皿がないので、C#に比べるとプログラマの平均レベルはかなり落ちる
ポインタがない時点で平均以下の プログラマ向けだとは思うが・・・。
>>666 それならちょっと頑張ってみようと思います。ありがとうございます。
>>673 入力作業が面倒だったら時間を記録をしないのです。googlesheetでもできはしますが
続くような、入力がシンプルな、学生でも馴染みのあるアプリなシステムを作りたいのです。
だったらMicrosoftのPowerAppsとかでいいんじゃね ノンコーディングで入力フォーム付きのDBアプリができるよ
>677こんな便利そうなものがあったのですね!・・・ちょっと調べてみます。
>>675 年収が? IQが? 技術力が?
言語にポインタがあったらそれが上がると?
ポインタを極めて生活が豊かになるなら 組み込みエンジニアはもっと幸せなのじゃないだろうか 給料高いって話聞かないし身の回りを見渡してもそういう人いないから ポインタにそんな価値はありません
VB.NETもC#も変わらぬ VBがバカの受け皿ならC#もバカの受け皿だ 使う言語によって賢さが変わるものではない ただしProlog使いだけは侮るな、変態だから
ポインタの理屈は単純だけど、ポインタのポインタのポインタのポインタのポインタの・・・・・と増えていくと 見落としや勘違いが増えるの実感して、単純なほうがいいと思ってるのでせいぜい4~5段階までにしてる。 頭が悪いのは否定しない。
>>683 4~5ってスゲーな
使っても3段までだわ
ポインタは、全体把握とどの情報を実領域に 持たせるかという構想が必要だから、 バグの温床になって嫌われた。 逆に言うと、全体把握と構想力がある人(コーディング力が高い人)は、 ポインタがある言語を使った方が高性能のプログラムを使えていいと思う。
ポインタは元々少ないメモリ空間の昔に使われてきた プログラム自体を書き換えることで、違う処理をさせてきたわけだ 今はそんなことする必要は無く、ワークエリアも十分ある その中でわざわざポインタ使ってやる方がおかしい
個人的にはポインタよりも高度な関数型言語の方が難しい メモリの制約が少なくなって並列処理の必要が増した昨今に ポインタを理解していることに自尊心を持ち続けているようではまずいと思う
ポインタ使えるC#のがプロ向けなんですか? C系言語で最もバランスの取れた言語を集中的に覚えたいです
受験勉強の弊害だろ、何の為にするのかが考えられない
.| .| ∩___∩ | | ノ\ ,_ ヽ .| / ●゛ ● | .J | ∪ ( _●_) ミ 彡、 |∪| | / ∩ノ ⊃ ヽ ( \ / _ノ | | \ " / | | \ / ̄ ̄ ̄ /  ̄ ̄ ̄ ̄
ポインタは処理速度が速いからね。 (代入処理が少なくなるせい)
恐らく逆じゃないかな。 スタック上にオブジェクトを作れるとメモリーの確保が必要ないし常にキャッシュに載るので速い。 ポインタがない言語はだいたいポインタと同程度の大きさを持ついくつかのプリミティブしかスタック上に配置できないので、常にポインタを介した演算と同程度の速度しか出せない。 ってことでは。
ポインタと実際の実装はまた別の話では? コンパイラが頑張ればかなり最適化できるが
すべてのオブジェクトをスタックにしか置けないと、事前にすべてのオブジェクト領域を用意しないといけない。 それは現実的ではないのでヒープが必要になり、ヒープへの効率的アクセスにポインタが用意される。 という順番かと。
スタックポインタの指す場所をキャッシュしないプロセッサはないので、コンパイラ関係なくスタック上は有利じゃないでしょうかね。 キャッシュミスで1000クロック失うこともあるわけですし。
ポインタの利点は、メモリ上でデータコピーの頻度が下がることだよ。 ポインタはデータを参照するだけで、コピー(代入)しないから。
>>700 Javaのオブジェクトもコピーしませんよ。
そりゃそうでしょう。 プリミティブ以外は全部参照という割り切った仕様なんですから。
じゃあJAVAのオブジェクトが持つデータの本体はどこにあるの?
あーそういう事ね。 それは話にならん。 結局、変数宣言する度にGC上にエリアとるんでしょ。 それじゃ遅いんだよ。
ポインタは物理アドレスを辿れることにメリットがある。 当然、重大バグを埋め込み安くなる。
いまどきJavaが使われるような用途でプログラムは物理アドレスにアクセスできませんよ。 物理アドレスはOSが管理しているので、言語によって変わる事は有りません。
1. ポインタを使う言語(具体的になに?) 2. Java 3. ポインタを使わない言語(具体的に何?) で、どれがどう早いのかまとめてくれ
君たちにはこれをプレゼントしよう。 NullPointerException
>>714 それ単に誤ったところにアクセスしようとしたという意味で、それを頻発させるプログラマはダメすぎる。
Javaにはポインターが無いと聞いていたのにいきなりこんなもんが出ちゃってインド人もびっくり。 NullPointerException
>>717 ぬるぽはオブジェクトがヌルのときに投げられるから
Javaのポインタはオブジェクトを指すものなのだろうね
C言語のポインタはメモリアドレスを指す
名前は同じだけど概念が違う
おいおいマジかよw ちなみに「指すもの」を英語でpointerと言います。
>>717 Java は c++ のある種の進化系・理想形ですからね、今でも c++ で丁寧に書こうと思ったら自然に Java に近くなりますよ
初心者です。問題集で勉強中です 宜しくお願いします。 会員顧客データを更新する時のプログラムなんですが 未実装と記入ある箇所にどうのようなコードを入れてら良いでしょうか ざっくりで申し訳ありません /** * 顧客情報テーブルの指定の顧客情報を更新する * @param cutomer 顧客情報Bean * @return エラーメッセージ(処理成功時、null) */ public String update(CustomerBean cutomer) { LogUtil.println(this.getClass().getSimpleName() + "#update"); // TODO 未実装 return null; }
>>722 // TODO 未実装
return null;
これを
// なぜか更新できない
return "エラーです";
って直すを呼び出した人が治してくれると思う。
>>722 未実装もなにも、なんも書かれていないメソッドだろうにw
>>724 はい。ここに何を書き込むべきか教えてください
java インターフェイスでググると インターフェイスを実装したクラスを作って そのクラスのインスタンスからインターフェイスのメソッドを使うやり方しか でてこないんだけど インターフェイスって基底クラスみたいにつかえないの?
坂口渚沙
>>729 有難うございます
もうちっと考えてみます
>>730 インターフェイスの意味がわかっていますか?
>>730 基底クラスみたいに使う、って漠然としすぎだけど、
Java8からinterfaceに実装を記述できるようにはなったよ。
Java シルバー取りたいんだけどSE8と11なら11にしておいた方がいいの?
11にしようぜ たいして難しくなってないし、知識としてあえて古い方に限定することもない
初心者で2月に受けるけど全く黒本がわからない なんとなくコードは打てる 理解っているの?Java
初心者から脱する気が無いなら理解する必要は無いよ ただ初心者のまま時間が経つとそれはもう初心者じゃなくてただの無能だからね
数値の比較などの判定式の結果boolean型の仕組みが理解できていません int count =3; int limit =2; System.out.println(count <= limit); 結果はfalseなのですが、「3<=2」がなぜfalseなのでしょうか。 比較の左側ならfalse、右側ならtrue、などあるのでしょうか
>>742 <=は小なりイコールの演算子だから
左の値が右の値より小さいか、もしくは左の値と右の値が同じときtrueになる
3 <= 2は、3は2以下であるということを表してて当然false
>>744 適切な解答有難うございます
「左の値が右の値より小さいか、もしくは左の値と右の値が同じときtrueになる」
この文章で理解できました。
>>744 本当に有難うございます。
性格イケメンさんの解説のお陰で適切に解答できるようになりました
>>748 問題集やってると混乱してきます
私48の婆なんですが
>>744 の性格イケメンさんに高3の娘を嫁に出したいわ。
>>706 よかったな。めでたしめでたし。 おわり JavaでGUI作ろうと思ってJavaFXの情報探そうと思ったら全然出てきません…… 日本語の本でまともなのってないですか?
>>753 JavaFXはもう終わりでしょ
需要ないしろくに本も無いのでは?
ネット見た感じ取り敢えずSwingは終わりっぽいのでOpenJFX使って開発しようと思ったんですが、どちらも厳しいんですかね?
終わるとか以前に、JavaでGUIは始まったことすらない ガチで今も昔も誰も使ってない
昔は性能が悪くて使われず 今はクライアントアプリが斜陽
皆さん返答ありがとうございました、参考になります JavaではGUIアプリを作るのは取り敢えず辞めにして、コンソールで適当なゲームでも作って覚えることにします
javaのソースコードの見方がわからない androidアプリをとりあえず逆コンパイルして.classを抽出して中身のコードを見ることはできるようになったんだけど 沢山.classのファイルがあってどこが何がスタートになってるの? 順番ってどうなってるの? そのアプリはa.class b.class c.classってタイトルが全部アルファベットなんだけど
aとかbとかは君のように解析しようとする試みを防ぐため難読化されてるってこと。 エントリポイントはActivityを継承したクラス見っけて...かな?
zxingでQRコードとJANコードが入った画像を読み取りたいんだけど JANコードだけを読み取りたい。みたいな事ってできない?
>>760 メソッド名は“main”である(すべて小文字)
どっかにmainってファイルが必ずあるはずで、これがこのアプリの入口になってて他のclassのファイルは小部屋みたいなもんなんでしょ?
mainってファイルがどこ探してもないんだけどこれどういうことなん?
C#erに、まだフィールド使って接頭語にアンダースコア付けてるんでしょ?と言われて何か悔しいです。 ギャフンと言わせる方法はあるでしょうか?
音楽プレーヤーをカスタマイズしたいのですが教えてください
https://imgur.com/a/jQqzGGM 今アルバムタイトルの下に情報が並んでいます
この最後に任意のFieldに書き込んだ文字を表示させることは出来ますでしょうか?
スクリプトファイルを開くと
//---> INFO
if (showGroupInfo) {
var infoX = leftPad;
var infoY = groupY + artistH + albumH;
var infoH = h;
var infoW = w - x - infoX;
var bitspersample = $("$Info(bitspersample)", metadb);
var samplerate = $("$Info(samplerate)", metadb);
var sample = ((bitspersample > 16 || samplerate > 44100) ? " " + bitspersample + "bit/" + samplerate / 1000 + "kHz" : "");
var codec = $("$ext(%path%)", metadb) ;
if (codec == "cue"){ codec = $("$ext($Info(referenced_file))", metadb); } else if (codec == "mpc") { codec = codec + " " + $("$Info(codec_profile)", metadb).replace("quality ", "q"); } else if ($("$Info(encoding)", metadb) == "lossy") { if ($("$Info(codec_profile)", metadb) == "CBR") codec = codec + " " + $("%bitrate%", metadb) + "kbps"; else codec = codec + " " + $("$Info(codec_profile)", metadb); } if (codec) { codec = codec + sample; } else { codec = path;
} var iCount = itemCount[ID.groupNr]; var genre = radio ? "" : (groupedID ? "%genre% | " : ""); var discNumber = (groupedID != 2 ? "" : $("[ | Disc: %discnumber%/%totaldiscs%]", metadb)); var info = $(genre + codec + discNumber + "[ | %replaygain_album_gain%]", metadb) + (radio ? "" : " | " + iCount + (iCount == 1 ? " Track" : " Tracks") + " | Time: " + calculateGroupLength(firstItem[groupNr], lastItem[groupNr])); var w = w - x - 10; g.DrawString(info, infoFont, infoColor, infoX, infoY, infoW, infoH, StringFormat(0, 0, 3, 0x1000)); var infoStringH = Math.ceil(gr.MeasureString(info, infoFont, 0, 0, 0, 0).Height + 5); var lineX1 = infoX, lineX2 = 20 + w, lineY = infoY + infoStringH; (lineX2 - lineX1 > 0) && g.DrawLine(lineX1, lineY, lineX2, lineY, 1, lineColor); } となっていました これはJavaでしょうか? 上記URLに任意のFieldを追加するにはどうすればよいでしょうか? よろしくお願いいたします
>>764 言語面ではJavaはあらゆる面でC#に劣るから、正攻法で戦ってはいけない
C#er相手にマウントを取るには、でもWindowsなんでしょ?wwwが一番効く
お前もWindowsでJavaを運用していたり、そのC#erが.NET CoreをLinuxで運用してたりUnity開発者だったりするなら諦めろ
>>765 foobar2000のJavaScriptっぽいなー
>>761 EANReaderってQR反応したっけ?
>>764 ・ゴメン俺Haskellに乗り換えたからJavaやってねーんだわ
・ゴメン俺マネジメントが忙しくて最近プログラミングさせてもらえねーわ
好きなほうどーぞ
Haskellは嘘だろと追及されそうならKotlinかLombokで
>>763 >メソッド名は“main”である(すべて小文字)
これネットでggって書いてあったんだけど
じゃあファイル名はもう何かわからないってこと?mainメソッドの拡張子も.class?
この沢山ある**.classファイルの数々からmainを自分で見つけるしかないってこと?
テキスト検索すらできない実力でリバースエンジニアリングできると思ってるの? 煽りじゃないよ
指定した全部のファイルから メソッドだろうが修飾子だろうが全部の文字列検索してるツールとかってないの? 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チャットアプリ【チュートリアル】
@YouTube とだこうきの動画。
通信には、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を使った処理をやって結果だけ返すようにするか どれがいいですかね?
JavaFXがswingに撮って変わった原因てなんですか? Swingのほうが異なるos間で動く可能性は高い?
JavaFXはコミュニティに移管され事実上廃止 Swingも元々ほとんど使われてない 取って代わったも原因もクソも、そもそもJavaでGUIアプリなんて今も昔もはっきり言って誰もやっていない
EclipseやIntelliJといったJava用IDEくらいしかJava製GUIアプリ思いつかん
Oracleのインストーラが裏に行っちゃっていつも困った
ネイティブコンパイル出来るようになったからGUIアプリの需要結構あると思うけどね C#のネイティブコンパイラまだ実用レベルにないし
JavaのGUIが普及さなかったことに僕は納得できません
>>884 Javaが広まり始めた90年代後半のPCは遅くてメモリも少なく、JavaVM起動直後の初期化でとても時間が掛かった。もちろん何もかもが遅く当然GUIも遅かった。
またJavaプログラム以外に別途JavaVMをインストールしておかねばならず初心者にはこれが壁になり普及を大きく妨げた。
ということでPCのデスクトップアプリケーションとしてのJavaは早々に死に、サーバーサイドのプログラムとして使われる事が多くなった。GUIの進化などするわけがない。
ただしAndroidによってクライアント側のGUIが救われたとは思える。主にスマホやタブレットになるが。
swingがスレッドセーフじゃないと知らずに別スレッドに投げて処理してた。 TextFieldは大丈夫だった。comboboxがうまく動かなくて調べて初めて知った。
動画リンク
@YouTube ファイル名
令和のコペルニクス.mp4
六角アミダって有りそうで無いので自作しました。
>>889 ソースコード見た
きれいなコードだった
そういえば Chromebook はAndroid用のプログラムも動くらしいな。 ということは何の苦もなくそのままの状態でJavaのGUIがPCで動くということでもあるな。 日本では Chromebook 売れてないけど。
ArrayListのことを言っているのだとすれば 長さが可変の配列として使えるので「便利」
Eclipse使ってます。 色々なライブラリを導入した時は、Javadocもインストールして開発を捗らせてます。 あるライブラリ(jar)の日本語javadocがあるかどうかってどこでどうやって判断したら良いですかね? それとも、Pleadesに標準装備されてるJavadoc以外は基本的に日本語Javadocは期待しない方がいいですかね
Eclipse使ってます。
昨日、pleiades-2019-12-ultimate-win-64bit-jre_20200213つまり最新版の全部込みを導入したんですが、
Javaソースコード編集中にマウスカーソルホバーでドキュメントがポップアップするやつですが、Filesクラスの説明が英語のままなんだが、何で?
ブラウザから
https://docs.oracle.com/javase/jp/13/docs/api/java.base/java/nio/file/Files.html を見に行ったらちゃんと日本語だったんだが、Eclipse側でどういう設定にしたら良いの?
>>893 Kotlinだと同じListが見た目綺麗に書けるよ。
Ruby on Rails なら、アプリの設定ファイルに、 I18n.locale = :ja とか、:en とか設定する それで、自分で日本語用の翻訳ファイルを作る。 設定/locales/ja.yml member: 会員情報 full_name: 氏名 email: メールアドレス こういう感じ
Javaで何かを作る過程を詳細に説明してる書籍ってないの?
クラスローダー毎にstaticフィールドが異なるという話が本当か調べようと思って 実験コードを書いてたんだけど 異なるクラスローダーで同じクラスを読み取って this.getClass().getClassLoader()ってやったら同じインスタンスが返ってきてしまって 異なるクラスローダーで同じクラスを実行するという事ができない。 誰かそういうコード書ける?
できたわ 確かにクラスローダー毎に静的フィールド異なるな このコード書いてみてクラスローダー周りが良く分かった
>>904 内緒の話だけど、
2ch/5chは昔から5人位くらいががんばっていろんな板に書いているだけ。
>>901 掌田津耶乃だろ。
あらゆるゲームエンジン・フレームワークの本を書いてる!
まあ、Rails が一番有名だけど
Spring Framework 4 プログラミング入門、掌田津耶乃、2014
Spring Boot プログラミング入門、掌田津耶乃、2016
Node.js超入門、2017
PHPフレームワーク Laravel入門、2017
CakePHP 超入門、2018
Python Django 超入門、2018
Android/iOSクロス開発フレームワーク React Native入門、2018
Ruby on Rails 6 超入門、2020/2/21
下記図のように、複数の三角形を描きたいです。 List<Point> ls;に格納したPointはソートされていますが、数は増減したりし、 マウスの座標は動きます。 java.awt.GraphicsのfillPolygonを使って for (int i = 0; i < ls.size(); i++) { g.fillPolygon(new int[mx, ls.get(i).getX(), ls.get(i + 1).getX()], new int[my, ls.get(i).getY(), ls.get(i + 1).getY()] ,3); } のように書けないか考えているのですが、何かいい方法はありますでしょうか?
for (int i = 0; i < ls.size(); i++) { g.fillPolygon(new int[]{mx, ls.get(i).getX(), ls.get(i + 1).getX()}, new int[]{my, ls.get(i).getY(), ls.get(i + 1).getY()} ,3); } こういうこと? 毎回newするのはイケてないので配列使いまわしたほうが良いよ
ラムダ式の式って、方程式の式?それともオギノ式の式? 便乗で、くだらない質問でスマソ
lambda expression equation Ogino method equationはmathematical expressionの一種だから方程式の式
>>911 間違ってはいない
Javaでは匿名クラスの省略表記のような形でラムダ式が実現されてる
プログラミング言語一般で考えると第一級関数である方が本流で匿名クラスと等価とは限らない
>>914 ありがとうございます
Javaで何か作ってみたいのですがJavaでゲームを作ろうみたいなやつは古い本ばかりであまり参考になりそうにないですね
Java でゲームプログラミングと言えば、 YouTube で有名な、T Umezawa のシリーズだろ 最近のJava は、Ruby on Rails のコピーで、 Spring Boot で、web プログラミングだろ まあ、すべてのフレームワークの基本である、 Rails をやっていないと、web プログラミングは難しい
WebアプリケーションそのものはJavaではない。
>>910 ありがとうございます。
出来ました。
1つ質問なのですが、
「毎回newするのはイケてないので配列使いまわしたほうが良いよ 」
ということはどういうことでしょうか?
ヴィジュアルスタジオコードで 新しいpackageを作るにはどうすればよいの?
>>920 その場合ループの中にあって同じ要素数の配列のためのメモリ確保と解放の処理が繰り返されるし、尚且つ一つのメソッドの引数で使って即不要になるので無駄な感じがする。
もちろんコンパイラがうまいこと最適化して最終的なコードに無駄はなくなる可能性はあるのだが、Javaの場合はそれが保証されていない。
ということでそういう場合はループの外で配列を new してから使う方が良い。
リソースと外部ファイルの違いを理解するところから。 Javaに限った話ではない。
年齢に関係なく物理メモリが無尽蔵にあると思っている人間は多いからね。
>>923 ありがとうございます。
このような書き方でもいいのでしょうか?
public void func() {
int[] lx, ly = new int[3];
lx[0] = mx;
ly[0] = my;
for (int i = 0; i < ls.size(); i++) {
lx[1] = ls.get(i).getX();
lx[2] = ls.get(i + 1).getX();
ly[1] = ls.get(i).getY();
ly[2] = ls.get(i + 1).getY();
g.fillPolygon(lx, ly, 3);
}
}
初歩的な質問ですみません スイッチ分のcaseに定数を使ったらエラーで怒られたのですが、ここに定数を使ってはいけないのでしょうか? 文字列の判断の際、定数が安全なのですが、やはりcaseには直に文字列を書くしかないですか?
>>927 普通に使えるから書き方間違ってんでしょ
FileWriterやFileReaderを用いたファイル入出力処理では、 やはりthrowsではなく、try-catch-finallyを使った例外処理をすべきですか?
どの層でcatchすべきかはデザイン次第 個人的なツール等で利用者が困らないなら別に外まで投げっぱなしでもいい いずれにしてもtry-with-resourse文は使うべき
>>931 参考になります。
ありがとうございます。
個別アプリでtry-catch構文を使うなとか嘗め腐った規約 共有部分で使いまくってるのに個別アプリで使うとだめな理由が一切わからない 規約作ってるやつが俺Sugeeeしたいのか
>>935 まとめてロギングしたいとかじゃないかな
catchするならリスローしてねの規約があってもよさそうだけど
わからないなら聞いたら良いと思うよ
初心者になるべくtry-catchを使ってほしくないという気持ちは分かる 例外が握りつぶされる 原因例外が途中で捨てられエラー発生元が分からなくなる 無意味なラッピングがされていてcatchがうまく書けなくなる 同じ例外のスタックトレースが何度も何度も出力される もううんざりだよ
そんなこといったって、どうすりゃいいのさコロコロ(AAry
ヨシ! catch(Exception e){ throw new Exception(); }
よくある↓のようなifで事前チェックさせる方式がなぜまずいのか考えてみよう。 if (resource.isAvailable()) { resource.getData(); ... }
いや普通にロックかければいいじゃない。その例は良くない。 それにgetDataの根本のところでも同じようなことをやってるだろう。
atomicityを問題にしてるわけじゃないだろ そこは事前チェックする場合だろうと例外でハンドリングする場合だろうと大差ない
初歩の初歩なんだろうけど javaでデータを保持しておきたい場合ってどういう風にするのが一般的? たとえば作った名簿(HashMapなんかを想定)を次に使うときまで保持しておいて、次回はそれを使って続きから作業したいみたいな テキストで保存しとくとかいくらでもやりようは思いつくんだけど、セオリーを知りたい
tryの後の()の中に2つ文を書くことは出来ますか? 例えば、 try(FileReader fr = new FileReader(fileName); BufferedReader br = new BufferedReader(fr);) と書けますか?
>>949 {}の前です
Java7から導入された記述方式らしいのですが
>>950 あ~、できるよ
それはtry-with-resourceって名前
たびたびすいません
https://pastebin.com/dTMz4gib 上のコードがコンパイルエラーになってしまうのですが、理由が分かりません
「identifierがありません」と表示されてしまいます
どなたかよろしければ、回答をお願いします
>>953 try(FileReader fr = new FileReader("matrixA.txt");
BufferedReader br = new BufferedReader(fr)) {
>>953 変数宣言はtry ()の内側に書く必要がある
Java9あたりからは外で宣言しても良くなったけど、それでもeffectively finalであることが前提だからfrへの代入はNG
そもそもメソッド冒頭に宣言を集めてしかも取りあえずnullで初期化しとけってのは悪癖だからやめた方がいい
>>953 言いたかないけど質問のレベルが低すぎる気がする。
変数のスコープも理解できてないようだし、
それコピペしてきて動けばいい感じで動かしているだけだよね。
学校の宿題なんだろうけど、もっとちゃんと勉強しようよ。
ここでサボって人に聞いたものを単純に覚えていたら
この先何も書けなくなるよ。形を覚えるんじゃなくて
意味を覚えよう。
答えてくれた方ありがとうございました
>>954 やっぱりそう書かないといけないんですね…
>>955 try with resource文に関してです
>>956 >メソッド冒頭に宣言を集めてしかも取りあえずnullで初期化しとけってのは悪癖
マジですか
>>957 すいません
スコープは理解しているつもりです
例外処理をあまり書いたことがなかったので…
学校の宿題ではありません
大学は数年前に卒業しています
>>958 文法規則を知らないって意味ではなくスコープとはどう活用すべきものなのかが把握できてないってことだと思うよ
たとえばクリティカルシンキングのスキルが不足している優しいイイ人は10年やっても残念なコードしか書けないことがよくある
もしプロとしてJavaを書いて金を貰っているならリーダブルコードのような良書を一冊読んでみるのをお薦めする
すいません初心者です助けてください…課題でいきなり詰まってます…
課題の言ってることはわかるのですが、いざ書こうとなるとうまくまとめることが出来ません…
解答例を示していただけないでしょうか…
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14223782454 長すぎてエラーになってしまったので知恵袋の投稿見ていただけると助かります…
>>960 ★★ Java の宿題ここで答えます Part 74 ★★ [無断転載禁止]©2ch.net
http://2chb.net/r/tech/1477625280/ Javaのgoldまで取得できたので実際に何か作ってみたいと思っています Java + MySQL + Tomcatで作る掲示板とブログという本を参考に掲示板を作ってみようと思っているのですがこの本で問題ないでしょうか? 発売されたのは2005年みたいなので古すぎて参考にならないとかありますかね?
>>962 作るのに資格も本も必要ないググって作れるっしょ
>>964 親切にありがとうございます!!!
本当に助かります…
【 課題 】 https://drive.google.com/open?id=1QaPxq5C66ZQpcCyITgS2XCQDs44zoomy 複数あるのでgoogledriveで課題内容を共有させていただきます 【 形態 】1. Javaアプリケーション 【 GUI 】 【 期限 】4月29日 【 補足 】丸投げです…申し訳ありません… エクリプスでjunit使いたいんですけど、うまくいきません… ここ見れば使い方わかるみたいなサイトってありますか? 自分でも調べてやってみたんですけど、「テストランナーjunit4のテストが見つかりません」と出てしまい困ってます…
>>962 2005年か
Ruby on Rails が流行ったから、
今はどの言語でも、Rails のコピーが隆盛で、
Java でも、Groovy で、Spring Boot などに変わった
>>968 ビルドパスにjunitのjarとhamucrestのjarを追加して
こういうクラス書いて実行すればできるっしょ
import org.junit.Test;
public class MainTest {
@Test
public void testA() {
System.out.println("hoge");
}
}
Tuple相当のクラスに独自のhasCode()メソッドとequals()メソッドを定義してLinkedTreeSetに突っ込んだらどうかね
>>972 , 973
ありがとうございました。
ラムダを使えばきれいに書くことが分かりよかったです。
質問 マルチスレッドでコンストラクト中の状態を逸出させないということで コンストラクタの中でインスタンスメソッドを呼ばないようにしましょうという原則がありますが コンストラクタの中でインスタンスメソッドを呼びたいときもあると思います そういうときみなさんはどうしていますか? ・コンストラクタの代わりにstaticのファクトリメソッドを作ってその中でnewしてインスタンスメソッドをコールする ・コンストラクタの中で呼びたいインスタンスメソッドを別のクラスに移動する ・シングルスレッドでしか使わないのでマルチスレッドの原則なんて気にしない、コンストラクタの中でインスタンスメソッドをコールする ・その他 アンケートみたいな感じですけどご回答いただければ幸いです
>>975 と
>>976 は書いてることが違う?
>>976 はコードに問題があれば100%バグが再現する
>>975 はマルチスレッドと言ってる
>>975 はどのような問題が起こるのかをまず説明して欲しい(知りたい)
コンストラクタな完了前にオブジェクト変数にインスタンス参照が設定される問題は私も知ってるけど
それはインスタンスメソッド呼び出しどうこうといった問題ではないし・・・
>>976 ありがとうございます!
ドキュメントに書く、オーバーライドできないようにすればおkということですね
>>977 >
>>975 と
>>976 は書いてることが違う?
同じです、結局のところそういうことです
> コンストラクタな完了前にオブジェクト変数にインスタンス参照が設定される問題は私も知ってるけど
それです、残念ながらそれです
コンストラクタでインスタンスメソッドを呼び出しても問題ないからやる派ですね?
>>977 ,978
別の話が混ざり合ってるな
読んだ人は腑に落ちないか誤解すると思う
互いに密接で合わせ技もあるので完全に切り離すことはできないけど、一緒くたにすると影響や対処に漏れが出る
> マルチスレッドでコンストラクト中の状態を逸出させない
という表現に合うのはこれ
https://www.jpcert.or.jp/java-rules/tsm03-j.html ただしコンストラクタとは別の初期化メソッドを提供する場合の話
コンストラクタ中から逸出させるなという規約はこれ
https://www.jpcert.or.jp/java-rules/tsm01-j.html コンストラクタからのインスタンスメソッド呼び出し自体は問題にしてない
シングルスレッドの場合も問題がある
>>976 はこれ
https://www.jpcert.or.jp/java-rules/met05-j.html this逸出の話に比べるとかなり限定的な話
これってJVMのバグではないの? JVMがコンストラクタが完了するまでインスタンス参照を変数に代入しないようになれば解決するんじゃないの? なぜ不完全なインスタンスへの参照が変数に設定される可能性をプログラマーが考慮し続けてないといけないの? 今後もずっと続くの?
>>979 コンストラクタからインスタンスメソッドを呼びたいときどうしますか?
一般論ではなくて個人の考えを教えていただけると幸いです
>>981 一般論うんぬんじゃなくて論理的かどうかで判断しないとプログラムは言うことを聞かないし
こんな匿名の場で少ないサンプルを集めたところでかりそめの安心感しか得られない
俺の脳内のタカアンドトシが女子か!!と激しくツッコミいれるわ
俺は上で挙げたルールに反しないように書くよ
いったいどうしてマルチスレッドでコンストラクタからインスタンスメソッドを呼び出しちゃいけないなんて思ったのか、先に説明してくれよ。
>>979 が出処と違うんか?
>>984 それですよ
僕が説明したとしてあなたは何ができますか?
僕が勘違いしてたことを追求してどうするんです? 僕をどうするつもりなんですか!?
いまのところコンストラクタの中でインスタンスメソッドをコールするのが全員のようですね
>>986 勘違いしていることに気がついたのなら先にそう言いいなよ。
>>985 君が勘違いしていると思ってその原因を探りたかっただけなんだが。
>>987 君が勘違いしていたのだから当たり前だろう
恥ずかしい人だなー 誠実な対応ができず茶化して誤魔化すような人って技術的にも成長できず頭打ちになる人が多い印象がある
原因を探って何をするつもりだったのでしょうか どうして原因を探ろうと思ったのでしょうか そこを探っても質問の回答には辿り着けません 僕の質問はみんながどう考えてるかってことでした 自分はこう考えてるという意見が欲しかったのですが・・・
このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 534日 8時間 55分 36秒
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/ ▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
read.cgi ver 07.7.23 2024/12/25 Walang Kapalit ★ | Donguri System Team 5ちゃんねる
lud20250107171731caこのスレへの固定リンク: http://5chb.net/r/tech/1542595026/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。 TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「★★Java質問・相談スレッド182★★ YouTube動画>12本 ->画像>6枚 」 を見た人も見ています:・MASM32 - 選ばれし本物のプログラマ ・scratchの次にJavaScriptを学ぶのはアリ? ・★★ Java の宿題ここで答えます Part 74 ★★ ・C++相談室 part131 ・【計測】LabVIEW相談室【制御】 ・Swift part7 ・プログラミング初心者だけどHSPを勉強しようと思う ・C言語をやりたいんですが ・もうすぐプログラマになって3年経つ ・Rubyについて(アンチ専用) Part004 ・テストを書いてからリファクタリングなんてのは幻想 ・ふらっと C#,C♯,C#(初心者用) Part144 ・Borlandにはやられた... ・【死ね】configure大嫌い【RMS】 ・巨大なアーキテクチャ内での基本的なデータ構造 ・クラス名・変数名に迷ったら書き込むスレ。Part29 ・Excel VBA 質問スレ Part79 ・Microsoft Xamarin part8 [.NET MAUI] ・プログラミング言語Egison ・次世代言語議論スレ[Rust Kotlin Haskell]第6世代 ・プログラミング言語、次は何を学ぶ? ・女向けのプログラミング言語 ・男向けのプログラミング言語 ・オープンリソース株式会社 ・スレ立てるまでもない質問はここで 150匹目 ・【Intel】OpenCV総合スレ【画像処理】 ・ブロックチェーンプログラマ来てくれないか ・プログラミング雑談 - 初級編 ・くだすれPython(超初心者用) その43【Ruby禁止】 ・「プログラミングするならMac」の真偽は ・言語デザイン ・プログラマでサクラエディタ使ってる奴は勉強しない奴 ・C++相談室 part126 ・ユニケージが大嫌いなPOSIX原理主義 ・金沢大学「シェルスクリプト言語論」は偽開発技術 ・[特設]サマータイム対応相談室 ・C#, C♯, C#相談室 Part93 ・C++相談室 part142 ・ワイりよAepx強やついるおか? ・AKB総選挙324円から投票できます ・初めてココ来たけどpython人気なさ過ぎるだろ。 ・C++相談室 part130 ・C++相談室 part165 ・C++相談室 part117 ・C#, C♯, C#相談室 Part94 ・クソ中学生。アプリを作りたい ・C++相談室 part146 ・C++相談室 part141 ・C#, C♯, C#相談室 Part95 ・PHPの基本の知識を教えていただけませんか? ・【未来】マイニング工場は全てがスクラップに! ・天才プログラマー集まれ!!! ・フリーソフトなどに使われる言語は? ・C++相談室 part149 ・C++Builder相談室 Part21 ・くだすれPython(超初心者用) その42【Ruby禁止】 ・JavaScript の質問用スレッド vol.125 ・【漏れは】猫でもわかる質問スレ【猫以下です】 ・競プロerのお前らのレート晒していけ ・【統計分析】機械学習・データマイニング23 ・新規専ブラ稼働させる有識者おらんのかえ? ・フラグメンテーション対策スレ ・【初心者歓迎】最新COBOLについての質問スレ ・アプリ作りたいんだけど... ・バイナリ(exe)にすればRubyもC++も実行速度変わらないという事実
12:24:45 up 53 days, 13:23, 0 users, load average: 6.99, 7.52, 7.52
in 0.089807987213135 sec
@0.089807987213135@0b7 on 061001