無駄にシングルトンにしないで全部staticでいいよ
インターフェイス被せたりしないなら何の意味もない
302 :
227:2011/08/29(月) 23:14:13.25
配列に関する質問です。
例えば
Hoge[]hoge = new Hoge[10000];
という配列を作り、
hoge[100]までしか使わないことによって、どのようなデメリットが発生しますか?
lengthが使えないので面倒
メモリの無駄
Java SE 6 ドキュメント 日本語版がほしいんだけど
DLできません
英語版はDLできる
どうなってんだ
スレの上の方に補完あるよ
>>307 ありがとう補完分を手に入れられました。
冷静にスレ読んだら英語版だけになったのをやっと理解しました
久しぶりに勉強再開するので日本語翻訳版があって当たり前だと思い込んでました。
2つ入力欄があって
Aに入力あり Bに入力ありの場合
Aに入力あり Bに入力なしの場合
Aに入力なし Bに入力ありの場合
Aに入力なし Bに入力なしの場合
で処理を分けたいんですけどどのようにすればスマートに行きますか?
if文を使えばいい。
311 :
デフォルトの名無しさん:2011/08/30(火) 09:31:28.78
Obserberパターンだな
項目の状態を監視するクラスを作って、更新の都度メソッドを呼び出せばいい。
複雑な設定画面や帳票画面なんかでよく使われる。
すまん上げてしまった。
313 :
デフォルトの名無しさん:2011/08/30(火) 11:06:53.46
唐突にすいません。ちょっと困っています。
今研究室でニュートン法やSD法などを勉強しながらjavaを使ってプログラムをしたりしているのですが、そういった解析に関するプログラムについての質問はどこですればいいのでしょうか?
もしよければ教えてください。
学校の先生に聞け
JavaよりCの宿題スレとかFortranのスレとかの方が詳しい人いると思う
マルチうぜえ
>>309 白い目で見られると思うけどビットフラグ
Javaを使ってコマンドプロンプトの閉じるボタンを押しても無効化できる方法ってありますか?
んな環境依存なことJavaでまともな方法でできるわけない
拡張子が.javaらしいファイルを落としてきたのですが
これをどうすればいいですかね
jdkをインストールする所から始めると考えると結構骨だな
>>320 らしいって何だ
拡張子見ても.javaじゃ無いって事か?
拡張子表示してないんだろう。。。
>>320 メモ超ひらいて.jaraらしいファイルをドラッグ&ドロップ
326 :
デフォルトの名無しさん:2011/08/31(水) 02:35:46.19
誰か居る?
iruyo
328 :
デフォルトの名無しさん:2011/08/31(水) 02:47:02.51
使い終わった配列をnullにするとどのタイミングでガーベージがクリアしてくれるんだろう。
状況によるとしか言えないんじゃないのか
少なくともnullを代入した直後にすぐgcはされないだろうけど
nullにしたあとマークされた後にGCが来るタイミングじゃないの?
>>329 リファレンスカウントを使った実装が
無いとも言い切れないんじゃないかと思うが
そういやG1GCってもうデフォで有効になってるんだっけ?
>>328 その質問に明確な答えが用意されていれば
Javaの普及率はもっと進んでいたであろう
って答えじゃダメかい?
長く使ったオブジェクトなら使い終わってもなかなかGCは来ないよ
早くGCしてほしいなら中途半端に保持しないで速攻で使い捨てろ
338 :
デフォルトの名無しさん:2011/08/31(水) 12:42:36.28
HashMapとArrayListの両方の機能を持ち合わせたようなクラスがあるとうれしいんだけど
そういう機能を持ったクラスって無いのかな?
リフレクションを使って取得したオブジェクトを、文字列化しようとしています。
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化または文字列化するには
どのようなコードを書けばよいのでしょうか?
>>338 google collectionsのmultimapみたいな奴?
>>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
>>340 すげーな。俺は
>>338が何を聞きたいのかさっぱりわからんかったぞ。
>>339 CommonsのLangにToStringBuilderみたいな名前のが無かったっけ?
要求にマッチしてるかは知らんけど。
こういう書き方ってありですか?
ArrayList<String[]>hoge = new ArrayList<String[]>();
…
hoge.get(1)[2] = "らららー";
ちょっとした内部実装に使うのはあり
クラスの外に晒すのはなし
>>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); }
}
>>216 MATLABなんかに使われてるところなんかからすると、日本人の言語や思考にあってないのかもね。
理系の人が少ないのもあるだろうし。
jvmの未定義オペコードがだいぶ残っている状態でずいぶん経ちますが複素数とかスタック構造体とかアレイ・ストリーム演算(sse,vectorなど)とか欲しいですよね。
そのようなjava言語改定もせず余っているオペコード枠も埋めないのはどうしてですか?
数値計算はマイナーな用途だから
値型は確かに欲しいけどそれより浮動小数点例外が欲しい
浮動小数点例外てのはqnan,snanですよね。
webでも使ってるところをあまり見たことないですがどんな用途の時に使うんですか?
デバッグに使うんだよ
数値計算だとバグで結果がNaNやInfで埋め尽くされることはよくあるので
その原因特定に使える
どういう理由でオペコードがだいぶ余っているのか知りませんが、(仮想)計算機はosと同じくcpu,gpu,dmaなどのハード・チップ提供の機能にアクセスする手段を持ってこそナンボのものだと思うんですけど・・・
元々その辺はJNIに任せる予定だったんじゃなかったかな。
Javaはそれよりも高いレベルの処理を受け持つといったように役割が明確に分かれてたはず。
ところが最近のモーバルとか組み込みはcpu 1G, strage 4Gなんて当然ですし、オペコードが15年前の32bits pc仕様のままなのはどうなんでしょう・・・
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 とは違う値を保持する
}
子クラスと親クラスで同名のprivate static final なフィールドは宣言できたと思うけど。
もちろん子クラス同士でも。
Java的な方法はgetterをオーバロードしてそれぞれの子クラスで返す定数値を定義する、でしょうね。
>>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()はオーバーライドではなく、隠蔽であることに注意。
内部情報はそのまま晒すなと。
Ko にextends Oyaつけ忘れてた。
脳内補完頼む。
>>358 オーバーロードとオーバーライドは別物だよ?
>>356 スタックマシンだから少なくて済むし
何のための仮想マシンだと思ってるのか
特定のCPUに依存したら意味がない
バイトコードはあくまで軽く前処理されたソースコードであって、そこから先はJITコンパイラの仕事
>>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"; }
}
とするしかないってことですかね。
うーん、いまいち。
>>360 ごめん別の解法書いてて書き直した際にそこだけ修正漏れた
>>362 クラスとテーブルの対応が動的に変わらないのなら、自分ならアノテーションを考える。
@Bind(table="fooMaster")
public class FooEntity extends Entity {
/* ... */
}
>>365 上にあるとおり、サブクラスで親クラスと同じ名前のstatic変数を定義することで、
親クラスの変数を隠蔽すれば、それっぽい感じにはなるな。
ただ、そのまま見せると変更に弱くなるからメソッドを挟んでおくってだけ。
例えばVARをStringから何かのクラスに変更して、返すのはそのクラスの属性にするとかね。
>>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 ちがうよ。アノテーションで指定した値をクラス変数に保存するためにstaticなsetterを使ってるのであって、変更を許すかどうかは関係ない。
まともなジェネリクスがあれば解決できるパターンだが、Javaだからな…
>>367 ごめんなさい。きちんと意図が伝わらない書き方だったかな。
アノテーションに書けばクラス変数は不要だろうと考えた。
O/Rマッパーなりフレームワークなりの規約として変数が必要なら仕方がないんだけどね。
>>361 それが、jvm仕様より歴史が古くさまざまなcpu向けのシー言語ですら_Complexやスタックstructが当り前のようにサポートされていますが、15年以上前の思想のまま止まっていて32bitsマシンが前提のバイトコードに付いて何か勘違いしてませんか?
>>372 バイトコードはJavaのソースコードのセマンティクスをだいたい維持してるよ?
詳細な最適化をjavacの段階で行う代わりにJITの段階で行っているに過ぎない。
そもそもJVMはスタックマシンで機械語とは構造が全く違うだろう。
JVMがポータブルな形でユーザー定義値型に対応することはもちろん可能だろうし
個人的にはそうなって欲しいが、なぜそれをCPUの命令と直接結びつけて考える必要がある?
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仕様が望ましいと思います。
つ C#
CやJavaが言語仕様レベルでSIMDをサポートしてるのか? そんなもんコンパイラの問題だろ?
それと同じ理屈なんだが
バイトコードが1対1で機械語に変換されるとでも思ってるのか?
awtの前例を出したのは、今までのようにJITを前提としたosの抽象化のこだわりが、awt/swing時の問題点とまったく同じ状況なのです。
1.4ではVolatileImage, BufferStrategyが出てawt抽象化のこだわりを捨てて2dがだいぶ改善されたのと似ていますが、
現在のjvmバイトコード仕様とJIT依存でなくユーザが追加バイトコードを介してそれらハード機能を直接利用できるようにすることに結局なるだろうということです。
>>376 現在の32bitsハード提供機能について15年前の古い思想のままで何か勘違いしてると思いますが、
現代的な32bitsスマートやボーブル・パソコンは、fpu(ieee float)が使えるのは当然でSIMDや3D(opengl,directx)やマルチコア(プロセス)などもfpu unitと同じくどのjavaが動くハードなら当り前に使えると考えて問題ありません。
逆に問題あるようなハードでjavaを動かすなら、コンパイラがソフト(ライブラリ)でレイヤーするアプローチをします。
379 :
デフォルトの名無しさん:2011/09/01(木) 16:38:26.44
380 :
デフォルトの名無しさん:2011/09/01(木) 16:52:29.66
間違えました
JDK 5.0 Update 22
を選ぶと英語で記入欄が出てきます。
java環境でプログラミングしたいんで、手順教えてください・・・
何が言いたいのかよく分からんが、そういう機能はJNIを使って提供すればいいんじゃね。
個人的にはバイトコードを直接解釈するIPが肥大化してしまうから、組込みにするのに不利になる気がする。
>>380 それに情報を全部書き込んでSubmitするといいよ。
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に導入、設定を理解、そのインターフェースを理解
することが真の開発スキルということは最近感じつつあります。
それができないので、どうか教えてください。
先生に聞けよ
日本語のJavaの本を買えば
>>388 昔はふるいのやEA取得しようとすると
サインインの必要あったような気がするな。
あと3Dとかも。
違ったっけ。
>>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 ダウンロード
ここまで理解していてダウンロードできないなら、お前は先生に土下座したほうがいい。
インターネット上からHTMLファイルを取得して、
それをファイルとして保存せず、
全て変数(String型とか)に流し込んでしまう方法はありますか?
InputStreamを開いたら後はファイルから文字を読み込むのと一緒だ
Windows Offline Installation, Multi-language
の項目が出てくるパッケージはどれですか?
>>396 一応本とおりに・・
バージョンは全然違いますが。
1.5……サポート切れ。どうしても欲しいなら情報書いてSubmitしろ。
1.6(Java6)……サポート中。ライセンスに同意してダウンロードしてね。
1.7(Java7)……サポート中。がんがんダウンロードしてね。
でもEclipseとかが動くかどうかなんて些細なことは知らないよ。
JITが嫌なら、実行ファイルを直接生成する静的コンパイラもあるよ?