★★Java質問・相談スレッド181★★

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん2018/02/10(土) 17:49:40.56ID:l9ZzjyKP
プログラミング言語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/

952デフォルトの名無しさん2018/11/09(金) 16:29:29.33ID:OW/zGENl
履歴書に書くことが出来る

953デフォルトの名無しさん2018/11/09(金) 16:30:54.51ID:OW/zGENl
そして面接の時にJavaの質問をされ墓穴を掘る

954デフォルトの名無しさん2018/11/09(金) 16:59:59.72ID:Jo0ooGHD
マ板へ逝けと既に書かれていた

955デフォルトの名無しさん2018/11/09(金) 22:48:54.87ID:zMMfYdX4
総称型を使った抽象クラスがあって、その具象クラス全部を処理するコードを書きたいんだけど
以下のようにするとコンパイルエラーになるのでできません。
いちいち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) {
}
}
}

956デフォルトの名無しさん2018/11/09(金) 22:51:18.43ID:zMMfYdX4
修正しますこうでした。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) {
}
}
}

9579512018/11/09(金) 23:58:00.70ID:o+E2GY7o
ありがとうございました。

958デフォルトの名無しさん2018/11/10(土) 00:57:56.92ID:XE+BpAI8
こんな記述を見かけたんですが
>Java11からはJavaFXは、ただのライブラリになったので、JavaFX側がMavenのCentral Repositoryにjarを置いてくれていたりするので、 OpenJDK11でJavaFX11を使うのであればpom.xmlのdependencyに入れるだけの話である。

JavaFXはネイティブDLLを使っていますか?
使っている場合、pom.xmlで入れられるライブラリになったというのは、
全環境用のネイティブコードが同梱されるということですか?
ほとんどのJavaライブラリは純粋なJavaコードで環境非依存だと思いますが
環境依存したライブラリはどういう扱いになるんでしょう

959デフォルトの名無しさん2018/11/10(土) 01:36:26.97ID:XE+BpAI8
>>956のコードですが
fの引数は? extends Testだから、Testを受け取れても良くないですか?
? extends Testで期待できるのはTestのインターフェースであり、
TestはTestのインターフェースを持っています。
しかしコンパイルエラーになります

960デフォルトの名無しさん2018/11/10(土) 02:07:52.87ID:XE+BpAI8
少し調べました。状況は、
A extends Test と Test  が非変であり、親子関係が完全に無視される。
f(A a)はConsumerであり、PECS原則から、? super Aを指定できるとよいが、
総称型ではないので指定できない。
Test2<A super Test>も記述不可
f(Test a)にすれば解決するが、Test2の子クラスはfの引数の型を限定したいかもしれない。

961デフォルトの名無しさん2018/11/10(土) 02:33:26.87ID:XE+BpAI8
なぜか一度ワイルドカードを経由する+キャストという方法で解決できました。
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) {}
}
}

962デフォルトの名無しさん2018/11/10(土) 23:27:50.60ID:49ccZS6D
>>958
環境ごとにjar分けて共有ライブラリ含めるだけだけど。joglとか昔からそうじゃん。

963デフォルトの名無しさん2018/11/10(土) 23:46:19.83ID:6id28qN8
JVMは環境ごとに用意されてるから、その部分で対応してるんでしょう
わかってると思うが当然標準ライブラリとして提供してるAPI自体は環境に依存してない

まぁ internal なコードに環境による場合分けくらいは書いてあるかもしれんけど、
JVMにはその環境用のコードさえあればいいから、全環境のネイティブコードは必要ない

964デフォルトの名無しさん2018/11/10(土) 23:55:28.83ID:6id28qN8
あぁごめん、Java11からの話か
そうだね、環境依存のjarと環境依存してないjarを2つ別々にダウンロードするんだろうね多分
swt+JFaceの、swt部分だけ環境依存してるのと一緒
使ったこと無いけど 上で言われてるJOGLもそんな感じかな

まぁ軽めのデータベースのjarとか環境依存のファイル全部ぶっこんでくることもあったりするけど

965デフォルトの名無しさん2018/11/11(日) 11:11:28.64ID:6MwZdEZT
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としていますが、ランダム数値です。

966デフォルトの名無しさん2018/11/11(日) 11:27:22.91ID:wM/j3zKs
>>965
普通にWHERE書け
SQL分からないんならJavaの前にSQLの入門書を終えてきなさい

967デフォルトの名無しさん2018/11/11(日) 12:00:45.21ID:6MwZdEZT
"SELECT * FROM fruit WHERE PRICE = X"だと
Xが文字列になってしまうと。
Str1とXを比較すればよいと考えていましたが難しい

968デフォルトの名無しさん2018/11/11(日) 13:07:00.71ID:iJkGWVs5
プレースホルダ

969デフォルトの名無しさん2018/11/11(日) 18:24:10.42ID:0F8Q4Ddx
>>967
prepare にするかそのまんまSQL文の中に文字列で埋め込まれるようにするか、だな。

prepare の場合はこんな感じね。PreparedStatement クラス使うやつ。"?" の部分が置き換え部分。
https://qiita.com/ika_katsuo/items/dfbf9ed227ca08256760

970デフォルトの名無しさん2018/11/11(日) 18:43:06.39ID:KBFxC5Cm
もし変数xの値が一つしかないなら
プリペアドステートメントでいちいち事前コンパイルする必要がない
ふつうにSQL問い合わせの文字列作るほうが速い簡単お手軽

971デフォルトの名無しさん2018/11/11(日) 21:38:36.99ID:3JRsWB+V
今時直接データ埋め込みとかあり得んだろ…

972デフォルトの名無しさん2018/11/11(日) 22:00:57.21ID:KBFxC5Cm
知能が低いと
文字列の加工すらできないのか

なるほどな

973デフォルトの名無しさん2018/11/11(日) 22:26:11.35ID:cBZ/CGbZ
それが何を意味するのかも考えずどっかからコピペしてるからそういう質問が出るんだろうけど、技術書見ればプリペアードステートメントとか順序を追って書いてあるもんでもないのかね

974デフォルトの名無しさん2018/11/11(日) 22:28:33.94ID:VPyBQ4Rk
質問スレで質問に対して煽るやつの知能も大概だとおもうぞ

975デフォルトの名無しさん2018/11/11(日) 22:31:24.54ID:3JRsWB+V
文字列の加工程度でドヤるとか w

976デフォルトの名無しさん2018/11/11(日) 22:32:01.58ID:4KGbvnyj
何も調べずに質問する方が大概だろ、質問者は神様ですってかw

977デフォルトの名無しさん2018/11/11(日) 23:35:34.02ID:infpFr5m
>>963
> わかってると思うが当然標準ライブラリとして提供してるAPI自体は環境に依存してない
>
> まぁ internal なコードに環境による場合分けくらいは書いてあるかもしれんけど、
> JVMにはその環境用のコードさえあればいいから、全環境のネイティブコードは必要ない

そんなことないから。java6以降環境依存な標準API追加してるからjava側で場合分けする必要ある。

978デフォルトの名無しさん2018/11/12(月) 00:34:16.10ID:MtlIUxHY
>>970
prepare にしとくとSQLインジェクション防止になるというのもある。
https://blogs.oracle.com/sec/042_sqlinjection_1
もちろんどうやってもそんなことは起こり得ないし1回しか同じSQL文使わないみたいな場合は埋め込めばいい。

979デフォルトの名無しさん2018/11/12(月) 16:56:20.13ID:ayEXvCJf
spring frameworkはMVCですか?

980デフォルトの名無しさん2018/11/12(月) 17:14:22.45ID:cpYKEuEA
spring frameworkはフレームワークで、MVCはプログラムの一つのモデルです。

981デフォルトの名無しさん2018/11/12(月) 17:37:37.98ID:xaL5+kQv
>>977
> 環境依存な標準API
例えば?

982デフォルトの名無しさん2018/11/12(月) 17:50:53.29ID:ayEXvCJf
>>980
どのモデルを採用してるのですか?

983デフォルトの名無しさん2018/11/12(月) 22:41:38.37ID:JKEbmYKN
>>981
awtのDesktop、nio2(more nio)のファイルパーミッション等、apple javaのeawt移植。

あと6以前からのjava soundもjreに含まれてるのは単なるRIで仕様と実装は別物で、
実装部分のLineの挙動はプラットフォーム依存。7以降MIDIのソフトシンセはクロスプラットフォームになったけど。

984デフォルトの名無しさん2018/11/12(月) 23:02:27.75ID:THHCGQKY
Javaのメモリ管理に関して教えてください!

例えば、PCのメモリが32GBあるPCで、
インスタンスを大量生成するプログラムを動かすとします。
また、このプログラムの起動引数に、ヒープ最大使用量=2GB
を設定して起動していたとします。

この場合、大量のインスタンスを生成していった場合ですが...
ヒープ最大使用量=2GBを超えてヒープを使用することはありますか?

それと、ヒープサイズがヒープ最大使用量に近付いた場合、
ガベージコレクションが発生するようになりますか?

985デフォルトの名無しさん2018/11/13(火) 06:25:54.30ID:qPPBH0nu
>>984
インスタンスて何?
プロセスのことか?

986デフォルトの名無しさん2018/11/13(火) 06:56:40.27ID:t6QPVwz9
>>984
> ヒープ最大使用量=2GBを超えてヒープを使用することはありますか?

ないよ、ヒープ最大使用量を超えるとOutOfMemoryErrorが投げられる

> ヒープサイズがヒープ最大使用量に近付いた場合、
> ガベージコレクションが発生するようになりますか?

なるよ、サーバを管理してるけどたまにアプリにメモリリークがあって
メモリが解放されなくてGCが頻発して最終的にOutOfMemoryErrorになる
ことがある、急速にメモリを消費してGCが稼働する間もなくエラーになることもある

987デフォルトの名無しさん2018/11/13(火) 08:44:10.18ID:z+WaWgDc
>> 985

Object o = new Object();
とかです!

>> 986

ありがとうございます!
ということは、PCのメモリを全部食い潰すことはないのですね。
助かります。

988デフォルトの名無しさん2018/11/13(火) 09:22:02.07ID:3SCk9MN5
あほやな

989デフォルトの名無しさん2018/11/13(火) 16:13:23.72ID:BO12xGFO
参照にnull渡してもすぐに廃棄してくれないから
メモリぎりぎりの処理をするとGC発生せずに落ちる
OutOfMemoryErrorの前に1度はフルGCしろよと思う

990デフォルトの名無しさん2018/11/13(火) 23:42:29.05ID:u0U8MmUH
hotspotはやってるだろ?今やってないのか?

991デフォルトの名無しさん2018/11/18(日) 19:34:14.79ID:pZxF/iWK
java11に移行しようとすると、ライブラリ類が対応してるのか不安
自分のアプリだけテストしても不十分だ
例えばNettyもjava11で少し問題が出たようだ

992デフォルトの名無しさん2018/11/18(日) 19:51:16.43ID:pZxF/iWK
java8からの移行を考えてたけど、やっぱり一部パッケージが削除されたせいで
動作しないものが出るようだ
移行作業はまずビルドが成功するかという問題があって、
失敗したら最悪ライブラリを自分で修正しないといけなくて、
ビルドに成功したとしてもライブラリはjava11でテストされていないという状況

ほんの1年ちょい前はjava8が最新だったんだが・・・
こんなの新規プロジェクト間に合わないだろ
移行作業しつつ開発進めないといけない

993デフォルトの名無しさん2018/11/18(日) 21:06:07.68ID:pZxF/iWK
https://builder.japan.zdnet.com/sp_oracle/35095997/2/
>Java Policy Tool

これの代替手段はありますか?

>時代遅れとなったセキュリティAPI
これはjava.securityのことですか?java11でそのパッケージが無くなるんですか?

994デフォルトの名無しさん2018/11/18(日) 23:08:00.76ID:JqgRfJJT
>>993
>これの代替手段はありますか?
ない。どうせpolicy toolはカスタムポリシー対応してないからポリシーファイルは手書きする必要がある。
そもそも、これ技術デモだから。

>これはjava.securityのことですか?java11でそのパッケージが無くなるんですか?
非ポリシーベースのsecurity apiのうち1.1時代のだけ。

995デフォルトの名無しさん2018/11/18(日) 23:39:07.26ID:pZxF/iWK
java8から11に移行する場合、security apiは特に変わってないと考えていいですか?

996デフォルトの名無しさん2018/11/19(月) 00:09:28.48ID:MZ1FDVWs
あー1.1のAPIを8で使ってたらそうじゃないのか

997デフォルトの名無しさん2018/11/19(月) 00:35:10.50ID:7qQcp7Oe
正確にはcheckPermissionに転送してるだけのSecurityManagerの一部のメソッドだけどね。
今のところ削除予定なのは特殊なやつだけだけど1.1/1.2時代のapi削除するのは時間の問題だと思うよ。

998デフォルトの名無しさん2018/11/19(月) 00:47:13.92ID:MZ1FDVWs
何で最初から理想的なAPIにできないんだろう?

999デフォルトの名無しさん2018/11/19(月) 11:00:29.57ID:C68x9bSi
>>998
君が作ってないからさ
君が作れば理想的なものになる
今すぐ新言語を作れ

1000デフォルトの名無しさん2018/11/19(月) 11:04:42.70ID:X6/A5UND
>>998
バグと同じで改修に次ぐ改修で無理が想定外や見落としが出て、結果継ぎ接ぎになるんだろ。

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 281日 17時間 15分 2秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。