[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 02/26 14:22 / Filesize : 92 KB / Number-of Response : 331
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2010/05/01(土) 12:46:59 ]
1 名前:デフォルトの名無しさん[] 投稿日:2010/03/16(火) 10:23:04
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    ttp://pc11.2ch.net/hp/
Webプログラミング ttp://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 ttp://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
★★Java質問・相談スレッド137★★
pc12.2ch.net/test/read.cgi/tech/1268702584/

次スレは>>950あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
ttp://www.wikiroom.com/java/


3 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 12:48:21 ]
**** 開発環境が必要の場合は ****
■ J2SE 5.0 (1.5.0)
ttp://java.sun.com/j2se/1.5.0/ja/
■ Java SE 6
ttp://java.sun.com/javase/ja/6/

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
ttp://www.java.com/ja

4 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 12:49:47 ]
ありゃ、1行余分にコピーしてるな、まあいいか
乙>俺w

5 名前:デフォルトの名無しさん [2010/05/01(土) 13:44:13 ]
1>>乙

6 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 14:27:15 ]
otu

7 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 14:39:12 ]
何故、左シフトには論理左シフトと算術左シフトの2種類無いの?右シフトには論理右シフトと算術右シフトの両方あるのに

8 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 14:41:55 ]
中央シフトが無いのは差別ニダ!

9 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:07:46 ]
>>7
それはね、論理左シフトと算術左シフトは結果が同じだからですよ。

10 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:09:39 ]
符号には影響されないってことか

11 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:18:42 ]
つまり算術左シフトは符号無視して論理左シフトと同じように
 10000010 (-126)  →  00000100 (4)
になるってこと? 1000100(-60) にはならないってこと?



12 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:20:59 ]
>>11
アホ

13 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:22:43 ]
>>11
勉強しなおせ

14 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:23:26 ]
>>11
低脳のクズが市ね

15 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 15:33:34 ]
清清しいまでの自演

16 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:01:46 ]
自演乙


17 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:15:59 ]
(´・ω・`)

18 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:17:16 ]
>>11
算術シフトは符号ビットを入れるルール
× 1000100
○ 1000101

19 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:23:59 ]
あれ俺まで混乱してきた
1001 1000 (-104)を算術左シフトすると
1011 0000 (-80)になっちまう

20 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:25:35 ]
算術左シフトの定義からして符号ビットは無視します^^;;

21 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:32:34 ]
元 1 000 1000 (符号付8ビット整数)

算術
左シフト 0 001 0000
右シフト 1 100 0100

論理
左シフト 0 001 0000
右シフト 0 100 0100



22 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:38:39 ]
>>8
上シフトや下シフトが無いのも差別ニダ!

23 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:42:27 ]
どうやら俺の理解が足りていないようだ

>>21
論理シフトは符号付に向いてないからいいとして
算術左シフトで、結果的に元の数が負だったのが
00010000という負でない数になってるのは正しいのですか?

24 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:46:25 ]
ビット演算 - Wikipedia
ttp://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97
Wikipediaだと算術左シフトは符号ビット無視してる

シフト演算 - Security Akademeia
ttp://akademeia.info/index.php?%A5%B7%A5%D5%A5%C8%B1%E9%BB%BB
このサイトだと算術左シフトは符号ビット残してる

どっちが正しいのか



25 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:50:57 ]
CASL II だと算術左シフトは符号ビット残す。

CやJavaだと算術左シフト=論理左シフトになる。

26 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:55:37 ]
>>19
符号ビット残すと数値がおかしくなるので
算術左シフト自体に利用価値が無い。使うような用途が無い。
だから存在しない

27 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 17:24:56 ]
つまり
10011000 (-104)を-208にするためにはどうすればいいってばよ?

28 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 17:48:54 ]
>>21
8bitしかかいてないのでbyteデータだとすると
論理
×右シフト 0 100 0100
○右シフト 1 100 0100
なぜなら、論理シフトであろうと、シフトする前に32bitに符号拡張される謎仕様だから

29 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:00:49 ]
理論上じゃなくてまずJava仕様だったなwスレ的にw

30 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:05:15 ]
>>27
int a=-104;
System.out.println("a="+a);
a*=2;
System.out.println("a="+a);

//Output
// a=-104
// a=-208

31 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 18:20:16 ]
>>27
8bitでは-208は表せませんが



32 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 20:58:15 ]
自分をシフトしたいわ

33 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 21:04:17 ]
>>31
8bit整数を負符号オンリーで現せば ほら 0〜-255 この通り1

34 名前:デフォルトの名無しさん [2010/05/01(土) 21:30:38 ]
そんな一般的でない符号化が許されるなら、1ビットで-208表したっていいだろ。0ビットでもいいかもな。

35 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 22:08:47 ]
0bitは無理だろ

36 名前:デフォルトの名無しさん [2010/05/01(土) 22:19:55 ]
Javaに限らず
算術左シフトなんて需要ないだろ・・・

37 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 22:30:05 ]
>>34

int hugo(byte n) {
return -127+(int)n;
}

38 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 23:39:30 ]
>>36
Javaに限らなければ需要はあるぞ
オーバーフローフラグを持つCPUなら算術シフトと論理シフトでフラグの変化が違う

39 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 00:06:29 ]
それでも負数に使うことは無いだろう

40 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 01:46:57 ]
内部クラスでthisって使ったらthisは何を参照してることになるの?

41 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 03:38:40 ]
>>40
内部クラス



42 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 04:33:26 ]
>>41
なるほど。以外に不便そうだな内部クラスってのは

43 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 04:38:57 ]
class ClassA {
private static ClassA classA;
ClassA() {
classA=this;
ClassB classB=new ClassB();
}
void hoge() {
System.out.println("hoge!");
}
class ClassB {
ClassB() {
this.hoge();
ClassA.classA.hoge();
}
void hoge() {
System.out.println("hoge?");
}
}
}

44 名前:デフォルトの名無しさん [2010/05/02(日) 10:52:12 ]
全ての植物は植物クラスを継承する
全ての食物は食物クラスを継承する

このような考えを元に継承を考えたとき、多重継承が無いJavaでは
どちらにも該当するりんごクラスなどをどのように実装すればいいんでしょうか?

45 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 11:36:03 ]
class Plant{
}

interface Eatable(
}

class Apple extends Plant implemnts Eatable{
}

こんなんでどうでしょ?
食べられるものにはEatableを実装と言うことで。

46 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 12:55:39 ]
正直継承よりはインタフェースにこだわった方がいいよ。
あと別にクラスで無理やり自然界を記述しなくてもいいから。

47 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:00:46 ]
で、Java 7 は何時出るんだよ?

48 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:16:38 ]
>>43
そんな危ないことしなくても、外側のメンバを直接呼び出すか、
名前がかぶっているなら ClassA.this.hoge(); でいい

49 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 15:12:41 ]
>>48
クラス名.thisの参照方法を知らないんだろ。

50 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 15:38:55 ]
public ClassA {
private static ClassA classa = new ClassA();

private ClassA() { new ClassB(); }
public ClassA getInstance() { return classa; }
public void hoge() { System.out.println("hoge!"); }

private class ClassB {
public ClassB() { hoge(); ClassA.hoge(); }
public void hoge() { System.out.println("hoge?"); }
}
}

何となく、>>43のを書き直してみた
専ブラで書いたから、スペルとか間違えてるかも


51 名前:デフォルトの名無しさん [2010/05/02(日) 23:25:06 ]
>>48-49
>クラス名.this
kwsk




52 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:27:13 ]
>>50
本来の形から>>40の意図に合わせて単純化されたクラスをそのように直してしまってもいいのでしょうか?

53 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:32:55 ]
結論: 設計を見直せ

54 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:34:11 ]
>>51
Java で内部クラスから外部クラスの関数を明示的に呼ぶときはどう書くのか教えてください。 - 人力検索はてな
q.hatena.ne.jp/1122203296


55 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 23:37:53 ]
class ClassA
{
 ClassA()
 {
  new ClassB();
 }
 class ClassB
 {
  ClassB()
  {
   new ClassA();
  }
 }
}

56 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 00:15:31 ]
別にコンストラクタで無限ループさせるなら内部クラス経なくてもよろしくてよ

57 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 01:05:35 ]
出来る出来ないという仕様的な話はありかと思うけど、
実際にこんなコード渡されたらぶちぎれるw

58 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 04:28:51 ]
switchのジャンプで一番最後のところでもbreak;って入れたほうがいいの?
例えば
switch (n) {
case 1:
 hoge();
 break;
case 2:
 hoge2();
 break; //←これとか
}

switch (p) {
case 1:
 hogehoge();
 break;
case 2:
 hogehoge2();
 break;
default:
 hogehoge3();
 break; //←これとか
}



59 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 04:35:52 ]
一々選択的に書いたり書かなかったりしていると何時かうっかりミスが出るから
書く癖を付けとけ。

60 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 05:05:18 ]
switch多重ネストでソースがごちゃごちゃしてわけわかんなくなった

61 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 05:14:01 ]
switchのcaseをインデントする癖がついてるんだけど、やめたほうがいいのかな



62 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 05:21:31 ]
今時は IDE も色分けするしフォーマッターも付いてるから
仕事でコーディング規約とかなければその程度は良いんじゃねぇか。

63 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 08:54:01 ]
ある程度まではオートフォーマッタとCheckstyleやら
Findbugsに全てを委ねてる

64 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 13:20:00 ]
defaultで処理をするのは意味的にどうかと思う。
っていう宗教戦争を投げかけてみる。

65 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 13:29:22 ]
まあ列挙に対する全てのパターンを記述する場合とか、
defaultにAssertionErrorをスローするコードとか書くんじゃね?

66 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 16:06:41 ]
LinkedHashSetにはなぜlistIterator()メソッドがないのだろう。

ListIterator#previous()で反復子を前に移動したかったのに。
next()しかできないよ。

しぶしぶLinkedHashSet使うの辞めてLinkedListにしたけど。
Setは重複を許さないから使い勝手がいいと思ったんだけどな。
LinkedListにしたので挿入時に重複チェックしなきゃならない。

もっといいCollection型はないかな?

67 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 16:12:17 ]
あと、ListIterator#next()とprevious()の仕様、反復子の隣の要素取ってから反復子を隣に移動させているが
これを、反復子を移動させてから隣の要素とるように指定できないだろうか。

68 名前:67 mailto:sage [2010/05/03(月) 16:29:46 ]
一応、自己解決したかも知れない。
List<String> ll = new LinkedList<String>();
ll.add("A");
ll.add("B");
ll.add("C");

ListIterator<String> it = new ListIterator<String>();

String result;

it.next();
result = it.next();
it.previous();

return result; .//これでカーソルをAとBの間に移動しつつBを取得できる。

next()二回実行してprevious()を実行するというやり方。
逆方向の場合はprevious()を二回実行してからnext()を実行。
問題はListの末端に来たときの処理も作っておかないといけないのが難点。
if(lt.hasNext())とかif(it.hasPrevious())とかでまいどまいどチェックしないといけない。

本当は、末端に来てnext()したら先頭に戻る永久ループ型のIteratorが欲しいのだが…。
時計の針のように12時になったら0時からスタートする、というIterator。

Apache Common Collectionsあたりでも探すしかないだろうか…。しかしあのCollection Frameworkはまだ
Genericsに完全対応していないし…。

69 名前:67 [2010/05/03(月) 16:48:13 ]
見つけた。末端でnext()すると先頭に戻るLoopingListIteratorを発見。

案の定、Genericsに対応していない残念なコレクションフレームワークだった。
commons.apache.org/collections/api-release/org/apache/commons/collections/iterators/LoopingListIterator.html

しかしLinkedListにはこのIteratorに変換するメソッドがない。
ということはどこかのクラスのstaticメソッドを使うのだろうか、それともこのLoopingに対応したListIteratorと
別途用意しなければないのだろうか…。

70 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 16:50:00 ]
commons.apache.org/collections/api-release/org/apache/commons/collections/IteratorUtils.html#loopingListIterator(java.util.List)
やはり専用のメソッドが用意されていた。

IteratorUtils.loopingListIterator(java.util.List)

71 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 17:02:54 ]
Set は List のように順序性を維持するものではない。



72 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 17:19:33 ]
>>68
>本当は、末端に来てnext()したら先頭に戻る永久ループ型のIteratorが欲しいのだが…。

これでいけない?
www.javaworld.com/jw-07-1997/jw-07-enumerated.html?page=6

73 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 17:20:27 ]
それくらいテメェで作れよと。

74 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 17:25:41 ]
>>69
> しかしLinkedListにはこのIteratorに変換するメソッドがない。

コンストラクタに放り込むだけじゃない?

75 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 19:05:07 ]
#include standard io.h

76 名前:67 mailto:sage [2010/05/03(月) 21:59:19 ]
>>71
しかし、LinkedHashSetは順序性を維持するものになっている。
LinkedHashMapも同様。LinkedとついたSetとMapはadd()した順番にオブジェクトが並び順序性が保証されている。
順序性が保証されないのはHashSetとHashMap。

>>72
おお自作物。アルゴリズムとデータ構造の本に載ってそうなコードだ。
すでにCommons CollectionsにLoopingListIterator
という便利なクラスを見つけたので一応は解決したと思う。

>>74
それも一応、>>70のユーティリティクラスを使うという解決策を見つけた。


今探しているのは反復子を移動してからデータを取り出す方法。
現状のnext()はデータを取り出してから反復子を移動している。

何をやりたいかというと、時計の針のようなものを再現したいだけ。

Iteratorを継承した新しいIteratorクラスを作ってそこに独自のnext()メソッドを実装する
しかないだろうか。

俺はIteratorの間違った使い方を試そうとしているのかもしれない。

77 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 22:05:33 ]
>>74
IteratorUtilsが必要と思ったら
コンストラクタもあった。
LoopingListIterator(java.util.List list)

78 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 00:13:31 ]
int h=100,i=100,j=100;
h += ++h;
i += i++;
j += (j+=1) + (j+=10);
System.out.println("h="+h);
System.out.println("i="+i);
System.out.println("j="+j);

無精できねえ・・・なんてこったい

79 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 00:49:55 ]
>>78
結果が分からないCよりはマシだろ

80 名前:デフォルトの名無しさん [2010/05/04(火) 02:20:03 ]
>>35
1ビットあれば、二つの数(例えば0と-208)を符号化できる。
0ビットあれば、一つの数(例えば-208)を符号化できる。

一般にnビットあれば、2のn乗個の数を符号化できる。

81 名前:デフォルトの名無しさん [2010/05/04(火) 02:56:50 ]
その0biって奴tはハードウェア的にもソフトウェア的にも実現不可能だな
概念的には存在しうるみたいだけど
イデアみたいなもんか?



82 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 12:51:36 ]
セットにイテレータなんてないだろ。
自作すりゃいいもんをだらだら張り付けるな。
ブログでやれ。

83 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 13:24:46 ]
え?SetはCollectionだからIterableだろ?

84 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 16:07:44 ]
>>83
それはJava Collection Frameworkの実装の都合だろ。
setてのはふつう順不同というか要素の前後関係は知らないもんだろ。
そういう用途はlinkedlistだ。

たとえIteratorを持ってたとしてもputやsetした順に
取得できる保証もないし前後関係を知らないんだからprevで要素が取れるわけもない。

LinkedHashSetがあがってるがこれは実装由来のコレクション。特殊な要件で使うもんだ。

85 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 16:30:57 ]
>>84
SetがIterableであることが、実装上の都合だという
ソースはどこにあります?

86 名前:デフォルトの名無しさん [2010/05/04(火) 16:53:06 ]
実装されているが、仕様に規定がないなら、それは実装上の都合ということ。
ないことは示せない。あえて示すならこの世の仕様をすべて見ろと言うしか無い。

87 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 17:07:26 ]
いや、意味が分からないんだが。IterableはCollectionの契約だろ?
まあ気にくわないならUnsupportedOperationExceptionでも投げればいいけど。

正直何をいいたいのかさっぱり。

88 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 17:46:07 ]
お前がコレクションやらコンテナと呼ばれるものの使い方を理解してないだけだろ。
だいたいLinkedHashSetは既存のsetを守りつつ順序を保ちたいときに使うラッパーだ。
IterableなのはCollectionインターフェイスで強制されてるからだ。

89 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 17:49:27 ]
>>87
たぶん
「Setってーのは重複要素がないコレクションなんだぜ。」
「Setの実装クラスが何を持とうとそれは実装都合なんだぜ。」
「CollectionってーのはIterableだが、順序付けされているかそうでないかは実装クラス次第なんだぜ。」
ってことをいいたいんじゃないのかな。

90 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 17:55:52 ]
>>89
いや、>>82でSetにイテレータ無いって言ってるから
どういう意味かと思って。

91 名前:89 mailto:sage [2010/05/04(火) 18:17:25 ]
>>90
それは、ミスったんじゃないかな。>>84で、
「Iteratorがあっても(入れた時の)順序を保障するものではない。」※括弧内はおれ補完
と記載されているし。

ところで、なんだかIteratorとIterableをゴチャゴチャに書かれている書き込みが多い気がする。



92 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 18:29:49 ]
Collectionの話してるんだ。混ぜて構わんだろ。

93 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 18:44:50 ]
列挙性とその順序性は全く別の話。
分かっていないバカが一匹混ぜ繰り返している。

94 名前:デフォルトの名無しさん [2010/05/04(火) 22:36:28 ]
あるメソッドの中だけ別のpackageを参照するように出来ますか?

クラスのあたまで
import org.easymock.EasyMock;
とやると
そのクラスのメソッド内で
EasyMock.
と呼び出すと上のパッケージのクラスを参照するじゃないですか?
で、あるメソッドだけ
org.easymock.classextension.EasyMock
のクラスを参照したいのですが、上記のようにフル修飾名をいちいち入れるとソースが見づらくなるので、あたまでなんか宣言して、そのメソッドだけ別のパッケージを参照するように出来ませんでしたっけ?

方法ありましたらお願いします


95 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 23:05:43 ]
JavaScript なら出来るが。

96 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 23:31:04 ]
Effective Java 2版 140p に通常のキャストと Class.cast の説明があったのですが、意味がよく分かりませんでした。

class Favorites {
    private Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>();

     // Class.cast
    public <T> T getFavorite(Class<T> type) {
        return type.cast(favorites.get(type));
    }

     // キャスト演算子
    public <T> T getFavorite(Class<T> type) {
        return (T)favorites.get(type);
    }
}

上記の Class.cast を使う場合ととキャスト演算子を使う場合ではどのような差があるのでしょうか?
この二つに差があるのだとしたら、どのようなときにどう使い分けるのでしょうか?
どうかお願いします。

97 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 01:04:29 ]
>>96
public Favorites() {
favorites.put(Integer.class, "string");
}
と変なもの入れて
Favorites f = new Favorites();
try {
System.out.println(f.getFavoriteCast(Integer.class));
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println(f.getFavorite(Integer.class));
} catch (Exception e) {
e.printStackTrace();
}
と使ってみるといい。f.getFavoriteCastはClass.cast版ね。

98 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 02:09:36 ]
質問です。
getClass()メソッドのテストをしようと思い、次のようなソースを実行しました。
配列int[]とStringクラスでgetClass()を行い、結果をprintln()で出力するものです。

出力結果の" class [I "というのはどういう意味なんでしょうか?
(てっきり"class java.lang.reflect.Array"あたりが出力されると思ったのですが…)
そもそも配列にgetClass()を行うのは好ましくないのでしょうか?

【ソース】
public class Test1 {
public static void main(String[] args){
int[] a = {1,2,3};
System.out.println(a.getClass());
System.out.println((new String("abc")).getClass());
}
}

【出力結果】
class [I
class java.lang.String

以上です。
どうぞよろしくお願いします。

99 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 02:22:42 ]
>>98
java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#14152

100 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 02:37:47 ]
>>99
こんな仕様があったとは知りませんでした。勉強になります。
夜遅くにご回答いただき、どうもありがとうございました。

101 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 04:33:17 ]
>>97
キャスト演算子は型が一致しなくても放置で
Class.cast は型が一致しなければ ClassCastException を投げる
の違いということですか?



102 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 06:34:21 ]
Class#castだと
Integer.class.cast("") とかコンパイル通っちゃう。

103 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 09:55:29 ]
そんな珍しいコードよう書かんわw
ちなみに、ジェネリックスとの組み合わせは分かりにくくなる罠。
現状のジェネリックスはある種のトリックだから。
www.ibm.com/developerworks/jp/java/library/j-jtp01255/






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<92KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef