★★Java質問・相談スレッド181★★
レス数が1000を超えています。これ以上書き込みはできません。
Javaの入力値チェックの方法についてご相談です。
ユーザーから手入力された値をインスタンス変数に代入後、チェックする処理を記述しようと思っているのですが、方法として以下の3つを考えています。
※setter のアクセスレベルはprivateにしています。
@ 検査対象のインスタンス内でチェック用のメソッドとsetter をそれぞれ定義する
A 検査対象のsetter 内に、チェック処理のロジックを記述する(チェック処理の内包)
B チェック処理をする責務を持つクラス(インスタンス)を別で作成し、検査対象を引数として与える
3つの方法に対してのご意見、ご指摘を頂きたいです。
そもそも、setter に値をセットする以外の処理を含めて良いものか悩んでおります。
可能であれば、setter の件についてもご意見頂ければと思います。
長文となってしまいましたが、皆様よろしくお願いします。 java bronzeを受けようと思い黒本過去問10周くらいして
理解できたと思いますが、似た問題が多いでしょうか・・
合格した方はどれくらい勉強したか教えてください。 >>324
それなら多分大丈夫だと思います
俺は翔泳社の問題集を3回ぐらい解いて受かりました >>323
ユーザの入力値受け取るクラスならprivateじゃなくてpublicなsetter作るような気がするんだけど
ちょっと状況が分からない
どういうクラスかもう少し書ける?
setterに処理を含めること自体は問題ない >>323
時と場合により全部使う
プレゼンテーション層での検証は主に@とB
ドメイン層での検証は主にA(setterは基本的に非公開だが) setterにロジック含めていいかどうかで悩むとかアホか
ロジック含める可能性がないならsetter通さずにフィールドにそのまま大入すればいいだろアホ IPっつったら、IDEAPOCKETが真っ先に思い付くわ・・ すみません、いくつか質問させてください。
<クラスパス(ビルドパス)について>
・eclipseの「ビルドパスに追加」したフォルダが複数登録されており、
・それらの中に全く同じパッケージに有る同じクラス名が合った場合、
どのような優先順位で1つのクラスが選ばれるのでしょうか。
・また全く同じパッケージ・クラス名で、 .jarのライブラリがインポート
されていて、それとは別にフォルダ構造のパッケージの中に、
バラの.classファイルが配置されていた場合、これらの優先順位
はあるのでしょうか。
・コンソールでjavaを実行するのではなくTomcatがjavaを
実行する場合、どのディレクトリからjavaを実行しているのでしょうか?
・.jspファイルは「ビルドパスに追加」をフォルダに置く必要が
あるのでしょうか。それとも「ソースフォルダの追加」に登録
フォルダの配下にあるべきなのでしょうか。
・gitなどでバージョン管理をする際に、.classファイルや .jarなどの
バイナリファイルを複数人で別々のバイナリを生成して
コンフリクトした場合、マージされるのでしょうか。
DBに保存されたバイナリデータもマージされるのでしょうか。
・eclipseで設定したブレークポイントでソースが停止した場合、
その実際の.classファイルあるいは.jarファイルはどこにあるのか
特定できるでしょうか。
<eclipseの「ソースフォルダの追加」について>
・「ソースフォルダに追加」したフォルダの配下にある.javaコードは
eclipseのブレークポイントで止まってくれますが、
これは「ソースフォルダに追加したソースから生成された.class
あるいは.jar」が実行されていなければソースは特定できないので
しょうか。
・「ソースフォルダに追加」した時点でそのソース群から生成された
.classファイルがもしビルドパスに登録されているフォルダ配下
に生成されるようになっていなければ、自動的にビルドパスに
追加されるのでしょうか?
・それとも単純に同名のパッケージ名、クラス名が実行された場合、
ソースフォルダに登録したフォルダから検索して、名前の一致だけで
特定しているのでしょうか。
・もし名前の一致だけで特定している場合、同じ名前の別のソースから
生成された.classファイルに中身が書き換わってしまい、
ソースフォルダに追加している.javaと.classの中身が全く
対応しなくなっている状態になると、デバッグは失敗するのでしょうか。
・「ソースフォルダに追加」で複数のフォルダを追加して、
別々の場所に同じパッケージ名、クラス名の.javaファイルが複数あった
場合、デバッグ時に呼び出されるのはどの.javaファイルになるのでしょうか。 >>332
ビルドパスの優先順はビルドパスのダイアログにOrder and Exportというタブで指定したとおりだよ
クラスパスは先に指定したものから順番に検索される、先に見つかったものが使われる githubでC#で書かれたソースコードを見るとVisual Studioで作成したファイルが見当たらないんですが、
Visual Studioを使わないほうがいいんでしょうか? >全く同じパッケージに、同じクラス名がある
パッケージはフォルダ、クラスはファイル名に相当するから、
同一フォルダ内に、同一のファイル名は、絶対に存在できない
>コンソールでjavaを実行するのではなくTomcatがjavaを実行する場合、
>どのディレクトリからjavaを実行しているのでしょうか?
pwd のような、Linux コマンドを実行すれば、カレントディレクトリを表示するはず。
それか、そういう環境変数を探す
これら以外の質問は、実際に起こった場合の、エラーメッセージで検索して そういや試したことないが、2つの別々のjarファイルの中のディレクトリとクラスファイルが同じだったらクラスローダーがエラー出すんだろうか?
あ、コピーしてやってみればいいだけだな。時間があったらやってみよう。 >>339
それはクラスパスが1つだけと仮定したときの話でしょ?
複数のクラスパスに中身が違う同じパッケージ空間のクラスが存在できるじゃん。
eclipseの「Javaリソース」「参照ライブラリー」「ライブラリー」
「JREシステム・ライブラリー」「Web Appライブラリー」
って何が違うのか気になるわ。
あとそれぞれのアイコン
・田んぼの「田」みたいなアイコン(茶色/白)
→パッケージだけど色の違いは・・・?
茶色い田はフォルダで中に.classファイルが入っている。
白い田はファイル?なのかよくわからない。
フォルダ名の名前空間を表している?
・フォルダ内に「田」が入っているアイコン
・本が積み上げられているようなアイコン
→これは「ライブラリー」か
フォルダの中に「本」が入っているようなアイコンもあるがこれは何?
・ビンのアイコン
→これは.jarだけど.jarってライブラリーのことじゃないのか?
.jarと本のアイコンの違いは何だ?
・「.classファイル」のアイコンも2種類ある。
→1つは「J 01」というファイルのような形のアイコン
もう一つはツリーのような形をした黄色、ピンク、青のアイコン。
これらの違いは何?
イメージとして.classファイルを集約するフォルダがパッケージ(田)
で、パッケージを集約するのが「.jar」で、
.jarを集約するのが「本のアイコン」でいいの?
本のアイコンとフォルダ内に田があるアイコンの違いもよくわからない。
ファイルシステム上ではどれも単なる「フォルダ」似すぎないものの
分類が多すぎて混乱するわ。 >>341
eclipseの「Javaリソース」「参照ライブラリー」「ライブラリー」
「JREシステム・ライブラリー」「Web Appライブラリー」
って何が違うのか気になるわ。
→どういった機能があるライブラリーなのか分類分けしてるだけ。WebかいはつしないならWeb Appライブラリーをビルドパスから除外するなど
あとそれぞれのアイコン
→ただ単に状態を表してるだけ。田の白茶は直下にクラスファイルが有るか無いかだけだったと思う、ほかはないを言ってるかよくわからない
ファイルシステム上ではどれも単なる「フォルダ」似すぎないものの
分類が多すぎて混乱するわ。
→慣れろ >>340を試してみたらエラーにならなかった。
で、クラス名同じで内容が違う状態で実行して判別できるようにして調べたら -cp で先に指定した方が有効になるだけだった。
単純に頭からクラスの検索しているだけみたい。 >>344
いやあ、しかし、エラーになってほしいものではあるよな。 >>332
ここで聞けよ
Eclipse統合M36【Java/C++/Ruby/Python/Scala】 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1503723668/ てかマジにパッケージの役割をまるで理解できてない自分が怖い。
他のプロジェクトのクラス利用するみたいな時に役立つんですかね。 PCではクラスが重複していてもエラーにならずどっちがロードされるか分からんけど
Googleさんはそんな曖昧なことを許さず
Androidアプリをビルドするときはクラスが重複してるとエラーになる java有料化と聞いたのですが個人使用やAndoroidなら無料ですよね >>354
OracleJDKは個人使用だろうと有料
OpenJDKは無料だけどサポート期間が半年で切れ、その都度最新版に乗り換えないといけない
AndroidのJavaは元々違法だから関係ない 先週OracleがJDK11の扱いを新たに発表したよ
これまではOracleJDKを有償サポート契約者にしか提供しないと言っていたのだが
デモや評価目的でOracleJDKを使うことができると表明した
これにより誰でもOracleJDKをダウンロードできるのではないかと見られている
(ただし未契約ではサポートは受けられない)
またOpenJDKについてもOracleがビルドした(ほぼ公式)バイナリが提供される
OpenJDKについては他にもzuluなどいくつかのディストリビューターがビルドバイナリを提供している
JDK11以降も商用サポートが受けられないというだけでJavaはこれからも自由だよ! >>357
でも後から高額請求がOracleテンプレ Eclipseがただで使えるようにしてくれるさ(遠い目) >>357
評価目的ってことは、配布した時点で請求が来るのかな? 払えばサポート受けられるだけで払わなくても商用利用出来る
という認識でok? >>362
サポートって電話したらオラクルのお姉さんと話せるサービスを想像してる?
セキュリティパッチの提供も含まれるんだぞ >>363
セキュリティパッチ無ければ無料です
と言ったら無料選ぶのが客
無料ならjavaで良いね >>362
OracleJDKをデモ・評価の範囲を超える配布等の商用利用したらアウトだろう
サポート不要で商用利用する場合はOpenJDKだな プログラミング超初級です
これからプログラムを学びたいと思って、progateというサイトで練習しています
JavaTは楽しく学習できたのですが、JavaUでifやfor等、多様な構文が出てきて
頭でうまく整理が付きません
プログラム向いてないんでしょうか? むりやりやらされてるの?
たった数時間の勉強で向いてないんじゃないかと心配するほどモチベーションが低いことのほうが、問題だと思うよ。 >>368
仰るとおりですね、根を上げるには早すぎると思います
まだまだ時間を使って、一つ一つを学習していきたいと思っています
Javaに触れてみて思ったのですが、自分はプログラムってもっと数学的なものだと思っていたのですが
英語の文法を覚えるのに近そうですよね
私は数字には強いですが、英語などの言語が超苦手なので向いてないのかなと思いました
Javaが苦手なのか、プログラム全般が向いてないのかが重要だと思ってるのですが
Java以外の他の言語なら、また違うでしょうか? >>367
一度でマスターできないのは当たり前で、なんどとなくいろんな課題に適用していくことで理解した思えるようになります
そういう課題は自分でみつける必要はありますが
>>368
モチベーションは自分の意志ではどうしようもない、天から降ってくるものなのでは? >>372
数学の教科書だって自然言語で書いてあるでしょ
プログラミング言語の文法程度のことが覚えられないなら
知的労働には向いてないよ ありがとうございます
数をこなしていくことで覚えていきたいと思います
https://prog-8.com/users/sign_in#/42
しかし、やはりというかprogateのJavaUの総合問題が、何度挑戦しても難しすぎます
慣れている人なら、こういう難問でもスラスラとコード書けちゃうんですかね?
問題が難しすぎるだけだったりしますか? >>378
この程度なら文系大卒未経験でも新人研修3日目くらいには余裕でできる
中にはできない奴もいるが、経験上、そういう奴は最後まで決してできるようにはならず、試用期間切りかスタッフ職 奇数の和は26です
偶数の和は23です
このくらいのギャグをかますセンスが欲しいところだ。 >>377
大量のデータを条件によって分けて処理するのはよくあることだからできないとお話にならない この問題みてて、そういえばStreamって分岐できないんだよなぁ、
ってことを思った。 今2週目をやってみたのですが、昨日のことがウソのように
スラスラと解けました
こんな簡単な問題に頭を抱えて悩んでいる人たちがいると思うと、笑えてきますね
プログラムって、ちょろいかもしれません 俺もjava始めたばっかりの初心者なんだがこの問題解けないわ Java少し前に始めたけどprogateより参考書読んだ方が圧倒的に理解できるぞ
始めるきっかけでprogateは悪くはないと思うけど 参考書を読む、試す、の繰り返しで良いんではないかな。 スッキリわかるjava入門の命令実行の文の所の後半よくわからないんですが
読み飛ばしても後々問題ないですか? その本に何が書いてあるかわからないので読み飛ばして良いかどうかもわからない。
その本が出る前に初心者ではなくなってしまったのでその本をこれから買う気は起きない。 JVMが実行されるときにパイプライン上で分岐が生じるかどうかを聞いてるのだと思うけど(すげー適当) >>393
すいません。この本はjavaの初心者入門書で
System.out.println();←こんな感じの命令実行文の説明してる章(第2章)みたいなんですけど何を伝えたいのかよく分からなくて^^;
他にもSystem.out.printとかint. =Math.max (?)のこととか書かれてるんですけど…
こういう命令文もあるんだ〜程度に覚えて次に進んでも問題ないですかね・・それともガッツリ覚えてから行かないとどっかで躓きますかね・・・ Ruby で書くと、
puts "あいう"
画面表示するだけの関数だから、一々、覚えなくてよい ここが命令を実行させる文とだけ覚えておけば問題ないですか・・ね
初心者すぎる質問でしたが答えていただきありがとうございました 良くできた本は最初から順にひとつづつ読んでいくのが一番良い。
このタイプの良本は教科書やロングセラーに多い。
適当に思い付きを並べた糞本は順に読んでも意味がない。
というかどう読んでも意味がない。 >>399
たとえばドラゴンブックはよくできた本の一つだな。 普通はわからない所が出てきたら手前の方のページに説明が書いてあると思うのでそれ見れば良い。
必ずしもそうとは限らないが。その場合は索引見ればいいかな。 その章の冒頭にどういった意図で内容を説明しているとか書いてないのん? >適当に思い付きを並べた糞本は順に読んでも意味がない。
Effective Javaのことか?w System.out.printlnはその本の後半で説明してるれるから飛ばしても問題ないよ
自分もその本の読んだけど個人的にはモウチョイ詳しく書いてほしかったな
printとprintlnの違いについてすら書いてなかったし よろしくお願いします
public class HelloSampleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
(略)
Button btClick=findViewById(R.id.btClick);
AListener listener=new AListener();
btClick.setOnClickListener(listener);
}
private class AListener implements View.OnClickListener{
@Override
public void onClick(View view){
}
}
}
onCreateメソッド内のsetOnClickListenerに関しての質問です。
Button型のインスタンス btClickが、なぜ(どうやって?)set.OnClickListenerメソッドを使えるようになっているのでしょうか? >>407
ButtonがViewを継承してるからじゃねっすか >>407
Button->TextView->View
Viewのメソッドが使える ラズパイ+Netbeans+JavaFXでGUIアプリを作りたいんですけど、どうしても環境が作れません。
https://netbeans.org/kb/73/java/javafx-setup_ja.html
ここに従って新しいJavaプラットフォームを作るように言われて作るのですが、JavaFXタブがありません。
上記の環境を構築できた方いらっしゃらないでしょうか。 >>413
じゃあ、javaでGUIはどうしたらええのん?
昔のSwingとかを使うのが正しいのん? NetBeansとかIntelliJ IDEAとかはSwing製なので
まだまだイケるんじゃないかな やめとか、以外で実現方法の知識がある方いましたらお願いいたします。 普通にHTMLでよくね?
配布するならElectronとかでバッケージ化したくなるけど、
ラズパイならどうせ固定用途だろうからローカルサーバーで何の問題もないでしょ ラズパイって何するんですか…?
電気工作?
ロボットでも作るんかね 条件は変えないで、知識が在る方がいましたらアドバイスお願いします
違う方法のアドバイスはご遠慮します
>>419
できない
>>420
GPIOが必要な案件で尚且つGUIが必要 JavaでGUIか
JavaFXのWebViewのみを使ってElectronみたいなのはアリかもな
Electronとの違いはJavaScriptではなくJavaで書けること ラズパイだとnode-redとかじゃねーかな
javascriptとcになっちゃうけど >>421
何ができないんだろう?
Spring Bootとかで普通にWebアプリとして作れば裏側はJavaで書けるしローカルで完結して動かすこともできるしライブラリがあればGPIOも使える
条件は完全に満たしてる
Javaのクライアントテクノロジなんて今から絶対に手を出してはいけない 今は、クライアントを、Java にはしない
Ruby, Python, Java など、すべての言語で、HTML, CSS, JavaScript。
どのフレームワークでもそう
Rails でも、Node.js が必須。
jQuery, Vue.js とか
電子工作なら、Python 5ch ブラウザなど、Java で画面を作っているアプリもあるけど、
結局、誰も保守できなくなるから、開発者がいなくなる
こういうのを技術的負債と言う
君「誰か、JavaでGUI を作れる人、いませんか?」
全員「いません!」w 5chの専ブラは2chの頃にクローズドにしてフリーソフト閉め出したという特殊な事情があるからここで挙げる例としては適切ではないと思う。 基本情報とりたいし、phpとかrubyじゃなくてjavaやろうと思うんだがこれでいいの?CtoCのWebサービス作りたい >>431
できなくはない
適切な答えを返すためには質問がいくつかある
・なぜ基本情報を取りたいのか?
・基本情報を取るかwebサービスを作るかどちらしかできないとしたらどちらをやる?
・html、css、javascriptを深く理解する気があるか否か
・そのサービスのスマホ連携の有無 >>432
・基本情報は就職用。
・どっちかだけっていうならwebサービスを作りたい。
・html/cssは一通り勉強した。あれを深く理解するっていうのの意味がわからない…
・スマホとは連携させたい。
同じような自問をしたことがあるけど、やっぱり基本情報は表計算で乗り切ってphpとか勉強した方が良いんだろうか… >>434
大体わかった
それを踏まえて最後の質問だ
・phpやrubyを使うであろうWeb系とjavaを使うであろう業務システム系、どちらに就職するつもり? >>436
OK
そうするとお前が学ぶ意味があるのはphpかrubyで間違いない
基本情報の資格はお前のキャリアに必要ない。当然javaに手を出す必要もない
ただしjavaやって資格取って業務系で食うよりも人生の難易度は上がるだろう
何か質問はある? >>438
特にない。ハードモード楽しみます。参考になりますた。 いやWeb系でも自社事業やってるようなとこだとJavaや.NET使ってるのも珍しくないぞ
Web制作に近いようなとこより、大抵そういうとこの方が金払いいいし技術レベルも高い その一握りに入れないならWeb系に行く意味なんかないでしょ
大したスキルもなく裁量もなくゴミのような単価でクソを垂れ流すだけ
業務系の方が遥かにマシだ >>441
Javaと.NETをひとくくりにしない方がいい もう諦めてSwingで書くことにしました
JavaFX、NetBeans、RaspberryPiで検索すると海外でも同じことで悩んでいる人がいるみたいだけど、
どうにもならないみたいですので
みなさん、ありがとうございました。 >>446
Java土方と.NET土方にレベル差なんてないよ >>441
作るのは派遣だよ
正社員の仕事は設計とダメ出し >>431-439
まずこの本で、オブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014
基本情報処理なら、スッキリで十分だろ
その後「たのしいRuby 第5版、2016」を読んで、
無料のRails チュートリアルをやる >>451
お前自覚ないかもしれないけど知的障害者だから精神科行ったほうが良い >>450
自社サービスは自分で設計して自分で作るぞ
うちもエンジニアの大半は社員で全員コード書いてる
自社サービスには人員需要の波がないからエンジニアを抱えることに対して抵抗がないんだよ と火曜の9:30に会社から書き込みをしている社蓄が申しております mainメソッド内の処理において、ポリモーフィズムでnewの使い分けする時ってif文使わない方が良い?
やはりファクトリクラス作って、ファクトリのメソッド内でif文使うべきなのか? 返答ありがとう
mainメソッドにif文はあまりつけないべきか悩んでいたのだが、そんなに拘るものでもないのかな
参考になりました よろしくお願いします。
Intent intent=getIntent();
String stdNo=intent.getStrintExtra("stdNo");
2行目のintentがインスタンスとして使われてるように見えるのですが
1行目のintent=getIntent();は、getIntent()というメソッドを変数intentに代入して
2行目で代入したgetIntent()のメソッド、getStrintExtra()を使っているということなのでしょか? Javaではメソッドを変数に代入することはできない
getIntent()はIntentのインスタンスをreturnするメソッドなんだろ
getStrintExtra()でStringのインスタンスがreturnされてきて変数stdNoに入ってる二行目と一緒やん? >>463
ありがとうございます。1行目のintentはインスタンスなのですね。
インスタンスはnewで生成する以外にもreturnで取得する方法もあるのですね、勉強になります。 jdk11でjavafxが分離されるという話があるけど、
アプリにjavafxのライブラリを同梱するという形態になるんですか? >>467
分離じゃなくて廃止ね
オラクルとしては開発を放棄し、OpenJFXだけ残して提供終了
でOpenJFXというのはOracleの開発成果をGPLの下でソースを公開するだけの実体のない組織なので、開発継続の見込みはゼロ
もう無理や windowsでコマンドライン引数とかコンソールへの出力にユニコード使ってると、正しく処理できないっぽいですが、
そういうのちゃんとやってくれる定番のライブラリとかありますか? >>467
これ俺も気になってる
JavaFXってJARだけでなくDLLなどのネイティブライブラリも必要なので
JavaFX(openjfx)使ったアプリの配布はプラットフォーム別に用意しないといけなくなるのかな? OpenJDKやOpenJFXに部外者が参加しようと思ったら、私が提供する著作物はオラクル様が自由に使えます
絶対に訴えたりしませんっていう誓約書にサインしなきゃいけない
あれを見直さない限りコミュニティプロジェクトとしての発展はありえない
ただでさえJDK11の件でオラクルに対する不信感が高まってるのに今更誰がオラクルにケツを差し出す気になるだろう JavaFXのJDKから廃止というのはJREからも廃止ですか?
OpenJDKのインストール方法を調べたらRedHatからダウンロードしろと。
しかもそれは開発者向けでエンドユーザー向けじゃない。
エンドユーザー向けJavaアプリが生き残る方法はあるのか? エンドユーザー向けのOpenJDKのインストール方法は見つからない。
つまり、環境変数の設定やコマンドラインを必要としないインストール方法が無い。 公式が配布するOpenJDKはtar.gz形式でwindowsの標準機能で解凍できない。
GPL感染はプロセスを超えないそうなので、
OpenJDKをパッケージに同梱してしまうのは解決策になるかもしれない。
その場合、起動スクリプトを組み込む必要があるし、OpenJDKのアップデートにどう対応するのかという問題がある。
windows向けOpenJDKインストーラ&アップデータを誰かが作る事も考えられる。
しかし、公式サイトへのポーリングや自動的なファイルのDLをしていいのかどうか。 >>469
windows でも cygwin 使ったり wsl 内で動かせば問題なくできるのでは?
ていうかそういうOSとか実行環境の問題をそこの中で動かされるプログラムでなんとかしようというのは考え方がおかしいのではないか?
どうしようもない場合は別としても、やはり実行環境側でやらねばならない事は実行環境側でやるべきだろう。 >>480
そういうの主要な Linux ディストリビューションだと悩まなくていいのにな。ネットワーク経由でアップデートする yum だの apt だのがあるから。
Windows には Windows Update があるが、あれはMS専用でMSが受け入れてセットしてくれない限り使えないよな。 ライセンス気にするようなアプリ開発するならOracleと契約結べよw 本当に自分の中でLinuxの評価が上がってる。
みんなそろそろLinuxデスクトップに移行すべきじゃないか。
ゲームエンジンはLinux向けビルドが出来るし、古いゲームでもおおむねWineで動く。 >>474
スタンドアロンなJREは廃止
Java SE Subscription を契約した上でアプリに同梱して配布するのが正解
価格は、開発環境も実行環境も(!)PC1台一月あたり2.5ドルから
一日10円の御賽銭でオラクル神の手厚いサポートが受けられるんだから安いもんだよね リナックスでもマックでもウインドウズでも
動くソフトはこれから何で作ればいいの? OpenJDKを使うしかない。
アプリに同梱するんだが、アップデータもJavaだから、恐らくOpenJDKを2個インストールして、
Aでアップデータを実行してBをアップデート、
次にBでアップデータを実行してAをアップデート、みたいにやるしかないだろうw OpenJDK+OpenJFXをアプリ同梱、
起動スクリプトでOpenJFXのDLLにパスを通してOpenJDKからアプリのjar起動。
とかでいける・・・のか JavaでDLLとかのネイティブコードをアプリ毎に用意させるのは例外的で
そういう方法は確立していないし、
JavaFXのようなクライアントソフトで使われる機能は
エンドユーザー環境で構築しなきゃいけないことが多々あるわけで、
全く破滅的としか思えないが、
JavaFXは情熱的で盛り上がっているコミュニティだとか言われてる。
JavaFXはOracleJDKでしかサポートされてなかったがそれが有償化される、
しかも自分が払えばいいだけじゃなくエンドユーザーもオラクルに金払わないと使えない、
やはりクライアントソフトで使われる技術で大量のエンドユーザーが居る事が多い、
JavaFX開発者は一番フェイント食らっただろう。 GUI は、HTML, JavaScript が基本。
Rails でもそう。Vue.js でも使えば?
>>480
ファイルの圧縮解凍なら、7-zip を使えば?
Windows のパッケージマネージャーなら、
NuGet, Chocolatey, Microsoft Web Platform Installer, Scoop とか
Windows10 では、NuGet, Chocolatey を使った、
MS 製のPackageManagement(OneGet)が標準搭載された 解凍処理はアップデータが動作できてる時点でなんかライブラリ使えばいいんだけど。
DLLの問題は、JNIのDLLロードと違って、JavaFXはエントリーポイントからJavaFXのクラスだから、
起動前にDLLのパスが分かっている必要がある。
だから、起動スクリプトでやることになるだろう。
しかし起動スクリプトはOS毎に用意する必要があり、Javaのメリットが薄れる。
もしオラクルがJDK11で何かそのあたりの対策を発表しなかったら、杜撰としか言いようがない。 https://www.gnu.org/licenses/gpl-faq.ja.html#IfInterpreterIsGPL
>しかし、インタープリタが他の機能(多くの場合ライブラリですが、
ライブラリである必要はありません)への「バインディング」を提供するように
拡張されている場合、解釈されるプログラムはバインディングを使うことによって
事実上それらの機能とリンクされることになります。ですから、
もしそういった機能がGPLのもとでリリースされているならば、
機能を利用している解釈されるプログラムはGPLと両立する形で
リリースされなければなりません。
OpenJDK、OpenJFXはリンク例外がついているので、
アプリに同梱しても非GPLを維持できる、と思う。
こっそりリンク例外が取り外されたりしないか注意しておく必要がある。
やはり、アプリ同梱作戦で何とか乗り切れるだろう。
Swingにすればjfx問題は無いんだが、結局oracleJDKが有償化されるから
アプリ同梱作戦は必要だから、さほど楽になるわけではない。
javaFX自体はかなり良い印象があるし。 今更騒いでもなあ
Oracleに買われた時点でクライアントJavaに未来がないことなんか分かりきってたでしょ
次は乗る船を間違えないこと、間違えたと分かったらすぐに降りること
だいじなことだぞ あるライブラリを使う必要が出てきて、C++用のがなくて、C#にするかJavaにするか迷って、結局Javaにしたんだけど、道を誤ったか。
また環境構築や言語の勉強に何か月もかけるなんて、うんざりするわ。 >また環境構築や言語の勉強に何か月もかけるなんて
なんでそんなに時間掛かるの?
二つ目以降でそんなに時間掛かるとしたら能力無さすぎ。 >>502
Javaを見限ったくらいでそんなに怒らないでよ、ジャバラーさん(笑) >>503
よう、無能。
何カ月もかけるとかねーわ。
Javaは最も習得が楽な部類の言語だから他の言語は1年はかかるんじゃないかと思うけど頑張ってな。 javaはOS環境の細かいこと覚えなくていいから楽だよな Javaそのものは楽だがライブラリが多くて最初は何をやる時に何を使ったら良いかよく分からなくて大変かも。
わからなくて自作してしばらくしてからライブラリの中から発見するとかなw >>507
それを◆BrBq2CJg6HGdに言い聞かせていただけますか Javaは完ぺきな言語に見えたけど、色々建て増しして便利にはなったけど当初の完全さが失われていったな。 そうかな?
俺が使い始めた頃は重くて使い物にならんってのが評価だったような C#でいいよ
速いし楽だしMicrosoftの安心感最高 正直オラクルに比べたら100倍マシ
今は亡きJ#のように、Javaを.NET Core上に実装してみんなで移住するのが一番幸せな形だと思うわ
オラクルはAPIの著作権とかいう謎ワードで潰しにくるだろうけど >>512
Java Applet がブラウザで動いたお陰で世に広まりはしたが初期化で時間が掛かりすぎ、そのため Java は遅いという印象もより多くの人に広めることになってしまったのではないかと思う。
そして確か1998年にはLinusがJavaは死んだと言っている。20年前だ。確かにPCのデスクトップ環境では死んだも同然だった。
まあしかしLinuxもクライアント環境としては市場に受け入れられず死んだも同然で、みんなしてサーバや組み込み機器に逃れた感じではある。
クライアント環境でのLinuxとJavaはAndroidとしてスマホに組み込まれなければこんなに広まることはなかったかも知れない。 ロンドン証券取引所で大失敗したドトネトは信用できぬ >>518
20年前っていうとダイアルアップ主流の時代だっけ?
時代を先取りしすぎたんだなぁ
どっちにしろセキュリティ的にだめな気がするけど 失敗例でいうとJavaはあちこちで失敗してるね
日常すぎてわざわざ話題にならんけど >>522
NASDAQはJavaで動いています
Javaの失敗例なんて聞いたことないわ Write once, Bug anywhere.
OS毎にバグの入り具合が違う。 初心者質問で恐縮ですが、世間様では初期化不要なコンストラクタも一応書くのでしょうか?省略するのでしょうか?
派遣の年上の人からルールだから書けと言われ気になりまして >>523
だからわざわざ話題にするほど珍しくないってことだよ Javaの有名な失敗例を一つでもいいから挙げてみろよ >>527
IBMはセールスフォースでも裁判沙汰だから
言語の問題じゃない、マネジメントの問題 伊達に30億のデバイスで動いてるわけじゃねえぞ
てめえらあんま舐めてっとあれだからな >>525
一般的には書かなくていいものは書かない >>525
「初期化不要」とはどういう意味?
フィールドが一切なく、static(みたいな)クラスのことか?
デフォルトコンストラクタのことなら、「初期化不要」とは言わないぞ。 なんとかぎゃふんといわせたい(笑)
>派遣の年上の人からルールだから書けと言われ気になりまして 8月からIT企業に入社します
研修があるので、早めに予習しておきたいのですが
開発環境をどうしたらいいか困ってます
VBAでjavaをすると電話で聞いたのですが
見たところjavascriptでしか見たらず、開発環境はイクリプスでしかネットでも記事が出てきません
VBAで開発環境にしている方はどのように行ってますでしょうか >>537
>VBAでjavaをする
それは一体どういう状況なのか?
何か聞き間違えていないか?
それと、開発環境は君が決めても構わないのか?
普通は会社で指定されてたりしないか? >>539
予習するだけです
C#は余裕してるので問題ないんですが
そもそもVBAでjavaを作動させることはできるんでしょうか? VBAからJavaで作ったアプリを起動する…とかなのか?
VBAやるならMSExcelが必要 >>533
はいフィールドのない小さいクラスのデフォルトコンストラクタです
アクセサメソッドみたいに丁寧に書くのがしきたりなのか世間様の動向を知りたく >>542
仕事の規模にもよるが、ソースコードを保守しやすくするためにコーディングの方法が決められている(コーディング規約がある)現場が殆ど
ちゃんと統一されてるなら従ったほうが無難
仮にバグが発生してあなたの追加部分が規約に従ってない場合、面倒くさいことが発せあする可能性がある >>543
なるほど、そこはルールに従うのが無難ということですね
参考になります >>542
フィールドがないならインスタンス生成を禁止するためにprivateコンストラクタを必ず定義すべきなんじゃないの? そんな細いことまで規約で定めている現場はソフトウェアの品質が低い
俺の経験ね
品質管理担当とか専任者がいても規約に沿っているかという杓子定規な現場が多く
規約化できないビジネスロジックの妥当性はなぜかチェックしない傾向あり
しょーもない規約がなる揺らぎを許容する現場は
チェックリストに沿った均一的な検査はできないものの
分かっている人がビジネスロジックを査読しようとする傾向がある ルールに従っている限り、問題が起きた場合はルールを作った奴の責任
これ典型的なSI業界の考え方
上から下までSIに身を置く限りは極めて重要な大原則ではあるが、悪く言えば責任逃れだ
この例に限って言えばわざわざ破って余計なリスクを負うほどの価値があるとは思わないが、今後同様に自分で責任を負わないという判断をするときには
それがエンジニアとしての自分の価値を下げているということを頭の片隅に置いておいたほうがいい
どんな業界でも、本当に上へ行く奴は自己責任でやるもんだ >>544
俺も大体>>546と同じ考えだから「規約!」「厳守!」という凝り固まった考えにはならないように注意な
チェックする側が知識ない人って事もあるから余計に規約に従ってるか重視するんじゃないだろうか >>544
後あれだ
なんでこんな規約があるんだって考えるのも最初は勉強になるぞ
件のデフォコン必須!とかはリフレクション多用してて落ちたことがあったからそのまま規約になった〜とか理由があるかもしれない javaはもうwebの世界でしか生きていけないのかな >>550
kindleもandroidもJavaで動いてるし
ただ単にwebアプリが増えてるだけだと思う webに向いてるというよりはwebの世界が広がっただけ >>547
話を一般化しすぎじゃないか
SIを嫌ってるだけだろ スカラより簡単ピエチピより厳密
アプリサーバがたくさんあって人材も豊富
作っているのは世に名も高きオラクル
Java最強伝説 >>551
Andoroidのjavaはもう終わりかな Javaの知識があってのKotlinだけどな。
Nativeは知らんけど。 >>557
終わらぬだろ、終わらぬよ
終わりません! googleはjavaでオラクルに一兆円の損害賠償払うのにjavaは捨てられないのかな オラクル社長はドラ息子に巨万の富を残してるのにまだ足りないみたいね
andoroidの巨額提訴にjava有償化に >>546
良いこと言うね
Java使いにもまともな人居たんだ Java使いに「も」って、まともな人が居ない事前提?
36歳がそうだからと言って全体を括るのは乱暴かと javaの致命的に糞な所を3つ挙げるとしたら何?
おまけで他言語よりこここだけは良いということ1つ
有料化になること以外でよろ 糞なところ
・貧弱なジェネリクス、極めて非直感的なワイルドカード
・直交性が目的化していて利便性が犠牲になっている標準ライブラリ群
・プログラマの平均スキルの低さ
良いところ
・安い単価でプログラマを大量に調達できる 致命的と思うところはない
だって致命的な欠点があったらJava使うのやめてるだろ
Javaの良いところはクラスライブラリと開発コミュニティ
Java自体の言語仕様は今となっては秀でている点はなく後発言語のほうが優れている
しかしJavaの豊富なクラスライブラリに多言語が追い付くの容易ではない
Java開発者は標準クラスライブラリに沿って・似せてクラス設計する人が多い印象
そのため外部ライブラリを見つけてきてもインターフェイスに一貫性があり使いやすいことが多い
昔、Perlでもモジュールを集めるCPANというものがあったけど一貫性がなくモジュールごとに作法がバラバラだった
Javaの良さは世界中の開発者が設計ポリシーを共有していて作られたライブラリが相互運用しやすいエコシステムにある 変数宣言が冗長すぎ
Date date = new Date()
Date型って最初に宣言してんだからnewもDateで基本問題無いやろ >>571
Object o = new String() ;
ってやりたいこともあるから。 moduleが難しすぎて突破できないから
Java8で行くお! そういや最近宣言と同時にnewってあんましてないな >>577
相容れないなんてことは無いだろ。
限られたシチュエーションで使えないだけだ。 >>572
それならそういうときはそれでいいけど、
Date date;
みたいに省略したときは自動でDateをnewしてくれ Kotlin使えばよい
後から作った言語なのでそういう細かいことは解消されている >>579
とてつもなく浅い知識で批判とか恥ずかしくないの? >>582
ははーん、さてはおめー何もわかってねーな 「ははーん、さてはおめー何もわかってねーな」という台詞を言ってみたかっただけの人か? 下記ブログの例題がEclipseでもpaiza.ioでもコンパイルエラーになって色々試したのですが解決出来ないので原因と回避策を教えてください
Eclipseでのエラー: 型の不一致: Object から int には変換できません
paizaでのエラー: Object cannot be converted to int
https://nompor.com/2017/11/16/post-1118/
ブログのページ最後にある例題サンプルです
「Iteratorで全要素アクセス」
18行目
int data = it.next();//次の要素を取得します。
---
例題そのままをコピペしてもエラーになるので自力解決が出来なくて困っています >>589
Iterator it = arr.iterator();
これを
Iterator<Integer> it = arr.iterator();
こうや! >>590
それはやったのですが、エラーになりましたね
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
integer を型に解決できません 自己解決しました
エラーのpopアップに表示されていたキャストをすれば解決しました
もしかしたらブログを執筆していた頃には問題の無かった書き方が厳密になったとかなのでしょうか?
原因が例題書かれた方のミスなのか仕様変更なのか意味が分からないままエラーだけ出なくなった状況ですが次へ進みます。
ありがとうございました
18行目(変更前
int data = it.next();//次の要素を取得します。
18行目(変更後
int data = (int) it.next();//次の要素を取得します。 そもそもなのですがIteratorって使いますか?
他にも配列などの操作方法あるようですし
どうしてこんな面倒な書き方で参照したりするのか疑問です >>589
https://ideone.com/qLRSSK
Object を Iterator にキャストしてオートボクシングを利かせてみた >>592
それは解決になってない。
キャストで逃げたら、ジェネリック使う意味がなくなる。 >>594
int data = (int)it.next();
int data = (Integer)it.next();
これどちらもオートボクシングが行われてますよ
プリミティブ型で格納されてるわけじゃないっすから
オートボクシング使わずに書くならこう!
int data = ((Integer)it.next()).intValue(); >>597
13行目
Iterator<Integer> it = arr.iterator();
自分<integer>でミスタイプしてましたねすみません
>>598
勉強になります
>>これどちらもオートボクシングが行われてますよ
>>プリミティブ型で格納されてるわけじゃないっすから
まだ意味がわからないので調べてみます
>>596
>>キャストで逃げたら、ジェネリック使う意味がなくなる。
まだ意味がわからないので調べてみます
ありがとうございます >>589
の原因と教えていただいたことを自分なりに調べた結果のまとめと確認です
(連投すみません
13行目(変更前
Iterator it = arr.iterator();
これがジェネリクス総称型として型を指定していないのでObject型となり次の
18行目(変更前
int data = it.next();//次の要素を取得します。
ここでInt型にObject型を代入しようとして型不一致で代入できないとのエラーが出ていた
解決策としては
13行目(変更後
Iterator<Integer> it = arr.iterator();
明示的に<Integer>を宣言することで次の
18行目(変更前
int data = it.next();//次の要素を取得します。
ここで代入可能となったが
これはInt型とInteger型のオートボクシング機能が働いている >>600
これで合ってますか?
最後の「これはInt型とInteger型のオートボクシング機能が働いている」のかちょっとまだ不安です
キャストはしてないけどオートボクシングが働いてたら意味がない?
このあたりがまだよく理解出来てないと思います
>>598 これをふまえると・・・
>>オートボクシング使わずに書くならこう!
>>int data = ((Integer)it.next()).intValue();
13行目(変更後
Iterator<Integer> it = arr.iterator();
18行目(変更後※
int data = it.next().intValue();//次の要素を取得します。
※ここまでやらないと意味が無いのでしょうか??
一応どちらも正常に結果出てますが内部的に違いがあるのか不安です? >>601
オートボクシングはプリミティブ型とラッパークラスの変換を
自動で行う仕組みのことで
毎回、↓こう書くの面倒だよね
int data = it.next().intValue();
じゃあ↓こう書けるようにしよう
int data = it.next();
ということで導入されたものだから積極的に使ったら良いよ >>602
Iterator<Integer> it = arr.iterator();
int data = it.next();
オートボクシングは便利機能なので使ってOKで
.intValue();が自動的に省略されてるだけで結果は同じ
これで解決ってことですね!納得しました!
ありがとうございました だね
Integerからintへの変換ではインスタンス生成されないし
intからIntegerへの変換でも数字が小さければインスタンスは生成されない
インスタンス生成を抑えるために小さな数字はあらかじめIntegerオブジェクトが作られていて使い回されるようになっているから
値オブジェクトみたいな感じ
コスト気にするよりオートボクシングを積極的に使って可読性の高いコードを書こう >>600
ジェネリクスで型を指定すれば、型が間違ってたときにコンパイルエラーに
なってすぐに気づくことができるのだけれども
ジェネリクスで型を指定しないと、型が間違っててもエラーにならないのよ
実行してデータが処理されないとコードが間違ってるかわからぬのよね
エラーが起きないデータもあったりするとデバッグが超大変
ジェネリクスが使えるときは型を指定して使ったが良いよ >>604-605
>>コスト気にするよりオートボクシングを積極的に使って可読性の高いコードを書こう
>>ジェネリクスが使えるときは型を指定して使ったが良いよ
質問で丁寧に回答していただきさらにアドバイスまでいただき感謝です!
勉強になりますありがとうございます! >>589
それ原因が分かったぞ。(勘のいい奴なら既にわかっていると思うが)。
そのブログのページのソースのこう表示されてる個所あるだろ。
Iterator it = arr.iterator();
この部分の HTML のソースを見てみたらこうなってた。
Iterator<Integer> it = arr.iterator();
しかしこの通りに表示させたいなら HTML 文書の中ではこう書かねばならない。
Iterator<Integer> it = arr.iterator();
他の同じような記述の個所はこういう変換をやっているのにこの部分だけ忘れており
<Integer> 部分がブラウザによって HTML のタグと解釈されて丸ごと表示されない
状態になっていた、ということ。 >>607
よく見つけられましたね凄いです!
どなたかがブログへご指摘されてくださったようで確認しようと再度HP確認したら既に修正されていました!
あまりの速さに2度驚きました
この質問スレにもブログにも勉強するのにとても助かっています
いつもありがとうございます ./__.))ノヽ
.|ミ.l _ ._ i.) わしが指摘した
(^'ミ/.´・ .〈・ リ
.しi r、_) | ______
| `ニニ' / | | \__\___
___.ノ `ー―i´ | | |= |iiiiiiiiiii|
/⌒ヽ \____/\ | | | =. | !!!!!!!|
| ヽ____| \__. __ | | |三 |_「r.、
| // // ̄.\ //⊃ヾ) |__|_/( ) ̄ ))
ヽ ______//r_/| |.||⌒ヽ〜〔 ̄ ̄! ̄ ̄ ̄/ ̄ ̄\(( 定義されてるディレクトリ配下のログが誰かに開かれてたら何もしないって処理作りたいんですけど、ファイルが誰かから開かれてるかを調べる方法ありますか? 自分でそのファイルを読み取り排他で開いてみるしかない
失敗したら他のプロセスがオープンしているということ
排他(副作用)なしでファイルのロック状態を知る方法はない >>614
ありがとうございます。
明日試してみます! >>612
Linux の場合は fuser コマンドを使うと指定のファイルをオープンしているプログラムのプロセスIDが分かる。
何も出力がなければ開いているプロセスはない。
他のUNIX系OSにもこのコマンドはあるかも知れない。Windows の WSL にはこのコマンドはあった。
その他のOSではどうやるか知らないが、もし fuser コマンドがあるのならそれを使えば同じようにできるんじゃないかと思う。
Windows の場合は他のプロセスが開いている最中にリネームしようとするとエラーになるそうなのでこれを利用するという手があるようだ。
但し同じ方法はOSが違ったら使えない(例えばLinuxやUNIX系OSでは使えない。WSLはわからない)。
https://code.i-harness.com/ja/q/153800 paiza.ioってローカルPCのファイルやフォルダ操作するコードは実行出来ないですか? >>614
ログを開くアプリケーションによってはロック状態を認識できませんでした。
FileChannelクラスのtryLookメソッドを使いました。
OSがcentosでLibreOfficeで開いてるときはロック状態でしたが、geditで開いたときはロックされてなかったです。
何か初心者がおかしやすいミスとかってありますかね。
もう諦めてるんですがgeditが特殊なんですかね gedit以外のテキストエディタでも同じでしたね
ロックの確認できません。 普通はしないよ。
一々ロックしてたら、たとえばGitなんか阿鼻叫喚の地獄になる。 >>619
UNIX系OSではオープンしただけでは普通はロックまで掛からなくて、別途 flock() したり fcntl() でロックするようになっている。なので本当に必要な場合しかロックしないのが普通だ。
オープンしてるかどうかだけ確認したいなら fuser コマンドや lsof コマンドを使った方が楽だ。
Linux限定で良いなら /proc ディレクトリ以下を自分で探ってもできるけどね。
それだと多分本当にLinuxのみになるし fuser や lsof も Linux 用なら中で同じことしてるだろうから任せた方が良い。 >>623
色々教えて下さりありがとうございます。 javaのバージョンって1.8だったり8だったり表記が複数あるようですが何なんですかこれは >>625
Javaのバージョン
https://so-zou.jp/software/tech/programming/java/introduction/version/
意外と知らないバージョン表記・数字の豆知識
http://www.atmarkit.co.jp/ait/articles/1003/26/news106.html
理由はよくわからないが、やはり営業的な理由なんじゃないだろうか。
バージョン番号が大きい方が他の製品よりも良いものであるかのような印象を与えられるから。
Perlなんかは(フリーソフトで誰にも売る必要がないためか)これの逆をやってしまい、大きな変更が
あったのにほんのちょっとしかバージョン番号を上げなかったためにほとんど違いがないと誤解
された事があり、それでその後はバージョン番号の振り方のルールを変えた。 >>618
ブラウザから、自分のPC 内にアクセスできたら、大変!
何でも盗み放題w
すべての情報が、どこかのサーバーに送られてしまう eclipseをphoton にしてワークスペースをそのまま引き継ごうとしたら実行できなくなっちゃった。どうすればいいか教えてちょ eclipseをphoton にしてワークスペースをそのまま引き継ごうとしたら実行できなくなっちゃった。どうすればいいか教えてちょ >>631
${HOME}.eclipse
を削除してみたらどうだろ
workspaceをバックアップして
空にして、インポートで取り込むとか 初歩的な質問になるんですが異なる2つのクラスで1つの値を共有したいときってどういったやり方あります?
class a
String str
class b
a.setStr
class c
a.getStr
大分省略してますがこんなことをやりたいです。
実行順はbで更新した後にcで取得 クラスbとcのメンバにaクラスのフィールドをもちbとcのコンストラクタでaを設定する class b
a a
public b
a = new a
a.set
class c
a a
public c
a = new a
a.get
みたいな感じですかね?
この場合ってbとcでそれぞれ作ったaのインスタンスって別物扱いになりません? >>637
どんな感じです?
できたらイメージ貰いたいです jdk11 ea でローカルswing アプリテストしたいのですが、
・jdk11 ea openjdkを取ってくる
・展開して適当なパスに置く
・path/to/openjdk/bin/java -jar myapp.jar
で起動出来るのでしょうか? 通信の優先度を決める事はできますか?
でかいファイルを送受信するけど、他のアプリに影響を出したくなくて、
低い優先度で送りたい。 プロセスの優先度は知らんがスレッドの優先度なら
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html#setPriority-int-
// コードが走ってるスレッドの優先度を変える
Thread.currentThread().setPriority(priority); // 0(MIN_PRIORITY) ~ 10(MAX_PRIORITY)
// 生成したスレッドの優先度を変える
Thread thread = new Thread(runnable);
thread.setPriority(priotrity);
thread.start(); 通常プロセスはOS側で管理するべきと思ってるからあまり考えたことないな
どうしてもやりたいなら通信を管理するプロセスを作れば良い
つまり>>643 アンドロイドアプリを作りたいのですが
数か月の間、メンターになってくえれる人を探そうと思ったら
どんなサイトで募集すればいいのでしょうか? メンターなんて言葉一般的に使うの?
自己啓発セミナーみたいでいやだなあ
あ、ボクはアナルオナニーインストラクターです 基本料金1か月3万円でお願いします
あとはオファーにより別途請求というシステムで マンツーマンで教えるとなると時給の最低ラインは3000円だから
月3万円だと月10時間、1日15分ぐらいだな 専属の人を雇うとなると家庭教師雇うみたいなもんだから高くなるのではないか?
本やネットで調べながらでも何れはできるようになる事についてそこまで投資する必要があるのか?
何らかの期限があるなどして早く覚えないとまずいということか? synchronizedListはイテレータがスレッドセーフじゃないといいますが
for(int i=0;i<list.size();i++)
Element e = list.get(i);
もしsizeの増減が無い場合、こんな書き方はスレッドセーフに全要素にアクセスできますか? できません
sizeを確認してからgetするまでに要素数が変化する可能性を排除できていません それはサイズが既知でgetしか使ってないのと同じで安全
ていうか要素が変化しないならスレッドセーフではないLinkedListでさえ安全に使えるでしょ https://github.com/OpenHFT/Chronicle-Network
ここに出てくる"Wire"ってどういう意味ですか?
WireTextだの、WireEchoだの。
たぶんプログラミング界隈の用語だと思うんですが ネットワークを繋ぐ線の概念なんじゃないかな
知らんけど、それっぽいと思った meta -> meta.write(() -> "tid")
こういう記法は何を意味しますか?
(arg) -> code
みたいなのはラムダ式の説明で出てきますけど、metaはカッコがついていません Wire Message = 電報 ⇒ 通信されるデータ
WireType.TEXTとかWireType.BINARYがあるから、たぶんまさにそれだけの意味。
Network = Wireくらいの意味でこの人は使ってそうです。 >>660
引数が1つのときはカッコを省略できるんよ 数千もの通信を同時処理する高性能なネットワークライブラリを探してるんですが、
何が良いんでしょう?Nettyは内容が難しすぎるんですが・・・。
難しいというか、必要としてるのは単にバイナリを送受信できればいいだけなので、
無駄に高機能過ぎる。
しかし、KeepAliveとか、サーバーが常駐してメッセージを受信してイベント起動、
とかは必要で。ネットワークライブラリの中身なにやってるかあまり詳しくないんですが。
Chronicle-Networkも良く分からない。
// the tid must be unique,
final long tid = tcpChannelHub.nextUniqueTransaction(System.currentTimeMillis());
System.currentTimeMillis()を使ったら、複数クライアントにおいてtidが重複するけど、
それでユニークといっていいのかどうか。
ちょっと情報が少なすぎるのでこれも無理そう。高速らしいんですが
Kryonetは、性能不足ですね。アップデートもされてません。
やはりNettyを頑張るしかないかもしれません。 >This comes at the cost of scalability for large number os connections. In this situation, this library should perform at least as well as netty.
これは多数のコンピューターからの同時接続ではNettyと同等の性能しかでない、
ということでしょうか?
想定してるのは1コンピューターとの高速な通信ということでしょうか。 やっぱり高性能なJavaのネットワーキングライブラリはNettyが有力のようです。
あと、Wire Messageは、たぶん「頭4バイトにINT入れて、次8バイトにLONG入れて」みたいな
バイト配列にデータを敷き詰めてく感じの行為をWireというのだろうと。 PooledUnsafeDirectByteBufとは何ですか?
Handlerでbyte[]やByteBufなどクラスを限定できますが、
単にbyte[]を使うことと比べてByteBufやPooledUnsafeDirectByteBufは何かメリットがありますか? どうやら単にbyte[]を送りたい場合でもByteBufを通すのが普通みたいですね
でもそれだとByteBufを作るときもそこからbyte[]を読み取るときもコピー操作があるようで遅そうです
通信に比べればメモリ操作による遅れは微々たるものかもしれませんが
Nettyより高速と謳うライブラリがありますがやはりバッファ周りの問題を指摘してましたが
これですかね ソース読んではいないけど、byte[]のWrapperなんじゃないの?
渡されたbyte[]を丸々コピーするような、あなたのような超初心者な実装はしていないと思うよw
そもそも、byte[]で送るといっても、自分でBufferのサイズを決めたり、通信環境を考慮したり、いろいろやらなきゃいけない。
だから、そういった最適化をByteBufのサブクラスたちは提供してくれているのでしょう。 こういうコードがあった時、logが呼ばれてもデバッグモードでなければ
意味が無いけど、AnyHeavyMethodは計算されちゃうんでしょうか。
それとも最適化で実行されませんか?
//in some method
log(""+AnyHeavyNoEffectMethod(o));
public void log(String s){
if(isDebugMode())
System.out.println(s);
} JITコンパイラは副作用がないことをどこまで調べるんだろうね >>671
isDebugModeの返す値が定数で、かつそこに登場してる全てのメソッドがインライン展開されれば実行されないんじゃない?
Javaって基本的に大規模アプリケーションに最適化されてて、局所的な速度よりも全体的な安定性やメモリ消費量を重視する傾向があるから、
あまり最適化には期待しないほうがいいよ AnyHeavyNoEffectMethodが重い処理で、Java8以降ならラムダ式使うんじゃね?
log(() -> "" + AnyHeavyNoEffectMethod(o));
public viod log(Supplier<String> s){
if (isDebugMode())
System.out.println(s.get()); // ここでAnyHeavyNoEffectMethodが実行される
} いいね。そっくりそのままDecoratorにもなってるからすっきりする。 それJavaの場合はラムダ内で外のミューダブルな変数を参照できないから微妙 どーーしても必要なら、観測したい変数をHeapに逃がせばいい(オブジェクトにぶら下げるとか)わけだけど。
Functional信者は怒りMaxだろうな。 >>678
そう思うだろ?
これでコンパイルエラーなんだよね
int x = 1;
log(() -> x);
x += hoge();
log(() -> x); >>679
完全に使い方の問題だし、マルチスレッドの問題もあるし。
JavaScriptとかできちゃうけど、それやってどうなってもしらないぞ、と。 ログなら普通にある状況だろ
それを使い方の問題というならラムダをログに使うという>>674の発想が間違ってるわ ないよ。AOPとかDecoratorとか、ラムダが登場する以前からずっとやってきている話。
ラムダはそれをちょっとエレガントにできるようにしただけ。
だから、使い方の問題なんだよ。 >>684はミュータブルな変数を一切ログ出力してないの?
自身を持って無いと言い切れるなら偉そうなこと言っていいぞ ちなみにログ出力にJavaのラムダが適していないという話であって、ラムダがミューダブルな変数を参照できるべきだなんて誰も言ってないけど
>>684は勘違いしてる 簡単な実験コード書いてみたけど最適化されませんね。
private static final boolean debug = false;
@Test
public final void testOptimization() {
final long start = System.currentTimeMillis();
log(anyHeavyNoEffectMethod() + "");
final long end = System.currentTimeMillis();
System.out.println((end - start) + "ms");//50ms
}
private static final void log(final String s) {
if (debug)
System.out.println(s);
}
private static final long anyHeavyNoEffectMethod() {
final Random r = new Random();
long total = 0;
int loop = 1000 * 1000;
for (int i = 0; i < loop; i++)
total += r.nextLong();
return total;
} ラムダ式の方はanyHeavyNoEffectMethodが呼ばれません。
しかし、指摘のようにミュータブルな変数を渡せません。
log()の実装を二種類用意して使い分けていくのが妥当な気がします。
デコレーターパターンで解決できるんですか? このような頻出のパターンについてJITは最適化すべきだと思います。
たぶん、それが一番妥当な解決策です。
副作用が無い事を確認する機能は、JITに既にありそうなものです。
少なくともある程度の範囲で副作用が無い事を確認できるはずです。
どうでもいいんですがこんなパターンにはJITは最適化を見せました。
for(){
list.add(i);
list.remove(i);//追加したものを即削除する
} オーバーロードでいんじゃない?
ログの出力ってきほんStringじゃん 匿名クラスとかでスタック領域の変数を参照できますが、匿名クラスのオブジェクトが破棄されるまでそれらは生存するということですか?
public void method(Observable obs){
Object o = ...;
EventHandler handler = new EventHandler(){
@Override
public void handler(){
System.out.println(o);
}
}
obs.setOnAction(handler);
} >>691
気のせい
実は無名クラスの中に隠しフィールドが生成されてoの値をコピーしている
ちなみにoは暗黙的にfinalになっており、後でoを書き換えようとするとコンパイルエラー
そこまでするならScalaやKotlinやC#みたいに最初からoをヒープに作っちまえよと思わなくもないが、
この中途半端な仕事かJavaクォリティ >>691
そうなるよ、参照関係を図で表すとこうな感じでしょ
https://light.dotup.org/uploda/light.dotup.org543719.png
オレンジが変数
緑がオブジェクト
メソッドを抜けてローカル変数o, handler, obsがなくなっても
Observable → EventHandler → Object
の参照は消えない
引数に渡してるObservableはメソッドの外で
変数から参照されてるだろうからメソッドを抜けても
破棄されないよ >>693
691が気にしてるのはローカル変数o自体の寿命でしょ
実際には無名クラスの外側にある変数oとhandlerの中で参照してる変数oは別の実体だから問題ない、が答えだよ
後者は>>692の通り無名クラスの隠しフィールドであり、インスタンス生成時に値をコピーしている
この仕様だと、後で内側または外側でoの値を書き換えてしまうと辻褄が合わなくなるから、
oを後で書き換えてはいけないという制限が必要なの ここを見るとRSA系は2048までしかありません。4096等だとRSA鍵による暗号化ができないということですか?
その場合、非標準のライブラリ等で解決できますか?
https://docs.oracle.com/javase/jp/8/docs/api/javax/crypto/Cipher.html
RSA/ECB/PKCS1Padding (1024、2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024、2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024、2048) 強度の強い暗号化は輸出制限あるから気を付けてね。
うっかりノートPCにセットしたまま他国へ持って行こうとするとバレた時に大変まずいことになるかも知れない。 jre1.8の最近のバージョンでデフォルトで強度無制限になったようです。
とはいえ、java8の仕様上、2048までしかサポートする必要は無いようです。
実装によってサポートしているかもしれません。 このようなコードがあった場合、tは生存しますか?
tはどこからも参照されてないとします。
//in some method
Thread t = new Thread(){...};
t.start();
return; >>699
試してみた
https://paiza.io/projects/PxoO2-fLSd_KfpwF5B3prA
結果からわかることは
・メソッドを抜けてもスレッドが終了するわけではない
・スレッドが終了しないならばプロセスは終了しない
・ローカル変数がなくてもスレッドを取得できる
作成したスレッドのオブジェクトはどこかに保持されるみたいね
tは生存します、が答えっす threadは、main thread同様garbage collectionのrootとして扱われるそうなので、生存しまする Eclipseとかいう汚物にJavaFXを入れたく思いマーケットプレースでjavafxで出てくるe(fx)clipseをインストールしようとしたところ長時間待たされた挙句にエラーが出ました
どうすればいいでしょうか? >>704
JavaFXは廃止されたから使っちゃダメ 厳密には廃止ではなく分離とされてる。
あとJava8が2020年までサポートだから、2020年までは1.8系のjreがあれば使える。 そもそもJavaの未来はどうなるのか。JREが有償化される。
OpenJDKはインストーラや自動アップデータが提供されるのか。
JavaFXは単体のライブラリとして独立できるはずだが、誰かがやるのかどうか。
現状だと、何やら面倒なインストール手順が必要なようで、
デスクトップアプリに使われるであろうJavaFXにとって致命的なはず。
mavenとかを使ってアプリに気軽に同梱できるものになればいいのだが。 JavaFX will continue to be supported in the future by the company Gluon as a downloadable module in addition to the JDK. このスレではJavaFXをオヌヌメします
JavaFXをオヌヌメしないのはoracleのコウサクイン JavaでデスクトップのGUI環境自体どうなんだ? downloadable moduleってなんだろうな。
そもそも後方互換性を捨てて高速リリースとか言ってるのが怖くて仕方ない。
開発者が最新版に対応したって、エンドユーザーが最新版を持ってるか分からない。
どのバージョンに向けて作ればいいんだ? いやクロスプラットフォームGUIという概念は重要でしょ。 Java8+JavaFXは2022年までサポートされるってかいてあるな
だからもう少し先の話ではあるし、人気のある環境だからそれまでに整備されるだろう。 AndroidでもJavaFX動くみたいだし、クロスプラットフォーム性という面で
やはり一番優れてるよJavaは
ちなみにJavaやKotlinのコードをネイティブコードにするコンパイラがあって
iPhoneでもJavaやKotlinのソースコードで動かせるみたいだぞ
ちょっと前までiPhone用のJVMもあったんだけどな https://www.oracle.com/technetwork/jp/java/eol-135779-ja.html
Java8 個人ユーザーの公式アップデート終了日 2020-12
このときまでにOpenJDKやGluonのインストーラが登場していなければ困る。
そしてそれが自動アップデータを搭載していなければ。
ところが自動アップデータ搭載されてても、後方互換性を捨てたアップデートを勝手にされると困るw
困りまくりだ OpenJDKに自動アップデータが提供されたとする。
OpenJDKのアップデートがアプリのアップデートを先行する
→勝手に互換性を捨てたアップデートが来てアプリが動かなくなる。
アプリを最新版に対応してリリースしてもアプリのアップデータは動かないw
アプリのアップデートが先行する
→エンドユーザーのOpenJDKが古くて動作しない
だから、互換性を捨てて高速リリースとかいってるのはほとんど意図的なJava界隈への攻撃。 一番欲しいのは、Java8のサポート継続&自動アップデート継続&互換性の維持。
APIを変更するならdeprecatedの期間をある程度とってくれないと無理。
高速リリースがうれしい人が居るのか? .netと同じ道を歩んでるようにみえて
microsoftの.netはMITライセンス OpenJDKのリンク例外つきGPLは十分だろ。
OpenJDKにおいて、互換性を考慮したアップデートが行われ、自動アップデータが提供されるか。
GPLだから誰でもそのプロジェクトをやれる。 >>720の解決法はこうだ
OpenJDKの次期バージョンで現在のアプリが問題を起こすかチェックする。
→問題があるならOpenJDKがアップデートされる前にアプリをアップデートしておく。
そのアプリの修正は、現在のOpenJDKと次のOpenJDK両方で動作する事を確認する。 もうJavaで書いたアプリがあるし、Javaに慣れてるから。
それに、.NETに移ったとして、同じ事が起こらない保証があるのか?
実は俺はこの問題に対する根本的解決策を知ってる。うまくいくかは知らないが
それも含めて考えると、やはりJavaを続けようと思える。 リリース前でもビルドが公開されてるだろうと思ったけど。
プラットフォーム系でプレビューリリースとかアーリーアクセス的なものを提供して
予め対応してもらおうというアイデアは一般的なもので、オラクルがOpenJDKをサポートするなら
たぶんやるだろう、というか既にやってると思うけど。
JDK 11 Early-Access Builds
http://jdk.java.net/11/ 大前提の認識が間違ってるぞ。
Java11以降においては無償のスタンドアロンなJREは無くなるんだよ。
デスクトップ用途なら開発者自身がアプリにJavaランタイムを組み込んで配布することが推奨される。
そして、OpenJDKはエンドユーザーが自分で個人端末にインストールするようなことを想定したものではない。
開発者がシステムに元々入っているのOpenJDKに依存してよいのは、業務システムなどで
開発者が完全に実行環境のOpenJDKディストリビューションのバージョンや構成を制御できる場合のみだ。 https://docs.oracle.com/javase/jp/8/docs/technotes/guides/deploy/self-contained-packaging.html#A1307236
>自己完結型アプリケーション・パッケージは、プラットフォーム固有で、ビルドしたシステムと同じシステムにのみ作成できます。
各プラットフォーム向けにビルドしなきゃいけないようだ
>自己完結型アプリケーションには、自動更新の組込みサポートがありません。
アプリのアップデータで簡単にアップデートできるなら問題ではない。
アプリへのJREの組み込み手段がサポートされて、
そこでJavaFXがサポートされるなら、問題無い気がする。
JavaFXはそこでサポートされなきゃ意味が無いし。 >Java SE 8は、デスクトップ展開を対象とした最後のJava SEリリースです(Java Web StartやスタンドアロンシステムJREなど)。
こういう文言もあるから、Java11以降、OpenJDKでJavaFXみたいな
デスクトップ展開がサポートされるのかどうか。Java8最終版を組み込んで使い続けるか
Gluonに期待するか。 初心者だけどJavaFXでFTPサーバーとやりとりして追加したり一覧表示してダウンロードしたりするwindows用アプリを作りたいんだ
apache commons netというライブラリを使ってやろうと思うけどviewにファイルを入れるにはどうすれば良いんだろう?
入れた後はjavaからviewをインスタンス化してその中の変数の値(ファイルのパスかな?)を取り出してって感じでなんとかなりそうだけど...
本当に何も分からない状態で、何か良い勉強方法は無いかな?
FTPサーバーについても素人に近いよ そういや今はJavaは標準のライブラリでFTP接続してアップロードとか楽にできるクラスあるのかな?
ダウンロードだけはURLクラスでできるの知ってるが。 viewにファイルを入れるってなに?
TableViewとかTreeViewクラスにアイテムを表示する方法ならチュートリアルあるでしょ ああ解読できたかも
要するにGUIにアプリから値を設定、ないし
アプリからGUIに値を設定するにはってことでしょ?
てかGUIってそういう使い方しかないし。
そんなのぐぐればいくらでも出てくるのでは。
https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/table-view.htm 訂正
人→GUI→アプリ
アプリ→GUI→人
この流れがやりたいってことだとおもわれる >>739
そうそんな感じ
全然イメージ出来ん
どうやって起動させるの?
でも公式ドキュメント見やすそうだねありがとう Project Loomを急ぐんだ!
はやく第一級継続を書かせるんだ。
どうか限定じゃありませんように イメージできんってもなあ・・・
GUI部品クラスが提供されてて、何らかの値の設定方法、取得方法があるだけじゃん。
StageやSceneクラスという、GUI全体を意味するクラスも提供されてる。
そこにGUI部品を積み上げてくだけだぞ。 起動って・・・IDEのプロジェクトアーキテクチャの選択でfx系選べば何もしなくても
GUI立ち上がるでしょ >>743
webアプリならサーバー起動させてコントローラにある接続用のurlをブラウザに入れれば始めれるじゃん
これはメイン関数なくても行けるんでしょ?起動ボタンあるの? 何かの障害持ちだと理解の過程が通常と違う
彼らにネットは不向きだと思う なんというか、Windowsならftpアプリなんかわざわざ作らんでもWebブラウザやエクスプローラでURL指定して開いちゃえばいいような気がするが・・・
あ、とにかく作ってみたいのか。 >>747
ピュアな ftp ならプロトコルも対して難しくもないからネットワークの練習にはちょうどいい gluonとopenjfxが両方javafx11ビルドしてるけどこれ同じバイナリだろうか? >>5
8のreplaceは正規表現を使ってて馬鹿みたいに遅いから気をつけろ >>749
JavaFXはもうJavaの一部ではないのでこのスレのスコープ外だよ
専用スレか公式フォーラムで聞きなさい >>750
それはreplaceFirst()だろ 調べてみた
@since 1.5
replace(CharSequence target, CharSequence replacement)
@since 1.4
replaceAll(String regex, String replacement)
@since 1.4
replaceFirst(String regex, String replacement)
replaceは正規表現使ってなかった 資格に関する質問ってしてもOK?
Oracleの「Java SE 8 Silver」の試験勉強をしようと思うんだけど、参考書に迷ってる
4月からjavaを学習してる程度の人が「徹底攻略 Java SE 8 Silver 問題集」をやるのは難易度高い?
書いてて宣伝っぽい文章になったのはごめん 有料だから注意しろよ
無料で落とせるやつはちゃんとLAに「評価と開発以外の目的に使うな」と書かれてる
そんな大事なことをダウンロードページに明記してなくてLA読まないと分からないようにしてるのは流石天下のオラクル様ですわ OpenJDK11があるじゃん。そのうちAdapt OpenJDK11もでるだろ。 だいたいダウンロードページにOTN開発者ライセンスに変わったって書いてあるし JavaでJson読ませるの、どのライブラリが使い勝手いい?
なんかいろいろありすぎて困る >>762
JSR 374がjaxpに似せてるから学習コスト低いよ。
ttps://javaee.github.io/jsonp/ 質問です。
下記のコードで、
https://ideone.com/0RbRo7
出力が0と0の間で2行開いてしまっているのですが、これはなぜでしょうか?
System.out.printlnをSystem.out.printにすると空白は出ないのですが…。 区切り文字を{},の3文字にしてsplitしたからでしょ。 >>765
>>766
>>767
返信ありがとうございました。
また質問させて頂くかもしれませんが、よろしければその時もまたお願いします。 http://acro-engineer.hatenablog.com/entry/2013/10/17/113216
>MyProtocolClientHandler extends ChannelInboundHandlerAdapter
Inbound 受信時に使用される処理
Outbound 送信時に使用される処理
という理解なんだけど、クライアント側のInboundはレスポンスを受信するときに動くということ?
でも送信時のコードが書かれてるようで、分からない。
NettyのInbound, Outboundとは? Inbound:中国人の観光客
Outbound:日本人の海外旅行 ああわかりました
channelActiveは返信等を受け付けれるような状態になった時に呼び出されて、
それはinbound,outbound関係無いってことですね
パイプラインのハンドラーというより、メッセージ送信の
コントローラー的なものがそこに書かれてるということですね
たまたまハンドラのイベントにそういう処理が書かれてる https://netty.io/4.0/api/io/netty/channel/ChannelDuplexHandler.html
> intercept operations and also state updates
この部分どういう意味ですか?intercept operationとは?
DuplexHandlerはパイプライン上でどういう順序で実行されますか?
受信時と送信時で実行して欲しい順番が異なる場合どうすれば? bronzeの問題集やっててイライラしてきたんだけど、問題になるようなコードは基本的に書くなってことでいいんですよね?
&&||の右側にインクリメント演算子書いたから場合によって評価されないとかif文の中身1行しかないからカッコ省略したら読みづらくなってるとか
問題として出されるくらいヒューマンエラーを産みかねないってことでOK? 読めるようになれってことじゃないの?
>&&||の右側にインクリメント演算子書いたから場合によって評価されない
例えばこれは、
if(a != null && a.get()>1)
こんな行があった時に2つ目の演算でNPE起きない事が保証されると分かれ、ということだろう
書くな、じゃないよ。こんなコードたくさんあるし、こう書かないと冗長になる >>775
演算子のほうはちゃんと意味考えて書けよってことですよね?って聞いたつもりだったんです、言葉足らずでした
評価されない場合使って簡潔に書くのはよくあることなんですかね
中身1文ブロックのカッコ省略のメリットがさっぱりわからないんですが見た目がすっきりするだけですかね……?
どこ読んでもあえて推奨されてることがなくて、ブログのコメント欄とかはだいたいケンカになってるんでこれはあまり触れてはいけないアレなんでしょうか まあそれは簡単に言うと
開発時のソースコードはデバッグ出力の行があったりするんだけど
リリース時はデバッグ出力の行を文字列置換で一掃したりする。で、もし
if(...)
debugLog(...);
こういう行があったとして、debugLog(...);を置換で削除したら、エラーになる。
if(...){
debugLog(...);
}
これは置換しても大丈夫。
だから、括弧無しは処理部分を置換する事があるか、による
経験上置換するのはデバッグ系コードだけ 書き換えるつもりがない1行のはカッコ省略で書くと読みやすい、あとあと置換するdebugLog(…)とかは消したときに空のブロックになるように{}書いとく、ってことでしょうか? >>777
嘘をついてはいけない
デバッグ出力を置換で消す場合は ";" に置き換えれば良いので
{} の有無など関係ない >>779
それは気付いてなかったw
じゃあ括弧無しのデメリットは特に思いつかない >>774-776
&&・||の右側に、副作用があったら危険!
副作用とは、何かの状態を変えること
ぱっと見ただけでは、副作用が実行されるかされないのかが、わかりにくい。
右側に、副作用が無ければよいけど
if-else 文なんかより可読性が低いから、誤解しやすい
すべての言語で、言われている。
MISRA-C とか、C言語のルールでも、決められている 副作用があるかもしれないから、という理由なら条件分岐関係無くない?
if(a == null)
return;
if(a.get()<=1)
return;
これでget()呼ぶのも副作用あるかもしれないよね? >>783
別スレッドによって a が null にされてしまう可能性はあるな。だいたいの場合はそういうスレッドがないか、
またはあると分かっているならロックしてからアクセスするように作るから問題にならないんだろうけど。 ん?こういう理解だけど。参照が渡されてるだけだから
別スレッドが参照を破棄しても関係ないぞ
func1(Object a){
if(a == null)
return;
a.get();//絶対にNPEが起きないマルチスレッド無関係
}
func2(Object a){
a = null;
} そもそも式の中で副作用のある関数を呼び出すのは危険
&&や||は評価順序が決まってるからまだマシな方でそれ以外の演算子だと評価順序もどうなるかわからんし でも副作用がある関数はset,write,update,createとか大体それっぽい名前ついてるし
分かるでしょ?
というか情報処理はCRUDだからcreate,update,delete的な名前が必ずついてる
副作用を広くとらえればログ出力も副作用だけど、そういうのは問題無い
getは副作用無しか問題無い副作用のみ、CRUDのRに相当するものだから
だからコーディング規約を作るなら、CRUDを意識させるようなものであるべきで、
真理式でメソッドを呼び出すなとかいうわけわからん規約を作るべきではない
CRUDのうちRのみ呼び出していい、とすべき ぶっちゃけCUDでも呼び出していい
結局、意味を捉えて間違えないように書けということでしかない
コーディング規約をどういじくってもそこから逃げれるわけじゃない if (a == 0 || b++ < 1) {
}
こういう書き方をすると一見bが常にインクリメントされるように誤解されやすいからやめとけよって言ってるだけでしょ。 真理式に複数の演算があって、かつ一部に副作用があるとまずい、ってことか 副作用・副作用完了点
評価順序・マクロ
MISRA-C でも、こういう間違いやすい所の、ルールは厳しい >>785
それならないな。
残るは get() して 1 以下なのを検査した直後に別スレッドによって a の状態が変化して get() が返す値が変わるとかかな。
(そんなの想定の範囲内なら問題ないが)。 adopt openjdkのjdk11リリースされたじゃん。
ttps://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot
LTSだぞ。
ttps://adoptopenjdk.net/support.html?variant=openjdk11&jvmVariant=hotspot クライアントJREは廃止された
今現在、要JREとして世に出ているアプリをエンドユーザーが実行する公式な方法は存在しない(自己責任で開発環境を入れるしかない)
今後のクライアントサイドJavaアプリの唯一の配布方法は、JDKに含まれるコマンドラインツールを使用して
プラットフォーム毎に実行環境とアプリを同梱した実行可能なパッケージを作ることである
クライアントサイドに関しては、もはやJavaはバイナリ互換ではない
OracleはクライアントサイドJavaを段階的に廃止しようとしており、新規には決して使ってはならない >>793
当てにならんよこんなの
こいつらはただのビルド屋で、自分達でソースに手を入れる体制はない
次のバージョンのOpenJDKがリリースされた後もOpenJDK公式リポジトリの旧バージョンのソースに対してLTS向けのパッチが提供されるかどうかは、
オラクル様の温情次第 Javaに型推論が無いことをディスられると、意識高い系Javaerさん達は
ローカル変数の型もinterfaceにするべきだからそんなもん要らんと上から目線で反論してたけど
梯子外されちゃって哀れだな これ2じゃなくて1が出力される。何で?
@Test
public void mapObjTest() {
Map<Long, Integer> m = new HashMap<>();
Long key = 1L;
m.put(key, 1);
Integer val = m.get(key);
val++;
System.out.println(m.get(key));
} 悪く言われるけどクライアントサイドについてJRE同梱は良いんじゃない?
もはやファイルサイズは小さな問題だし、JREのバージョン違いでの誤作動を減らせる。
クライアントサイドJavaがそれで悪くなったと思わないけどな、俺は
JavaFXが外されたのは悪くなったと思うけど、でもどうせ同梱する作業するときに入れるんだし
妥当な変化じゃないの? >>801
val++は↓これと同じ
val = val + 1
変数valに値を代入してる
↓こう書けば値は2になる、value.valueはドット演算子を使ってオブジェクトの状態を変えてる
public class Main {
public static void main(String[] args) {
Map<Integer, Value> map = new HashMap<>();
map.put(1, new Value(1));
Value value = map.get(1);
value.value++;
System.out.println(value.value);
}
}
class Value {
int value;
Value(int value) {
this.value = value;
}
}
変数に対する代入と
オブジェクトの状態を変えることとは
異なる操作なんやで >>801
Integerをインクリメントした瞬間に新しくIntegerインスタンスが生成されるからだな
詳しくはオートボクシング、インクリメントとかでググるといい 要するにval++は↓の省略系
val = new Integer(val.intValue()+1) >>802
悪くはなってないよね
0に何を掛けても0だからな >>802
動的リンクしまくってるからFullJRE前提だわ。 Object#equals()
public boolean equals(Object obj) {
return (this == obj);
}
なんでreturn this == obj;じゃなく括弧で囲ってるの? return文に記述された式が複雑なときは括弧で括ったほうがmore readableだから推奨してる人のほうが多いように思うけど、
this == objが複雑かどうかは微妙だね。
でも自分なら括弧つけるかな。
理由は、括弧でくくることで、等式が値を返す数式として使われていることを明示できるから。 Javaの最黎期に書かれたものだろうから、コードスタイルが今の基準からすれば変でもおかしくない
今では一般的には括弧はつけないのが主流だね 計算がよくわからん時は、まず括弧で囲えって、
今でも教える人がいるからな >>815
演算子の優先順位の話なら不要だと思ってもあえてつけたままにすることはあるな
+ と * とかならいいけどビット演算子とか言語によって違う奴とかもあるしね javaでaccessdbと接続するようなソフト作ってみたいんですが
フレームワークって必要ですか
ちょっとフレームワーク自体よくわかってないです。
規模は社内で5人くらいで使用します。 検索すれば出てくるけど
ハマることが多そうだからオススメしない
Javaが要件なのかAccessが要件なのかわからんが >>812
Webで避けて通れないJavaScriptのせいとかもあるな。
JavaScriptのセミコロン省略可能はいまだに嵌る。 Ruby on Rails, Node.js などでは、開発環境では、SQLite を使うけど >>802
Write once,Run anywhere
配布しようと思ったら環境に応じたJRE添付してやらないといけないんだよね?
根本理念に喧嘩売ってる気がする >>822
バイナリ互換じゃなくなるけどソースコード互換ではあるので・・・
JavaでGUIアプリ作ってネットで配布する場合、エンドユーザーの環境に依存するの辛いでしょ
むしろJRE同梱したい、と思うのが普通だよ
JRE同梱によるファイルサイズ増加はもはや問題にならないし
どうせJRE同梱作業するなら、その時にJavaFX入れれば良いので、分離されたのも妥当な気がするし
むしろクライアントサイドで進歩してると言っても良いのでは >JavaでGUIアプリ作ってネットで配布する場合、エンドユーザーの環境に依存するの辛いでしょ
JRE同梱だと回避できて、JARだけだとダメな問題ってどういうのがあるん?
実際にクライアントの環境が異なってたらどうやって提供しようが辛さは一緒におもえる
だいたいJRE同梱なんかされたら何仕込まれてもわからん
サンドボックスのしっかりした仕組みがあるわけじゃなし
そもそもWindowsとかOS側が信用できない
共通のJavaだから信頼感あったのに 今どき.NETですらランタイム同梱する流れだからな >>824
何言ってるか良く分からんが、JRE同梱すればJREのバージョン違いによる問題が無くなるだろう。
いちいちJREをインストールしてもらう手間も無くなる。
例えば一部のJREはJavaFXを同梱しているが、一部はそうではない。
何仕込まれても、ってのは良く分からんが
スタンドアロンアプリでもセキュリティマネージャーは動くはず 確かにこれまでと比べると、オラクルのサイトからJRE落としてそれで動かしてたのに比べると
アプリ毎にJRE同梱されちゃうとおかしなネイティブ実行ファイルが同梱されてないか、という問題はある
しかし同梱されたプラットフォーム固有の実行ファイルはハッシュ値とかで適切なファイルかを照合できるはず
あとそもそもバイトコード部分でも相当な処理が可能だから、さほどセキュリティリスクが変わると思わない
ネットからプログラムを落とすなら、オープンソースか信頼できる大御所か
これまでと変わらないのでは 問題はJREのバージョンか
たしかに多少の問題はあるが
JRE同梱必須にしたらJavaの目指していた未来と可能性そのものを切り捨てることになる
そうできるってのとそうしなきゃいけないってのはえらい違い JREを同梱しないと、10年経ったら動かなくなってると思う
クライアントサイドはJRE同梱で作れと強制する事は、そんな悪い事じゃないと思う
そうしないとJavaがバージョンアップしづらい問題もあるから、オラクルはそうしたいんだろう 元々Write once,Test anywhere
って失望されてたじゃ無いか。。。
HTML5も同じだけど、理想と現実は遥かに遠い隔たりがある。 スタティックリンクの肥大した実行ファイルと一緒だよね
Write Onceで全プラットフォームで動いたら開発者としては理想じゃないかな オラクルはJavaを高速バージョンアップしたいみたいな事も言ってるが、
一連の話は整合性がある
サーバーサイドはエンジニアが管理しててJRE固定できる、
クライアントサイドはJRE同梱。
現状だとJavaから古いAPIを削除したら多くのアプリが動かなくなるから、
移行期間を作ってそのようなアプリが減るのを待つ。
そうしないとJavaに未来が無いという判断は、理解できなくない。 じぶんとこのOracleDBは枯れまくってても平気なくせに だから、同梱されたファイルのハッシュ値調べればわかるし、
アンチウイルスだって有名な実行ファイルについてハッシュ値を知識として持っておくべき。
オープンソースは誰かが検証すべき。
で、もともとバイトコード部分でも相当な事ができるからセキュリティリスクは変化してない。 クラス変数にもvar使わせてほしいよな
無名クラスにリフレクションで値を代入するフレームワークとかでてきそうだし
class Hoge {
public var xyz = new Object() { int x, y, x };
} それをやると型を特定するために延々先を辿らなきゃいけなくなるんだ… Class#forNameで動的リンクするときjlinkとかは依存するクラス検出できないから
結局手動で全部依存関係調べるかfull jre使うかの二択になる。
>>838
互換性が保証できなくなるからやらないだろ。
実行時の型と推論された型は違うから。 というかあれだぞ。
javapackagerなくなったからjava11ではjre同梱したパッケージ作れないし、
なくなったのはpublic jreだけでjreのビルド自体はadopt openjdkがやってるからjre自体はあるぞ。 >>838
コンパイラの仕組み上困難
Javaコンパイラはまず、メンバのシグネチャだけを解析してクラスごとにメンバのお品書きを作る
そして、それが一通り終わった後に各メソッド本体やフィールド代入元の式を解析する
ところがフィールドの型にvarを許してしまうと、お品書きを作る段階でフィールド代入元の式を解析しなきゃいけなくなる
それによりコンパイラのパスが増えてしまうから、コンパイル速度が大きく低下する >>842
クラスにvar持てるHaxeのコンパイル遅いと感じたこと無いけど
Scalaとかいう言語でものすごく遅くなったという話は聞く >>841
Java 11でクライアントサイドはどういう扱いになってるの? 新しいパッケージングツールの要件はJavaFX未対応とされている
http://openjdk.java.net/jeps/343
JavaFX由来のパッケージングツールが削除された
じゃあ、JavaFXアプリをエンドユーザーに配布したい場合、どうするの?
現在見つかる情報は、非JavaFXの自己完結型パッケージャ、
JavaFXのビルド方法だけで、JavaFXの自己完結型パッケージャが行方不明なんだけど >>844
Java Client Roadmap Update
ttps://www.oracle.com/technetwork/java/javase/javaclientroadmapupdate2018mar-4414431.pdf
>>845
jep343がjavafx対応しないんだからないよ。
でも、javafxはただのライブラリなんだからjep343でほかと同じ扱いでしょ。 public synchronized void method1(){}
こういうメソッドレベルでsynchronizedした場合、
synchronized(this){}ということですか?
つまり他のところでsynchronized(this)が書かれていたら、どちらかが待機になるんでしょうか >>849
その通り
thisをロックするのはパフォーマンスの低下やデッドロックの原因になるため、現代では一般には悪手とされている
synchronizedがデフォルトでthisをロックするのはJavaがまだオモチャでカジュアルに排他制御してた時代の名残で、
ちゃんと作るなら排他制御には private メンバを使って外に漏らさないようにした方が安全 thisをロックするのとロック専用オブジェクトをロックするのは
性能の違いがあるんですか? >>851
thisはクラス外からも当然見えているわけで、他のクラスも同じオブジェクトを同時にロックしている可能性がある
どえせ内部的に同期してるんなら他のクラスが同時にアクセスしてくることは何の問題もないはずで、これは完全に無駄なブロックだ
クラス外から見えるオブジェクトをロックするのはパフォーマンスだけではなくてデッドロックの可能性を高める非常に悪い行為 デッドロックの可能性は分かるんですが、
その性能の劣化というのは、クラス外でたまたまロックに使われていた場合、
待機時間が生じるから、ということですか?
待機時間以外に構造的に複雑なオブジェクトをロックすることでの性能劣化はありえますか? >>853
それはない
ロックはオブジェクトヘッダにロック中であることを示す情報を書き込むだけ ロック可能なのは全部ロックしたら苦しんだ黒歴史・・・ 専用オブジェクトでロックしても結局プログラマーが入念にチェックする以外
無い気がするんですが合ってますか?
よく言われてるようなロック順序云々では解決しない気がするんですが デッドロックと言えば、サーバをまたいだロックを掛けててデッドロックになった時は原因究明が大変だったなあ。 >>857
外に漏らさなければ入念にチェックする範囲がクラス内だけに留まるだろ
外から見えるオブジェクトならそれを触ってる可能性のある範囲全てをチェックしなきゃいけない >>863
クラスA#method1() method3呼び出し
クラスA#method2()
クラスB#method3() method2呼び出し
この状況でmethod1,3を異なるスレッドが呼び出したらデッドロックになりうるのでは?
クラスA,Bがそれぞれ専用のロックオブジェクトを持っていて
method1,2,3の内部でロックオブジェクトでロックしているとして そういやJavaVMって実行時にデッドロックを見つけ出す機能はないのかな?
OSのファイルロックだと見つけてくれたりするよな。NFS絡むと無理だけど。
(あ、でも2プロセスでロック掛け合った場合だけかな?) デッドロックを通知する仕組みはあるようです。JConsole
安全なsynchronizedというものは、そのメソッドがどこから呼び出されているか、
どれを呼び出しているかというような依存関係で決まって、
単純な記述方法で安全性を確保する事はできないのではと思いました。
どのオブジェクトをロックしてもこの問題は残ります。
https://www.jpcert.or.jp/java-rules/lck07-j.html
これなんかもそうですが、ロック順序だけで解決できると考えてしまっていますが、
synchronizedブロック内のロジックが他のメソッドを呼び出している場合、
まだデッドロックが発生する可能性があると思います。
派生していくメソッド呼び出しのどこかにsynchronizedブロックがあれば。
もちろん、多くの場合、プログラムは様々なメソッドを呼び出します。
>>857はこの理解で正しいかという意味です >>864のケースで仮にAがthisをロックしていたとしたら、B#method3がA#method2を呼ばずともB#method3内で直接または間接的にAのロックを試みただけでデッドロックするだろう。
privateなロックオブジェクトを用いたからといってデッドロックの可能性はゼロにはならないが、thisを使うのに比べれば確実に可能性は低くなる。
あえてリスクの大きくパフォーマンスの低下する方を選択する積極的な理由がない。 >>866
何を言いたいのか理解できないが、どこの誰がどんなタイミングでロックを取りに来ようとも、ロックの順番さえ守ってれば絶対にデッドロックは起こらないよ。 DB などほとんどのアプリでは、デッドロックでタイムアウトする。
絶対に回避できない
ロックする順番は、2プロセスの場合、
プロセスAがX, Y、
プロセスBがY, X
3プロセスの場合、
プロセスAがX, Y、
プロセスBがY, Z、
プロセスCがZ, X >>870
ロックの順番があべこべなのだからデッドロックするのは当然だろう >>870
バカにロックを使わせるな
って言う見本
せめて初歩の初歩ぐらい理解してからレスしろよ w >>869
ロックの順番を守る事ができないということです
ブロック内にメソッド呼び出しがあることは普通です >>868
>どのオブジェクトをロックしてもこの問題は残ります。 現在している話は、普通のプログラムにおいてロックの順番を守る妥当な方法は存在しないという話です。
synchronizedブロック内でメソッド呼び出しがあった時点でそうなります。
それに対してロックの順番を守ればいいとかthisをロックしろとか言い続けているのは話が分かっていません。 もう少し分かり易い説明を思いつきました。
ここにある問題は、synchronizedブロックで一旦ロック順序を守ったとしても、
そのブロック内から呼び出されているメソッド及びそこから派生的に呼び出されている全てのメソッドにおいて
synchronziedブロックを使う場合デッドロックが生じうるという問題で、
リファクタリング等において恒久的に懸念が残り続けるという問題です。
これは一時ロック順序を守ったコードを書いても解決しません。 すみません、経験上凡人レベルの人に話しても理解されなくて、辛い思いをするだけです。
話を終わります。 そうや。情報処理資格のテキストに書いてある。
楽観的とか、ああいうやつ
何も知らない奴が、ギャアギャア言ってるだけ ID:QZT9zuHU = ID:m171VN/W
バカのまま永遠にデッドロックしとけ 例題とかじゃなくて、どういう時にロックが必要になるか考えて実際にやってみたらいいんじゃないか
そんな複雑なsynchronizedの使い方をしたことはしないだろう >すみません、経験上凡人レベルの人に話しても理解されなくて、辛い思いをするだけです。
世間は俺のことを分かってくれない(馬鹿のFAQ)w ID:m171VN/Wは天才すぎる故に凡人レベルの嫉妬を買ってしまった いや本当。凡人レベルの人には話が通じませんよね。
という具合にみんなして同調しておけばいいのに。 凡人にも理解出来る様に説明出来る能力を持ってるのが、天才の条件だな
説明出来ない人は紙一重の方 まあ責任と前提の問題だな
正常な頭してたらクラスAとクラスBが相互に密結合するような設計をすることはありえないから、
似た状況が起こりうるのはBがAに自身を登録してAがBをinterface経由で「コールバック」するようなパターンだろう
その場合、BのメソッドがAのコンテキストから呼び出されることはBを作る側は当然知っているはずで、Aを更に別のスレッドから呼ぶような基地外的行為をしないという人間としての最低限度の責任はB側にある
そしてA側はそのようなリスクのある拡張ポイントをなるべく作るべきではないし、やむを得ないときはドキュメントに明記するべき あれだ
スレッドを知った初心者が無駄に使いたくなってる状態に近いんじゃないか >>887
ありがとう。そんなスレがあったとは。正に俺のために作られたようなスレだな。
と、サラッと書けるくらいにならんといかんよ。現実がどうであれ。w javaの資格のsilverやgoldはどの程度の実力で受かりますか?
デザインパターンやリファクタリングをちゃんと理解しているレベルなら余裕で受かる? >>890
シルバーはブロンズと変わらん
ゴールドはライブラリの使い方知ってればおけ
日付の計算とかスレッドとかコレクション >>891
ゴールドもその程度で受かるのですか?
楽勝ですね。
じゃ逆にデザインパターンやリファクタリングをあまり理解していなくても受かるということ? 職歴にプログラミングがないのでしかたなく資格でもアピールする必要があるのですが
Java資格はGoldを取るとして
あとなにがあったほうがよいでしょうか?
データベース関連やUML関連やネットワーク関連の資格ですか?具体的にはなにが印象いいでしょうか? デスペとデスペですか。
同じものなのになぜ2回も言うのですか。 そうですか。
なにか忘れてそうなのですが
プログラミングあるいは関連分野で、あったほうがいい資格はありませんか? わからない。資格何もなしで何十年も働いちゃったもので。
一時期は学校でC言語教えてたりもしたが、資格はなかった。
あ、一太郎も教えてたことあったよ。もちろん資格なしで。 >>900
無免許ですか。逮捕しますよw
一太郎は日本用のWordだと思うけどなんでそんなものが存在したの? まあ実務をやる上では資格は特に必要ではない
ただ採用する立場だと資格ない奴とある奴ならある奴を取る >>901
なんでって、MS-DOS時代のWORDは漢字扱えなかったからじゃないか? ブロンズは持っても意味ないしシルバーもゴールドの受験資格みたいなもんだぞ。
そんで中身の言語部分はJVMSもJLSも一切読まなくても答えられる程度でどちらかと言うと
ありふれたライブラリの宣伝兼再確認みたいな内容。 >>901
資格と免許の区別も出来ないんじゃ、
就職なんて出来んだろ もしかしなくてもsilverとかより基本情報技術者取ったほうがいいんでしょうか 当然
Javaの重箱の隅に付いてる食べカスの色知ってる奴よりIPアドレスの計算できる奴の方が遥かに役に立つ インターネットキングならIPアドレスの計算くらい朝飯前だよ 世の中に無駄なものなんかないよ
ジャヴァの資格もIPアドレスの計算も全て社会の役に立ってる java11, 12にはくだらない機能しか入らないのか for文ブロックの後にループカウンタ変数の値でif文を書きたい
でもループカウンタ変数のスコープの問題で使えない
for文実行前にカウンタ変数用意するのは悔しいし誤動作を招きそうな気がするのでやりたくない
for文の中にif文を書いちゃえばいいんだけど毎回実行されるのは無駄で気持ちが悪いしそもそも本来やりたいことと違う
これはどう解決すれば良いんでしょうか、初歩的ですいません…… >>915
forループに入る前にループカウンタとは別の変数を用意して、ループの最後にカウンタの値をその変数にコピーするようにしよう
そうすればループカウンタをfor文の外で宣言しなくて済むし悔しくない そもそもループカウンタを前に宣言はできませんでした(今までそんなんやろうと思わなかった……)
>>916
代入ならif評価よりは速そうですね、ありがとうございます >>915
それってループしている最中に if で何らかの条件により break するってことだよね?
それならその if ブロックの中で別の変数に代入すれば良い。
int j = -1;
for (int i = 0; i < max; i++) {
if (f(i)) {
j = i;
break;
}
}
if (j >= 0) {
...
}
もし上記のように途中でbreakして抜けるのでないなら max の値そのまま使えば良い。 時間の掛かるファイル読込処理を非同期実行して、その処理中にファイル読込具合に応じてJavaFXのプログレスバーを更新してるんだけど、
たまにプログレスバーが更新されない場合がある。なんで?
そのファイル読込処理とプログレスバー更新はインターフェースの継承メソッドに記述していて、
Threadクラスに登録するRunnableクラスのrunメソッド中でインターフェースの抽象メソッドを叩いて呼び出している。
1)イベントトリガが、JavaFXのFileChooserの選択完了時 → プログレスバー更新される
2)イベントトリガが、別のJavaFXの子Scene上のJavaFXボタン押下時(子Sceneのhide後) → プログレスバー更新されない
setImplicitExitをどうたらこたらするというのは一通り試した
簡単に解決したいんだがなあ >>920
JavaFXはもうJavaの標準ライブラリではなく単なる野良ライブラリの一つに過ぎない
スレ違い 回答できんのなら黙ってろよな。回答できないくせに黙ってられないから池沼なのか substance.jarでswingの見た目変えるの好きだった
javafxは評判悪かった覚えがあるけどswing使用者はみんな移行したのかな 解決したったわ
しかしここはクソの役にも立たねえな
たまに書き込むけど、光合成も出来ない原始生命を相手にしているようで、ただただ孤独しか感じられねえわ
次はジュラ紀になったら来てやるから、それまでに精々、自然淘汰されておけよ >>935
そんなお前にピッタリのスレがあるぞ
こんな低レベルのところじゃお前ほどの力は評価されないんだよ
上級プログラマの雑談部屋☆2
https://medaka.5ch.net/test/read.cgi/prog/1524240229/ >>934
FXは廃止されちゃったからね
極一部のニッチでしか使われてないしモバイルファーストやWebファーストの流れに侵食されてオワコン、とOracleさん自身が公式に宣言してる Javaの仕事に転職したいのだけど
年収の交渉でプロ野球の契約更改のように代理人にお願いして年収アップの交渉をしてもらうシステムはないかな?
もちろん高収入になったらその1%は代理人に払うことにしたらその代理人もものすごくがんばってくれるからwin-winの関係になる。 >>940
年収2000万ぐらいなら探せばあるだろ
それ以下なら商売にならなすぎだから厳しいと思うけど 1000万の1%が10万円。とすると月に10人以上成立させないとうまくいかんのではないか? >>943
それ専門だから1日に5回同じ場所で連続で面接に参加して
それで1月に20日働けば月収1000万円。 >>940
そんなことができる代理人は自分で稼ぐだろ
そもそも億円プログラマーなんて存在するのかも怪しいし そういやさっきツイッターの広告でAIとチャットして何をやりたいかとか聞き出して人を募集している企業とのマッチングすのが出てきたよ。
やる前からAIに仕事奪われたようだなw >>946
それ従来の検索フォームをチャットに変えただけだろ 人工無脳でも対応向上だと騙される奴がいるんだから有効だと言わざる得ないな
どうせブラック紹介されるなら萌えキャラにでも紹介された方がいいだろう? このスレの少し前にもオラクルの認定試験の話題がありましたが、
Java Silverは持っていると役に立つでしょうか?
Java Bronzeは既に取得しています。 総称型を使った抽象クラスがあって、その具象クラス全部を処理するコードを書きたいんだけど
以下のようにするとコンパイルエラーになるのでできません。
いちいちTest2の具象クラスをinstanceof等で特定して書かなければならないということでしょうか?
public class GenericsTest {
public void test() {
Test2<? extends Test> t = null;
t.f(new TestConcrete());
}
public static class Test {
}
public static class TestConcrete extends Test {
}
public abstract static class Test2<A extends Test> {
public void f(A a) {
}
}
} 修正しますこうでした。Testも抽象クラスです。
public class GenericsTest {
public void test() {
Test2<? extends Test> t = null;
Test a = null;
t.f(a);
}
public abstract static class Test {
}
public abstract static class Test2<A extends Test> {
public void f(A a) {
}
}
} こんな記述を見かけたんですが
>Java11からはJavaFXは、ただのライブラリになったので、JavaFX側がMavenのCentral Repositoryにjarを置いてくれていたりするので、 OpenJDK11でJavaFX11を使うのであればpom.xmlのdependencyに入れるだけの話である。
JavaFXはネイティブDLLを使っていますか?
使っている場合、pom.xmlで入れられるライブラリになったというのは、
全環境用のネイティブコードが同梱されるということですか?
ほとんどのJavaライブラリは純粋なJavaコードで環境非依存だと思いますが
環境依存したライブラリはどういう扱いになるんでしょう >>956のコードですが
fの引数は? extends Testだから、Testを受け取れても良くないですか?
? extends Testで期待できるのはTestのインターフェースであり、
TestはTestのインターフェースを持っています。
しかしコンパイルエラーになります 少し調べました。状況は、
A extends Test と Test が非変であり、親子関係が完全に無視される。
f(A a)はConsumerであり、PECS原則から、? super Aを指定できるとよいが、
総称型ではないので指定できない。
Test2<A super Test>も記述不可
f(Test a)にすれば解決するが、Test2の子クラスはfの引数の型を限定したいかもしれない。 なぜか一度ワイルドカードを経由する+キャストという方法で解決できました。
public class GenericsTest {
@org.junit.Test
public void test() {
Func<?> funcTmp = new FuncConcrete();
Func<Arg> func = (Func<Arg>) funcTmp;
Arg arg = null;
func.f(arg);
}
@org.junit.Test
public void test2() {
Func<Arg> func = (Func<Arg>) new FuncConcrete();
Arg arg = null;
func.f(arg);
}
public abstract static class Arg {}
public static class ArgConcrete extends Arg {}
public static class FuncConcrete extends Func<ArgConcrete> {}
public abstract static class Func<A extends Arg> {
public void f(A a) {}
}
} >>958
環境ごとにjar分けて共有ライブラリ含めるだけだけど。joglとか昔からそうじゃん。 JVMは環境ごとに用意されてるから、その部分で対応してるんでしょう
わかってると思うが当然標準ライブラリとして提供してるAPI自体は環境に依存してない
まぁ internal なコードに環境による場合分けくらいは書いてあるかもしれんけど、
JVMにはその環境用のコードさえあればいいから、全環境のネイティブコードは必要ない あぁごめん、Java11からの話か
そうだね、環境依存のjarと環境依存してないjarを2つ別々にダウンロードするんだろうね多分
swt+JFaceの、swt部分だけ環境依存してるのと一緒
使ったこと無いけど 上で言われてるJOGLもそんな感じかな
まぁ軽めのデータベースのjarとか環境依存のファイル全部ぶっこんでくることもあったりするけど javaとDB(oracle)のデータについて。
javaプログラム内のある変数Xに対して、DBのある列の値に存在しているかどうか
チェックしたいのですが、どうすればよいでしょうか。
1.String sqlStr = "SELECT * FROM fruit";
2.ResultSet result = st.executeQuery( sqlStr );
3.while( result.next() ) {
4. String str1 = result.getString( "price" );
5. System.out.println(str1);
}
2行目でSQLを実行して、4行目でPRICE列の値を取得していると
思うのですが、X=1000と定義していた場合、PRICE列の値に対してXの
値が存在するチェックはどのようにコーディングすれば良いでしょうか。
一致すれば出力で一致しなければエラーにしたい。
なお、PRICEデータは例として1000としていますが、ランダム数値です。 >>965
普通にWHERE書け
SQL分からないんならJavaの前にSQLの入門書を終えてきなさい "SELECT * FROM fruit WHERE PRICE = X"だと
Xが文字列になってしまうと。
Str1とXを比較すればよいと考えていましたが難しい >>967
prepare にするかそのまんまSQL文の中に文字列で埋め込まれるようにするか、だな。
prepare の場合はこんな感じね。PreparedStatement クラス使うやつ。"?" の部分が置き換え部分。
https://qiita.com/ika_katsuo/items/dfbf9ed227ca08256760 もし変数xの値が一つしかないなら
プリペアドステートメントでいちいち事前コンパイルする必要がない
ふつうにSQL問い合わせの文字列作るほうが速い簡単お手軽 知能が低いと
文字列の加工すらできないのか
なるほどな それが何を意味するのかも考えずどっかからコピペしてるからそういう質問が出るんだろうけど、技術書見ればプリペアードステートメントとか順序を追って書いてあるもんでもないのかね 質問スレで質問に対して煽るやつの知能も大概だとおもうぞ 何も調べずに質問する方が大概だろ、質問者は神様ですってかw >>963
> わかってると思うが当然標準ライブラリとして提供してるAPI自体は環境に依存してない
>
> まぁ internal なコードに環境による場合分けくらいは書いてあるかもしれんけど、
> JVMにはその環境用のコードさえあればいいから、全環境のネイティブコードは必要ない
そんなことないから。java6以降環境依存な標準API追加してるからjava側で場合分けする必要ある。 >>970
prepare にしとくとSQLインジェクション防止になるというのもある。
https://blogs.oracle.com/sec/042_sqlinjection_1
もちろんどうやってもそんなことは起こり得ないし1回しか同じSQL文使わないみたいな場合は埋め込めばいい。 spring frameworkはフレームワークで、MVCはプログラムの一つのモデルです。 >>981
awtのDesktop、nio2(more nio)のファイルパーミッション等、apple javaのeawt移植。
あと6以前からのjava soundもjreに含まれてるのは単なるRIで仕様と実装は別物で、
実装部分のLineの挙動はプラットフォーム依存。7以降MIDIのソフトシンセはクロスプラットフォームになったけど。 Javaのメモリ管理に関して教えてください!
例えば、PCのメモリが32GBあるPCで、
インスタンスを大量生成するプログラムを動かすとします。
また、このプログラムの起動引数に、ヒープ最大使用量=2GB
を設定して起動していたとします。
この場合、大量のインスタンスを生成していった場合ですが...
ヒープ最大使用量=2GBを超えてヒープを使用することはありますか?
それと、ヒープサイズがヒープ最大使用量に近付いた場合、
ガベージコレクションが発生するようになりますか? >>984
インスタンスて何?
プロセスのことか? >>984
> ヒープ最大使用量=2GBを超えてヒープを使用することはありますか?
ないよ、ヒープ最大使用量を超えるとOutOfMemoryErrorが投げられる
> ヒープサイズがヒープ最大使用量に近付いた場合、
> ガベージコレクションが発生するようになりますか?
なるよ、サーバを管理してるけどたまにアプリにメモリリークがあって
メモリが解放されなくてGCが頻発して最終的にOutOfMemoryErrorになる
ことがある、急速にメモリを消費してGCが稼働する間もなくエラーになることもある >> 985
Object o = new Object();
とかです!
>> 986
ありがとうございます!
ということは、PCのメモリを全部食い潰すことはないのですね。
助かります。 参照にnull渡してもすぐに廃棄してくれないから
メモリぎりぎりの処理をするとGC発生せずに落ちる
OutOfMemoryErrorの前に1度はフルGCしろよと思う java11に移行しようとすると、ライブラリ類が対応してるのか不安
自分のアプリだけテストしても不十分だ
例えばNettyもjava11で少し問題が出たようだ java8からの移行を考えてたけど、やっぱり一部パッケージが削除されたせいで
動作しないものが出るようだ
移行作業はまずビルドが成功するかという問題があって、
失敗したら最悪ライブラリを自分で修正しないといけなくて、
ビルドに成功したとしてもライブラリはjava11でテストされていないという状況
ほんの1年ちょい前はjava8が最新だったんだが・・・
こんなの新規プロジェクト間に合わないだろ
移行作業しつつ開発進めないといけない https://builder.japan.zdnet.com/sp_oracle/35095997/2/
>Java Policy Tool
これの代替手段はありますか?
>時代遅れとなったセキュリティAPI
これはjava.securityのことですか?java11でそのパッケージが無くなるんですか? >>993
>これの代替手段はありますか?
ない。どうせpolicy toolはカスタムポリシー対応してないからポリシーファイルは手書きする必要がある。
そもそも、これ技術デモだから。
>これはjava.securityのことですか?java11でそのパッケージが無くなるんですか?
非ポリシーベースのsecurity apiのうち1.1時代のだけ。 java8から11に移行する場合、security apiは特に変わってないと考えていいですか? あー1.1のAPIを8で使ってたらそうじゃないのか 正確にはcheckPermissionに転送してるだけのSecurityManagerの一部のメソッドだけどね。
今のところ削除予定なのは特殊なやつだけだけど1.1/1.2時代のapi削除するのは時間の問題だと思うよ。 >>998
君が作ってないからさ
君が作れば理想的なものになる
今すぐ新言語を作れ >>998
バグと同じで改修に次ぐ改修で無理が想定外や見落としが出て、結果継ぎ接ぎになるんだろ。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 281日 17時間 15分 2秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。