■ このスレッドは過去ログ倉庫に格納されています
☆★Java質問・相談スレッド181★★
- 1 :デフォルトの名無しさん:2018/02/10(土) 17:49:40.56 ID:l9ZzjyKP.net
- プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
(p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※
質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。
前スレ
★★Java質問・相談スレッド180★★
https://mevius.5ch.net/test/read.cgi/tech/1492780397/
- 955 :デフォルトの名無しさん:2018/11/09(金) 16:29:29.33 ID:OW/zGENl.net
- 履歴書に書くことが出来る
- 956 :デフォルトの名無しさん:2018/11/09(金) 16:30:54.51 ID:OW/zGENl.net
- そして面接の時にJavaの質問をされ墓穴を掘る
- 957 :デフォルトの名無しさん:2018/11/09(金) 16:59:59.72 ID:Jo0ooGHD.net
- マ板へ逝けと既に書かれていた
- 958 :デフォルトの名無しさん:2018/11/09(金) 22:48:54.87 ID:zMMfYdX4.net
- 総称型を使った抽象クラスがあって、その具象クラス全部を処理するコードを書きたいんだけど
以下のようにするとコンパイルエラーになるのでできません。
いちいちTest2の具象クラスをinstanceof等で特定して書かなければならないということでしょうか?
public class GenericsTest {
public void test() {
Test2<? extends Test> t = null;
t.f(new TestConcrete());
}
public static class Test {
}
public static class TestConcrete extends Test {
}
public abstract static class Test2<A extends Test> {
public void f(A a) {
}
}
}
- 959 :デフォルトの名無しさん:2018/11/09(金) 22:51:18.43 ID:zMMfYdX4.net
- 修正しますこうでした。Testも抽象クラスです。
public class GenericsTest {
public void test() {
Test2<? extends Test> t = null;
Test a = null;
t.f(a);
}
public abstract static class Test {
}
public abstract static class Test2<A extends Test> {
public void f(A a) {
}
}
}
- 960 :951:2018/11/09(金) 23:58:00.70 ID:o+E2GY7o.net
- ありがとうございました。
- 961 :デフォルトの名無しさん:2018/11/10(土) 00:57:56.92 ID:XE+BpAI8.net
- こんな記述を見かけたんですが
>Java11からはJavaFXは、ただのライブラリになったので、JavaFX側がMavenのCentral Repositoryにjarを置いてくれていたりするので、 OpenJDK11でJavaFX11を使うのであればpom.xmlのdependencyに入れるだけの話である。
JavaFXはネイティブDLLを使っていますか?
使っている場合、pom.xmlで入れられるライブラリになったというのは、
全環境用のネイティブコードが同梱されるということですか?
ほとんどのJavaライブラリは純粋なJavaコードで環境非依存だと思いますが
環境依存したライブラリはどういう扱いになるんでしょう
- 962 :デフォルトの名無しさん:2018/11/10(土) 01:36:26.97 ID:XE+BpAI8.net
- >>959のコードですが
fの引数は? extends Testだから、Testを受け取れても良くないですか?
? extends Testで期待できるのはTestのインターフェースであり、
TestはTestのインターフェースを持っています。
しかしコンパイルエラーになります
- 963 :デフォルトの名無しさん:2018/11/10(土) 02:07:52.87 ID:XE+BpAI8.net
- 少し調べました。状況は、
A extends Test と Test が非変であり、親子関係が完全に無視される。
f(A a)はConsumerであり、PECS原則から、? super Aを指定できるとよいが、
総称型ではないので指定できない。
Test2<A super Test>も記述不可
f(Test a)にすれば解決するが、Test2の子クラスはfの引数の型を限定したいかもしれない。
- 964 :デフォルトの名無しさん:2018/11/10(土) 02:33:26.87 ID:XE+BpAI8.net
- なぜか一度ワイルドカードを経由する+キャストという方法で解決できました。
public class GenericsTest {
@org.junit.Test
public void test() {
Func<?> funcTmp = new FuncConcrete();
Func<Arg> func = (Func<Arg>) funcTmp;
Arg arg = null;
func.f(arg);
}
@org.junit.Test
public void test2() {
Func<Arg> func = (Func<Arg>) new FuncConcrete();
Arg arg = null;
func.f(arg);
}
public abstract static class Arg {}
public static class ArgConcrete extends Arg {}
public static class FuncConcrete extends Func<ArgConcrete> {}
public abstract static class Func<A extends Arg> {
public void f(A a) {}
}
}
- 965 :デフォルトの名無しさん:2018/11/10(土) 23:27:50.60 ID:49ccZS6D.net
- >>961
環境ごとにjar分けて共有ライブラリ含めるだけだけど。joglとか昔からそうじゃん。
- 966 :デフォルトの名無しさん:2018/11/10(土) 23:46:19.83 ID:6id28qN8.net
- JVMは環境ごとに用意されてるから、その部分で対応してるんでしょう
わかってると思うが当然標準ライブラリとして提供してるAPI自体は環境に依存してない
まぁ internal なコードに環境による場合分けくらいは書いてあるかもしれんけど、
JVMにはその環境用のコードさえあればいいから、全環境のネイティブコードは必要ない
- 967 :デフォルトの名無しさん:2018/11/10(土) 23:55:28.83 ID:6id28qN8.net
- あぁごめん、Java11からの話か
そうだね、環境依存のjarと環境依存してないjarを2つ別々にダウンロードするんだろうね多分
swt+JFaceの、swt部分だけ環境依存してるのと一緒
使ったこと無いけど 上で言われてるJOGLもそんな感じかな
まぁ軽めのデータベースのjarとか環境依存のファイル全部ぶっこんでくることもあったりするけど
- 968 :デフォルトの名無しさん:2018/11/11(日) 11:11:28.64 ID:6MwZdEZT.net
- javaとDB(oracle)のデータについて。
javaプログラム内のある変数Xに対して、DBのある列の値に存在しているかどうか
チェックしたいのですが、どうすればよいでしょうか。
1.String sqlStr = "SELECT * FROM fruit";
2.ResultSet result = st.executeQuery( sqlStr );
3.while( result.next() ) {
4. String str1 = result.getString( "price" );
5. System.out.println(str1);
}
2行目でSQLを実行して、4行目でPRICE列の値を取得していると
思うのですが、X=1000と定義していた場合、PRICE列の値に対してXの
値が存在するチェックはどのようにコーディングすれば良いでしょうか。
一致すれば出力で一致しなければエラーにしたい。
なお、PRICEデータは例として1000としていますが、ランダム数値です。
- 969 :デフォルトの名無しさん:2018/11/11(日) 11:27:22.91 ID:wM/j3zKs.net
- >>968
普通にWHERE書け
SQL分からないんならJavaの前にSQLの入門書を終えてきなさい
- 970 :デフォルトの名無しさん:2018/11/11(日) 12:00:45.21 ID:6MwZdEZT.net
- "SELECT * FROM fruit WHERE PRICE = X"だと
Xが文字列になってしまうと。
Str1とXを比較すればよいと考えていましたが難しい
- 971 :デフォルトの名無しさん:2018/11/11(日) 13:07:00.71 ID:iJkGWVs5.net
- プレースホルダ
- 972 :デフォルトの名無しさん:2018/11/11(日) 18:24:10.42 ID:0F8Q4Ddx.net
- >>970
prepare にするかそのまんまSQL文の中に文字列で埋め込まれるようにするか、だな。
prepare の場合はこんな感じね。PreparedStatement クラス使うやつ。"?" の部分が置き換え部分。
https://qiita.com/ika_katsuo/items/dfbf9ed227ca08256760
- 973 :デフォルトの名無しさん:2018/11/11(日) 18:43:06.39 ID:KBFxC5Cm.net
- もし変数xの値が一つしかないなら
プリペアドステートメントでいちいち事前コンパイルする必要がない
ふつうにSQL問い合わせの文字列作るほうが速い簡単お手軽
- 974 :デフォルトの名無しさん:2018/11/11(日) 21:38:36.99 ID:3JRsWB+V.net
- 今時直接データ埋め込みとかあり得んだろ…
- 975 :デフォルトの名無しさん:2018/11/11(日) 22:00:57.21 ID:KBFxC5Cm.net
- 知能が低いと
文字列の加工すらできないのか
なるほどな
- 976 :デフォルトの名無しさん:2018/11/11(日) 22:26:11.35 ID:cBZ/CGbZ.net
- それが何を意味するのかも考えずどっかからコピペしてるからそういう質問が出るんだろうけど、技術書見ればプリペアードステートメントとか順序を追って書いてあるもんでもないのかね
- 977 :デフォルトの名無しさん:2018/11/11(日) 22:28:33.94 ID:VPyBQ4Rk.net
- 質問スレで質問に対して煽るやつの知能も大概だとおもうぞ
- 978 :デフォルトの名無しさん:2018/11/11(日) 22:31:24.54 ID:3JRsWB+V.net
- 文字列の加工程度でドヤるとか w
- 979 :デフォルトの名無しさん:2018/11/11(日) 22:32:01.58 ID:4KGbvnyj.net
- 何も調べずに質問する方が大概だろ、質問者は神様ですってかw
- 980 :デフォルトの名無しさん:2018/11/11(日) 23:35:34.02 ID:infpFr5m.net
- >>966
> わかってると思うが当然標準ライブラリとして提供してるAPI自体は環境に依存してない
>
> まぁ internal なコードに環境による場合分けくらいは書いてあるかもしれんけど、
> JVMにはその環境用のコードさえあればいいから、全環境のネイティブコードは必要ない
そんなことないから。java6以降環境依存な標準API追加してるからjava側で場合分けする必要ある。
- 981 :デフォルトの名無しさん:2018/11/12(月) 00:34:16.10 ID:MtlIUxHY.net
- >>973
prepare にしとくとSQLインジェクション防止になるというのもある。
https://blogs.oracle.com/sec/042_sqlinjection_1
もちろんどうやってもそんなことは起こり得ないし1回しか同じSQL文使わないみたいな場合は埋め込めばいい。
- 982 :デフォルトの名無しさん:2018/11/12(月) 16:56:20.13 ID:ayEXvCJf.net
- spring frameworkはMVCですか?
- 983 :デフォルトの名無しさん:2018/11/12(月) 17:14:22.45 ID:cpYKEuEA.net
- spring frameworkはフレームワークで、MVCはプログラムの一つのモデルです。
- 984 :デフォルトの名無しさん:2018/11/12(月) 17:37:37.98 ID:xaL5+kQv.net
- >>980
> 環境依存な標準API
例えば?
- 985 :デフォルトの名無しさん:2018/11/12(月) 17:50:53.29 ID:ayEXvCJf.net
- >>983
どのモデルを採用してるのですか?
- 986 :デフォルトの名無しさん:2018/11/12(月) 22:41:38.37 ID:JKEbmYKN.net
- >>984
awtのDesktop、nio2(more nio)のファイルパーミッション等、apple javaのeawt移植。
あと6以前からのjava soundもjreに含まれてるのは単なるRIで仕様と実装は別物で、
実装部分のLineの挙動はプラットフォーム依存。7以降MIDIのソフトシンセはクロスプラットフォームになったけど。
- 987 :デフォルトの名無しさん:2018/11/12(月) 23:02:27.75 ID:THHCGQKY.net
- Javaのメモリ管理に関して教えてください!
例えば、PCのメモリが32GBあるPCで、
インスタンスを大量生成するプログラムを動かすとします。
また、このプログラムの起動引数に、ヒープ最大使用量=2GB
を設定して起動していたとします。
この場合、大量のインスタンスを生成していった場合ですが...
ヒープ最大使用量=2GBを超えてヒープを使用することはありますか?
それと、ヒープサイズがヒープ最大使用量に近付いた場合、
ガベージコレクションが発生するようになりますか?
- 988 :デフォルトの名無しさん:2018/11/13(火) 06:25:54.30 ID:qPPBH0nu.net
- >>987
インスタンスて何?
プロセスのことか?
- 989 :デフォルトの名無しさん:2018/11/13(火) 06:56:40.27 ID:t6QPVwz9.net
- >>987
> ヒープ最大使用量=2GBを超えてヒープを使用することはありますか?
ないよ、ヒープ最大使用量を超えるとOutOfMemoryErrorが投げられる
> ヒープサイズがヒープ最大使用量に近付いた場合、
> ガベージコレクションが発生するようになりますか?
なるよ、サーバを管理してるけどたまにアプリにメモリリークがあって
メモリが解放されなくてGCが頻発して最終的にOutOfMemoryErrorになる
ことがある、急速にメモリを消費してGCが稼働する間もなくエラーになることもある
- 990 :デフォルトの名無しさん:2018/11/13(火) 08:44:10.18 ID:z+WaWgDc.net
- >> 985
Object o = new Object();
とかです!
>> 986
ありがとうございます!
ということは、PCのメモリを全部食い潰すことはないのですね。
助かります。
- 991 :デフォルトの名無しさん:2018/11/13(火) 09:22:02.07 ID:3SCk9MN5.net
- あほやな
- 992 :デフォルトの名無しさん:2018/11/13(火) 16:13:23.72 ID:BO12xGFO.net
- 参照にnull渡してもすぐに廃棄してくれないから
メモリぎりぎりの処理をするとGC発生せずに落ちる
OutOfMemoryErrorの前に1度はフルGCしろよと思う
- 993 :デフォルトの名無しさん:2018/11/13(火) 23:42:29.05 ID:u0U8MmUH.net
- hotspotはやってるだろ?今やってないのか?
- 994 :デフォルトの名無しさん:2018/11/18(日) 19:34:14.79 ID:pZxF/iWK.net
- java11に移行しようとすると、ライブラリ類が対応してるのか不安
自分のアプリだけテストしても不十分だ
例えばNettyもjava11で少し問題が出たようだ
- 995 :デフォルトの名無しさん:2018/11/18(日) 19:51:16.43 ID:pZxF/iWK.net
- java8からの移行を考えてたけど、やっぱり一部パッケージが削除されたせいで
動作しないものが出るようだ
移行作業はまずビルドが成功するかという問題があって、
失敗したら最悪ライブラリを自分で修正しないといけなくて、
ビルドに成功したとしてもライブラリはjava11でテストされていないという状況
ほんの1年ちょい前はjava8が最新だったんだが・・・
こんなの新規プロジェクト間に合わないだろ
移行作業しつつ開発進めないといけない
- 996 :デフォルトの名無しさん:2018/11/18(日) 21:06:07.68 ID:pZxF/iWK.net
- https://builder.japan.zdnet.com/sp_oracle/35095997/2/
>Java Policy Tool
これの代替手段はありますか?
>時代遅れとなったセキュリティAPI
これはjava.securityのことですか?java11でそのパッケージが無くなるんですか?
- 997 :デフォルトの名無しさん:2018/11/18(日) 23:08:00.76 ID:JqgRfJJT.net
- >>996
>これの代替手段はありますか?
ない。どうせpolicy toolはカスタムポリシー対応してないからポリシーファイルは手書きする必要がある。
そもそも、これ技術デモだから。
>これはjava.securityのことですか?java11でそのパッケージが無くなるんですか?
非ポリシーベースのsecurity apiのうち1.1時代のだけ。
- 998 :デフォルトの名無しさん:2018/11/18(日) 23:39:07.26 ID:pZxF/iWK.net
- java8から11に移行する場合、security apiは特に変わってないと考えていいですか?
- 999 :デフォルトの名無しさん:2018/11/19(月) 00:09:28.48 ID:MZ1FDVWs.net
- あー1.1のAPIを8で使ってたらそうじゃないのか
- 1000 :デフォルトの名無しさん:2018/11/19(月) 00:35:10.50 ID:7qQcp7Oe.net
- 正確にはcheckPermissionに転送してるだけのSecurityManagerの一部のメソッドだけどね。
今のところ削除予定なのは特殊なやつだけだけど1.1/1.2時代のapi削除するのは時間の問題だと思うよ。
- 1001 :デフォルトの名無しさん:2018/11/19(月) 00:47:13.92 ID:MZ1FDVWs.net
- 何で最初から理想的なAPIにできないんだろう?
- 1002 :デフォルトの名無しさん:2018/11/19(月) 11:00:29.57 ID:C68x9bSi.net
- >>1001
君が作ってないからさ
君が作れば理想的なものになる
今すぐ新言語を作れ
- 1003 :デフォルトの名無しさん:2018/11/19(月) 11:04:42.70 ID:X6/A5UND.net
- >>1001
バグと同じで改修に次ぐ改修で無理が想定外や見落としが出て、結果継ぎ接ぎになるんだろ。
- 1004 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1004
274 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★