2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

☆★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 ★