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

このエントリーをはてなブックマークに追加
301デフォルトの名無しさん
無駄にシングルトンにしないで全部staticでいいよ
インターフェイス被せたりしないなら何の意味もない
302227:2011/08/29(月) 23:14:13.25
>>381
そうですか。全体的に見直してみます!
303デフォルトの名無しさん:2011/08/30(火) 00:25:17.58
配列に関する質問です。

例えば
Hoge[]hoge = new Hoge[10000];
という配列を作り、
hoge[100]までしか使わないことによって、どのようなデメリットが発生しますか?
304デフォルトの名無しさん:2011/08/30(火) 00:37:02.28
lengthが使えないので面倒
メモリの無駄
305デフォルトの名無しさん:2011/08/30(火) 02:00:47.36
>>381でどんな素晴らしいレスが来るのか期待
306デフォルトの名無しさん:2011/08/30(火) 03:37:40.61
Java SE 6 ドキュメント 日本語版がほしいんだけど
DLできません
英語版はDLできる
どうなってんだ
307デフォルトの名無しさん:2011/08/30(火) 03:59:12.17
スレの上の方に補完あるよ
308デフォルトの名無しさん:2011/08/30(火) 04:10:13.72
>>307
ありがとう補完分を手に入れられました。
冷静にスレ読んだら英語版だけになったのをやっと理解しました
久しぶりに勉強再開するので日本語翻訳版があって当たり前だと思い込んでました。
309デフォルトの名無しさん:2011/08/30(火) 09:14:48.80
2つ入力欄があって

Aに入力あり Bに入力ありの場合
Aに入力あり Bに入力なしの場合
Aに入力なし Bに入力ありの場合
Aに入力なし Bに入力なしの場合


で処理を分けたいんですけどどのようにすればスマートに行きますか?
310デフォルトの名無しさん:2011/08/30(火) 09:17:00.43
if文を使えばいい。
311デフォルトの名無しさん:2011/08/30(火) 09:31:28.78
Obserberパターンだな
項目の状態を監視するクラスを作って、更新の都度メソッドを呼び出せばいい。
複雑な設定画面や帳票画面なんかでよく使われる。
312デフォルトの名無しさん:2011/08/30(火) 09:33:13.34
すまん上げてしまった。
313デフォルトの名無しさん:2011/08/30(火) 11:06:53.46
唐突にすいません。ちょっと困っています。
今研究室でニュートン法やSD法などを勉強しながらjavaを使ってプログラムをしたりしているのですが、そういった解析に関するプログラムについての質問はどこですればいいのでしょうか?
もしよければ教えてください。
314デフォルトの名無しさん:2011/08/30(火) 11:12:27.93
学校の先生に聞け
JavaよりCの宿題スレとかFortranのスレとかの方が詳しい人いると思う
315デフォルトの名無しさん:2011/08/30(火) 19:24:19.93
マルチうぜえ
316デフォルトの名無しさん:2011/08/30(火) 19:24:49.45
317デフォルトの名無しさん:2011/08/30(火) 21:19:01.91
>>309
白い目で見られると思うけどビットフラグ
318デフォルトの名無しさん:2011/08/30(火) 22:31:14.01
Javaを使ってコマンドプロンプトの閉じるボタンを押しても無効化できる方法ってありますか?
319デフォルトの名無しさん:2011/08/31(水) 00:18:27.23
んな環境依存なことJavaでまともな方法でできるわけない
320デフォルトの名無しさん:2011/08/31(水) 00:27:08.17
拡張子が.javaらしいファイルを落としてきたのですが
これをどうすればいいですかね
321デフォルトの名無しさん:2011/08/31(水) 00:32:38.01
jdkをインストールする所から始めると考えると結構骨だな
322デフォルトの名無しさん:2011/08/31(水) 00:38:23.65
323デフォルトの名無しさん:2011/08/31(水) 00:40:57.63
>>320
らしいって何だ
拡張子見ても.javaじゃ無いって事か?
324デフォルトの名無しさん:2011/08/31(水) 00:41:40.95
拡張子表示してないんだろう。。。
325デフォルトの名無しさん:2011/08/31(水) 00:45:33.95
>>320
メモ超ひらいて.jaraらしいファイルをドラッグ&ドロップ
326デフォルトの名無しさん:2011/08/31(水) 02:35:46.19
誰か居る?
327デフォルトの名無しさん:2011/08/31(水) 02:40:53.57
iruyo
328デフォルトの名無しさん:2011/08/31(水) 02:47:02.51
使い終わった配列をnullにするとどのタイミングでガーベージがクリアしてくれるんだろう。
329デフォルトの名無しさん:2011/08/31(水) 02:51:17.57
状況によるとしか言えないんじゃないのか
少なくともnullを代入した直後にすぐgcはされないだろうけど
330デフォルトの名無しさん:2011/08/31(水) 08:54:56.95
nullにしたあとマークされた後にGCが来るタイミングじゃないの?
331デフォルトの名無しさん:2011/08/31(水) 09:02:49.16
>>329
リファレンスカウントを使った実装が
無いとも言い切れないんじゃないかと思うが
332デフォルトの名無しさん:2011/08/31(水) 09:57:12.65
>>331 Javaなのに?
333デフォルトの名無しさん:2011/08/31(水) 10:02:34.14
そういやG1GCってもうデフォで有効になってるんだっけ?
334デフォルトの名無しさん:2011/08/31(水) 10:25:42.48
>>328
その質問に明確な答えが用意されていれば
Javaの普及率はもっと進んでいたであろう

って答えじゃダメかい?
335デフォルトの名無しさん:2011/08/31(水) 11:05:52.73
長く使ったオブジェクトなら使い終わってもなかなかGCは来ないよ
早くGCしてほしいなら中途半端に保持しないで速攻で使い捨てろ
336デフォルトの名無しさん:2011/08/31(水) 12:17:19.45
日立電子サービスの者が掲示板で問合せをしている。
悠長なもんだ。
しかもマルポ

http://bbs.wankuma.com/index.cgi?mode=al2&namber=61716
337デフォルトの名無しさん:2011/08/31(水) 12:38:30.60
338デフォルトの名無しさん:2011/08/31(水) 12:42:36.28
HashMapとArrayListの両方の機能を持ち合わせたようなクラスがあるとうれしいんだけど
そういう機能を持ったクラスって無いのかな?
339デフォルトの名無しさん:2011/08/31(水) 13:05:17.13
リフレクションを使って取得したオブジェクトを、文字列化しようとしています。

Object rtObj = method.invoke(obj, new Object[]{}); //getterを呼ぶ
if (rtObj != null && rtObj.getClass().isArray()) {
  try {
    rtObj = Arrays.asList((Object[])rtObj); //String[]などをList化する
  } catch (Exception ex) {
    //TODO: boolean,int,float,doubleの配列を加工する
  }
}
String rtObjStr = (rtObj==null) ? "null" : rtObj.toString(); //Listなので"[1, 2, 3]"と表示される

TODO のところがわからないので教えてください。
プリミティブ型の配列の型を判別し、List化または文字列化するには
どのようなコードを書けばよいのでしょうか?
340デフォルトの名無しさん:2011/08/31(水) 13:36:27.33
>>338
google collectionsのmultimapみたいな奴?
341デフォルトの名無しさん:2011/08/31(水) 14:45:46.29
>>339
//List版
if (rtObj instanceof boolean[]) {
  boolean[] pa = (boolean[])rtObj;
  Boolean[] wa = new Boolean[pa.length];
  for (int i = 0; i < pa.length; i++) wa[i] = Boolean.valueOf(pa[i]);
  rtObj = Arrays.asList(wa);
} else (rtObj instanceof int[]) {
//以下延々と続く……

//文字列版
if (rtObj instanceof boolean[]) {
  boolean[] a = (boolean[])rtObj;
  StringBuilder sb = new StringBuilder("[");
  for (int i = 0; i < a.length - 1; i++) sb.append(a[i]).append(", ");
  if (0 < a.length) sb.append(a[a.length - 1]);
  sb.append("]");
  rtObj = sb;
} else (rtObj instanceof int[]) {
//以下延々と続く……
342デフォルトの名無しさん:2011/08/31(水) 15:05:11.59
>>329-335
ありがとう基本的には>>335を重視してる
343デフォルトの名無しさん:2011/08/31(水) 15:48:27.50
>>341
ありがとうございます。
344デフォルトの名無しさん:2011/08/31(水) 16:06:49.80
>>340
すげーな。俺は>>338が何を聞きたいのかさっぱりわからんかったぞ。

>>339
CommonsのLangにToStringBuilderみたいな名前のが無かったっけ?
要求にマッチしてるかは知らんけど。
345デフォルトの名無しさん:2011/08/31(水) 18:51:57.69
こういう書き方ってありですか?

ArrayList<String[]>hoge = new ArrayList<String[]>();

hoge.get(1)[2] = "らららー";
346デフォルトの名無しさん:2011/08/31(水) 20:57:14.15
ちょっとした内部実装に使うのはあり
クラスの外に晒すのはなし
347デフォルトの名無しさん:2011/08/31(水) 22:08:44.86
>>339
オブジェクト指向風味

public class ListAdapter extends AbstractList<Object> {
private final Object target;
public ListAdapter(Object target) { this.target = target; }
@Override public Object get(int index) { return Array.get(target, index); }
@Override public int size() { return Array.getLength(target); }
}
348デフォルトの名無しさん:2011/08/31(水) 22:25:10.05
349デフォルトの名無しさん:2011/08/31(水) 22:48:22.22
>>216
MATLABなんかに使われてるところなんかからすると、日本人の言語や思考にあってないのかもね。
理系の人が少ないのもあるだろうし。
350デフォルトの名無しさん:2011/08/31(水) 23:19:24.91
jvmの未定義オペコードがだいぶ残っている状態でずいぶん経ちますが複素数とかスタック構造体とかアレイ・ストリーム演算(sse,vectorなど)とか欲しいですよね。
そのようなjava言語改定もせず余っているオペコード枠も埋めないのはどうしてですか?
351デフォルトの名無しさん:2011/08/31(水) 23:24:01.79
数値計算はマイナーな用途だから
値型は確かに欲しいけどそれより浮動小数点例外が欲しい
352デフォルトの名無しさん:2011/09/01(木) 00:27:59.08
浮動小数点例外てのはqnan,snanですよね。
webでも使ってるところをあまり見たことないですがどんな用途の時に使うんですか?
353デフォルトの名無しさん:2011/09/01(木) 00:59:07.29
デバッグに使うんだよ
数値計算だとバグで結果がNaNやInfで埋め尽くされることはよくあるので
その原因特定に使える
354デフォルトの名無しさん:2011/09/01(木) 01:08:45.09
どういう理由でオペコードがだいぶ余っているのか知りませんが、(仮想)計算機はosと同じくcpu,gpu,dmaなどのハード・チップ提供の機能にアクセスする手段を持ってこそナンボのものだと思うんですけど・・・
355デフォルトの名無しさん:2011/09/01(木) 01:16:50.35
元々その辺はJNIに任せる予定だったんじゃなかったかな。
Javaはそれよりも高いレベルの処理を受け持つといったように役割が明確に分かれてたはず。
356デフォルトの名無しさん:2011/09/01(木) 02:03:22.76
ところが最近のモーバルとか組み込みはcpu 1G, strage 4Gなんて当然ですし、オペコードが15年前の32bits pc仕様のままなのはどうなんでしょう・・・
357デフォルトの名無しさん:2011/09/01(木) 05:00:22.96
Javaで、Rubyでいうところのクラスインスタンス変数に相当するものはありますか。
クラスインスタンス変数とは、子クラスごとに違う値を設定できるようなクラス変数です。

class Parent {
 static String var = null;
}
class Child1 extends Parent {
 static { var = "Foo"; } // Parent.var とは違う値を保持する
}
class Child2 extends Parent {
 static { var = "Baz"; } // Child1.var とは違う値を保持する
}
358デフォルトの名無しさん:2011/09/01(木) 07:45:38.79
子クラスと親クラスで同名のprivate static final なフィールドは宣言できたと思うけど。
もちろん子クラス同士でも。
Java的な方法はgetterをオーバロードしてそれぞれの子クラスで返す定数値を定義する、でしょうね。
359デフォルトの名無しさん:2011/09/01(木) 08:24:55.33
>>357
ない。
メソッド使っていいのなら似たようなことは可能。

class Oya {
private static String VAR = null;

public static String getValue() {
return Oya.VAR;
}
}

class Ko {
private static String VAR = "Foo";

public static String getValue() {
return Ko.VAR;
}

VAR, getValue()はオーバーライドではなく、隠蔽であることに注意。
内部情報はそのまま晒すなと。
360デフォルトの名無しさん:2011/09/01(木) 08:30:55.90
Ko にextends Oyaつけ忘れてた。
脳内補完頼む。

>>358
オーバーロードとオーバーライドは別物だよ?
361デフォルトの名無しさん:2011/09/01(木) 09:07:39.93
>>356
スタックマシンだから少なくて済むし
何のための仮想マシンだと思ってるのか
特定のCPUに依存したら意味がない
バイトコードはあくまで軽く前処理されたソースコードであって、そこから先はJITコンパイラの仕事
362デフォルトの名無しさん:2011/09/01(木) 09:16:57.71
>>359
なるほど。
やりたいことは、ActiveRecordのように、クラス毎にテーブル名を設定することです。
protected class Entry {
 public static String getTableName() { return null; }
}
public class Product extends Entity {
 private String tableName = "products";
 public static String getTableName() { return tableName; }
}
public class Order extends Entity {
 private String tableName = "orders";
 public static String getTableName() { return tableName; }
 //or public static String getTableName() { return "orders"; }
}
とするしかないってことですかね。
うーん、いまいち。
363デフォルトの名無しさん:2011/09/01(木) 09:23:38.55
>>360
ごめん別の解法書いてて書き直した際にそこだけ修正漏れた
364デフォルトの名無しさん:2011/09/01(木) 09:31:39.01
>>362
クラスとテーブルの対応が動的に変わらないのなら、自分ならアノテーションを考える。

@Bind(table="fooMaster")
public class FooEntity extends Entity {
/* ... */
}

365デフォルトの名無しさん:2011/09/01(木) 10:02:21.96
>>357ってできないんだ
しらんかった
366デフォルトの名無しさん:2011/09/01(木) 10:26:35.79
>>365
上にあるとおり、サブクラスで親クラスと同じ名前のstatic変数を定義することで、
親クラスの変数を隠蔽すれば、それっぽい感じにはなるな。
ただ、そのまま見せると変更に弱くなるからメソッドを挟んでおくってだけ。

例えばVARをStringから何かのクラスに変更して、返すのはそのクラスの属性にするとかね。
367デフォルトの名無しさん:2011/09/01(木) 10:33:42.60
>>364
アノテーション使っても、子クラス毎にstatic変数やstatciメソッドを定義しないといけないから、解決になってないと思うけど。

for (Annotation ann: FooEntity.getDeclaredAnnotations()) {
 if (ann instanceof Bind) {
  String value = ((Bind)ann).value();
  FooEntity.setTableName(value);  // これをするためには
 }
}

class Entity {
 private static tableName;
 public static void setTableName(String name) { tableName = name; } // 親クラスに定義するだけではだめで、
}

class FooEntity extends Entity {
 private static tableName;
 public static void setTableName(String name) { tableName = name; } // 子クラス毎に定義しないといけない
}
368デフォルトの名無しさん:2011/09/01(木) 11:24:18.10
クラス変数を子ごとに別に持ちたい奴が変更なんて考えてるわけないから隠蔽するだけでいいよ。
369デフォルトの名無しさん:2011/09/01(木) 11:46:53.02
>>368
ちがうよ。アノテーションで指定した値をクラス変数に保存するためにstaticなsetterを使ってるのであって、変更を許すかどうかは関係ない。
370デフォルトの名無しさん:2011/09/01(木) 12:36:43.60
まともなジェネリクスがあれば解決できるパターンだが、Javaだからな…
371デフォルトの名無しさん:2011/09/01(木) 13:11:45.51
>>367
ごめんなさい。きちんと意図が伝わらない書き方だったかな。

アノテーションに書けばクラス変数は不要だろうと考えた。
O/Rマッパーなりフレームワークなりの規約として変数が必要なら仕方がないんだけどね。
372デフォルトの名無しさん:2011/09/01(木) 13:50:30.14
>>361
それが、jvm仕様より歴史が古くさまざまなcpu向けのシー言語ですら_Complexやスタックstructが当り前のようにサポートされていますが、15年以上前の思想のまま止まっていて32bitsマシンが前提のバイトコードに付いて何か勘違いしてませんか?
373デフォルトの名無しさん:2011/09/01(木) 14:26:20.70
>>372
バイトコードはJavaのソースコードのセマンティクスをだいたい維持してるよ?
詳細な最適化をjavacの段階で行う代わりにJITの段階で行っているに過ぎない。
そもそもJVMはスタックマシンで機械語とは構造が全く違うだろう。
JVMがポータブルな形でユーザー定義値型に対応することはもちろん可能だろうし
個人的にはそうなって欲しいが、なぜそれをCPUの命令と直接結びつけて考える必要がある?
374デフォルトの名無しさん:2011/09/01(木) 15:57:10.00
15年前は1995年でウインドウズ95が出た頃ですが、その頃の量産型計算機(いわゆるパソコン)は
cpu 200-400M, mem 16-80Mでfpu unit(mmx,sse,ieee)と、graphics vramが16M-64Mなど大きくなり2d graphics(directx gdi+, awt grahics2d)が本格的に一般化するころでした。
ただしjavaでは1.4辺りまではawtでソフト処理のままハード提供(2000年当時はos提供)の2d graphicsを利用せず、
結果的にswingが遅く実用的でないので2dとdesktopはswt(eclipse)やflash(applet)に食われてしまいました。

現在2010年での32bits普及型(タブレットやスマート)はcpu 400M-1G, gpu 3d(opengl), array unit(cell,vector)など
ハードで用意されてますが組み込み採用を目指している現在のjvm仕様ではその機能にアクセスできないので簡単に利用できないのと同じです。
バイトコードの追加はc99機能程度のは当然ですが、他にアレイ演算(ベクトル処理)やマルチコア(マルチプロセス)などもサポートして現代的なjvm仕様が望ましいと思います。
375デフォルトの名無しさん:2011/09/01(木) 16:12:04.80
つ C#
376デフォルトの名無しさん:2011/09/01(木) 16:16:31.33
CやJavaが言語仕様レベルでSIMDをサポートしてるのか? そんなもんコンパイラの問題だろ?
それと同じ理屈なんだが
バイトコードが1対1で機械語に変換されるとでも思ってるのか?
377デフォルトの名無しさん:2011/09/01(木) 16:17:41.74
awtの前例を出したのは、今までのようにJITを前提としたosの抽象化のこだわりが、awt/swing時の問題点とまったく同じ状況なのです。
1.4ではVolatileImage, BufferStrategyが出てawt抽象化のこだわりを捨てて2dがだいぶ改善されたのと似ていますが、
現在のjvmバイトコード仕様とJIT依存でなくユーザが追加バイトコードを介してそれらハード機能を直接利用できるようにすることに結局なるだろうということです。
378デフォルトの名無しさん:2011/09/01(木) 16:26:50.17
>>376
現在の32bitsハード提供機能について15年前の古い思想のままで何か勘違いしてると思いますが、
現代的な32bitsスマートやボーブル・パソコンは、fpu(ieee float)が使えるのは当然でSIMDや3D(opengl,directx)やマルチコア(プロセス)などもfpu unitと同じくどのjavaが動くハードなら当り前に使えると考えて問題ありません。
逆に問題あるようなハードでjavaを動かすなら、コンパイラがソフト(ライブラリ)でレイヤーするアプローチをします。
379デフォルトの名無しさん:2011/09/01(木) 16:38:26.44
JDK
インストールの手順が分かりません・・・
http://java.sun.com/j2se/1.5.0/ja/download.html
このページのどれをダウンロードしたらいいのですか?

JDK 5.0 Update 22 with NetBeans IDE 6.7.1
を選ぶと、英語で記入欄みたいなの出てくるんですが・・・

380デフォルトの名無しさん:2011/09/01(木) 16:52:29.66
間違えました
JDK 5.0 Update 22
を選ぶと英語で記入欄が出てきます。

java環境でプログラミングしたいんで、手順教えてください・・・
381デフォルトの名無しさん:2011/09/01(木) 16:56:29.13
何が言いたいのかよく分からんが、そういう機能はJNIを使って提供すればいいんじゃね。
個人的にはバイトコードを直接解釈するIPが肥大化してしまうから、組込みにするのに不利になる気がする。
382デフォルトの名無しさん:2011/09/01(木) 16:59:23.93
>>380
それに情報を全部書き込んでSubmitするといいよ。
383デフォルトの名無しさん:2011/09/01(木) 17:04:42.01
>>379-380
Java1.5.0は古い。最新はJava6。
http://java.sun.com/javase/ja/6/download.html
のJDKってリンクをクリックしろ。
そしてその後は英語の指示に従え。
384デフォルトの名無しさん:2011/09/01(木) 17:06:14.80
Java7出てるんだけどね、一応
385デフォルトの名無しさん:2011/09/01(木) 17:14:54.39
>>383
英語の指示って無理無理wwww

俺は本とかでみたんだが、かなり簡単だったぞ・・・
acceptなんちゃらクリック→なんとかmulti languageクリックで

かなり簡単な方法だったが、仕様って変わるよなぁ・・・
386デフォルトの名無しさん:2011/09/01(木) 17:20:38.79
387デフォルトの名無しさん:2011/09/01(木) 18:03:04.33
ひょっとして英語が出来ないのにプログラムやろうとしてるのか?w
388デフォルトの名無しさん:2011/09/01(木) 18:18:35.11
>>387
DLしようとするとき、サインイン?みたいなのが出てくるときと
出てこないときの差って何なのだろう?パッケージの違いなんだろうか?

javaのテストは100点でしたよw文法覚えたのに環境導入できないというw
新たな仕様を理解して、PCに導入、設定を理解、そのインターフェースを理解
することが真の開発スキルということは最近感じつつあります。
それができないので、どうか教えてください。
389デフォルトの名無しさん:2011/09/01(木) 18:29:30.00
先生に聞けよ
390デフォルトの名無しさん:2011/09/01(木) 18:44:45.45
日本語のJavaの本を買えば
391デフォルトの名無しさん:2011/09/01(木) 19:00:15.24
>>388
昔はふるいのやEA取得しようとすると
サインインの必要あったような気がするな。
あと3Dとかも。
違ったっけ。
392デフォルトの名無しさん:2011/09/01(木) 19:02:01.66
>>386
You must accept the Oracle Binary Code License Agreement for Java SE to download this software.
Java SE(このソフトウェア)をダウンロードするためには、あなたはオラクルのバイナリコードライセンスを
受け入れなければなりません。

○Accept License Agreement  ○Decline License Agreement
はい、許諾契約を受け入れます。  契約を承諾しません。

(中略)Download ダウンロード


ここまで理解していてダウンロードできないなら、お前は先生に土下座したほうがいい。
393デフォルトの名無しさん:2011/09/01(木) 19:05:14.78
インターネット上からHTMLファイルを取得して、
それをファイルとして保存せず、
全て変数(String型とか)に流し込んでしまう方法はありますか?
394デフォルトの名無しさん:2011/09/01(木) 19:15:54.56
InputStreamを開いたら後はファイルから文字を読み込むのと一緒だ
395デフォルトの名無しさん:2011/09/01(木) 20:01:02.83
>>383
古いのでいいので教えてくれませんか?
http://java.sun.com/j2se/1.5.0/ja/download.html
こちらでお願いします。
396デフォルトの名無しさん:2011/09/01(木) 20:02:44.50
397デフォルトの名無しさん:2011/09/01(木) 20:21:31.37
Windows Offline Installation, Multi-language
の項目が出てくるパッケージはどれですか?
>>396
一応本とおりに・・
バージョンは全然違いますが。
398デフォルトの名無しさん:2011/09/01(木) 21:18:31.20
399デフォルトの名無しさん:2011/09/01(木) 21:47:56.83
1.5……サポート切れ。どうしても欲しいなら情報書いてSubmitしろ。
1.6(Java6)……サポート中。ライセンスに同意してダウンロードしてね。
1.7(Java7)……サポート中。がんがんダウンロードしてね。
          でもEclipseとかが動くかどうかなんて些細なことは知らないよ。
400デフォルトの名無しさん:2011/09/01(木) 23:32:43.61
JITが嫌なら、実行ファイルを直接生成する静的コンパイラもあるよ?