[表示 : 全て 最新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/


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/

104 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:37:01 ]
class ClassA {
 private String name=null;
 ClassA(String name) { this.name=name; }
 String getName() { return name; }
 void setName(String name) { this.name=name; }
}
class ClassB {
 static void method1(ClassA c) {
  c.setName("Method 1");
 }
 static void method2(ClassA c) {
  c=new ClassA("Method 2");
 }
}
とあったとき

ClassA a=new ClassA("Class A");
System.out.println(a.getName());
ClassB.method1(a);
System.out.println(a.getName());
ClassB.method2(a);
System.out.println(a.getName());
としたら
Output:
Class A
Method 1
Method 2
ってなるよね?

105 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 16:00:45 ]
>>104
最後のMethod 2はMethod 1のままだろ。
Javaでは参照渡しはできない。参照の値渡しなら出来る。

106 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 16:39:21 ]
なるほど・・・残念


107 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 19:08:05 ]
Class.cast なんて初めて知った
どっちも実行時に型チェックして例外投げると思うんだが何が違うの?

108 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 19:25:43 ]
>>97 で相違動作のサンプルまで書いてあるじゃねーか。

109 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 19:28:47 ]
未チェック警告抑止しなきゃならない時に手元に Class オブジェクトがあれば Class#cast() でやってる。

private final Map<String,Object> values = new HashMap<String,Object>();
public <T> T getValue(String key, Class<T> type){
   Object value = values.get(key);
   if(value == null)   return value;
   assert(type.isAssignableFrom(value.getClass()): value.getClass().getSimpleType();
   return type.cast(value);
}



110 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 19:48:08 ]
>>97やってみたけどf.getFavoriteが例外投げないのは何故?
通常のキャストも実行時の型チェックやってるよね?

111 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 20:01:52 ]
>>110
ジェネリクスのイレイジャ機構により、
おそらくキャストしてる方は実行時Integer型ではなく
Object型そのまんまで扱ってる。(実行時に型情報は消えるから)

ただ、もちろん
Integer i = f.getFavoriteCast(〜〜);
とすればClassCastExceptionが発生する。

112 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 20:02:21 ]
>>109Classオブジェクトが無いときはどうするの?

113 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 20:11:57 ]
>>112
Classを用意できない場合ってあるかい?

114 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 20:14:46 ]
curses的なことができる何かってないですか?
jcursesというのとlibjcsiというのを使ってみたけど、
マルチバイト文字に対応してない?っぽいので、
いいの知ってる方教えてください。

115 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 21:13:38 ]
>>113 1.5以前とか総称型を想定してないのとか

116 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:14:47 ]
普通のプログラミングとネットワークプログラミングは別なんでしょうか?
ネットワークプログラミングを習得しないといけないことになったんですが
即ネットワークプログラミング? 普通のプログラミング習得⇒ネットワーク?
プログラムに関してはC言語をファイルの入出力なんかあたりまでやった程度です。

117 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:15:18 ]
jcursesもlibjcsiなんかして日本語通ったはずだが忘れた。
CHARVAは無理だった。

118 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:16:51 ]
1.5以前というか総称型以前はそもそも未チェック警告が無いからキャストで
問題なかったはず。

119 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:29:24 ]
>>116
普通の業務アプリではネットワークプログラミングはしません。
そういう意味では別です。それ以外を除けば別じゃありません。

ネットワークプログラミングというのは、
簡単に言えば、ちょっと面倒くさいファイル入出力です。



120 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:38:55 ]
プロトコル考えなきゃ行けないからちょっとでは済まんだろw

121 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 22:40:20 ]
じゃあ面倒くさいファイル入出力でいいよ。

122 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:02:44 ]
ファイル入出力もネットワーク入出力も同じようなもの。には同意。

「普通」って発言にはちょっと引っかかるな。
自分トコだとJavaサーバと.Netリッチクライアントが「普通」なんだが。
また別のトコだとWEBアプリが「普通」だったり、Excel+ODBCが「普通」だったり。
RubyサーバにJavaリッチクライアントが「普通」なんてトコもある。
皆それぞれに「普通」。

123 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:04:34 ]
>>118
そういう意味じゃなくて、総称型を想定しないで作ったクラスだとメソッドの追加が必要になるけど言語仕様ごとにクラスの修正やメソッドの追加は出来ないってこと。
ほとんどのクラスはもともと総称型を意識しないような設計だからClassをいちいち用意できない。

124 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:07:58 ]
同じ様なものって、ストリーム型入出力の基礎の基礎のところだけじゃねえか。
まともに使おうと思ったら相手方のアプリの知識も非同期処理の知識も、
もちろんバークレイソケットの知識も必要になる。プロトコルによっては
状態管理もパケ落ち対応も必要。

125 名前:116 mailto:sage [2010/05/05(水) 23:10:12 ]
文字見ただけで難しそうですね・・・
P2PにおけるDHT関連をやるんですが。


126 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:43:01 ]
>>124
詳細言い出したらキリないだろうが。
ファイル入出力だってファイルシステム言い出したらキリないし、
そもそもフォーマットはどうだの、即時追記に対応するだの、
クラッシュ時安全にするだの、あるよ。
お前はいちいち全部言わないと気が済まないのか

127 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:59:38 ]
>>125
P2PでDHTとかってのは業務的なことでネットワークプログラミング
の範疇に入れるべきなのだろうか?
スレッド間でロジックをシミュレートすることだって出来る部分だし。
確かどっかでアプレット見た気がする。ノード毎に伝搬していく様子の。

128 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:09:16 ]
あ、スマン。それ言い始めたらアプリケーション層のアプリって軒並み
ネットワークじゃねぇってことになる。

129 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:13:04 ]
>>126
それらを同じ様なものと言いのける低脳。



130 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:26:18 ]
スーパークラスのメソッド呼ぶときって必ずsuper.method();ってしたほうがいいの?

つまり

class ClassA {
 void hoge() {
  System.out.println("Hoge!");
 }
}

class ClassB extends ClassA {
 
 void hogehoge() {

 super.hoge(); //← super. つけたほうがいいの?

 hoge(); //← super. つけないほうがいいの?

 }
}
classBでhoge()をオーバーライドしてないとして

131 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:36:37 ]
>>130
どっちでもいい。
むしろhoge()のほうをthis.hoge()にしてほしいわ。

132 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:49:24 ]
>>131
スーパークラスのメソッドってthis.で呼び出せるって知りませんでした。勉強になりました。
ありがとうございます

133 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:51:05 ]
>>131
ちなみにsuper使う場合もthisってつけたほうがいいんですか?
this.super.hoge(); ? super.this.hoge(); ? なんか細かいことばっか訊いてすみません

134 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:12:26 ]
>>94
static import?

リフレクション?

135 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:26:56 ]
>>84
> >>83
> それはJava Collection Frameworkの実装の都合だろ。
> setてのはふつう順不同というか要素の前後関係は知らないもんだろ。
> そういう用途はlinkedlistだ。
>
> たとえIteratorを持ってたとしてもputやsetした順に
> 取得できる保証もないし前後関係を知らないんだからprevで要素が取れるわけもない。

そもそもあるコレクションにlistIterator()メソッドがないとprevious()が使えない。
コレクションによってはiterator()メソッドしか実装されてないのがある。


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

SortedSet、TreeSetもComparableが実装されたオブジェクトをadd()できるから
(挿入ソートで挿入したときにComparable#compareTo()が働いて自動的に順番が並ぶ)
順序関係は保証される。これも特殊だと?
LinkedHashSetとArrayListとの違いはオブジェクトが重複を許すか許さないかの違いでしか無いと思うが。
使えるメソッドも若干違うが。

136 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:36:15 ]
抽象化と実装仕様の区別も付いていない人が何で Java なんかやってんの?

137 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:44:21 ]
>>132 >>133
なぜthisやsuperをつけるのかわかってないような気がする。
途中からClassBにhoge()という名前のメソッドを
新たに作ることになったとき(hogeをオーバーライド)は、thisをつけると
新たに作ったメソッドのほうが呼ばれるのだが。
後でhoge()メソッドをオーバーライドするときに備えてsuperというキーワードが用意されている。
いかなる状況でもClassAのhoge()メソッドを呼び出したいのに、あとからClassBのhoge()メソッドを実装すると
なぜかClassBのhoge()メソッドを呼び出してしまう。そういう問題を防ぐために、superというキーワードがある。

だから将来のオーバーライドや、同じ名前のメソッド名衝突に備えてsuperクラスのメソッドを呼びたいときはsuperをつけるべき。
(ちなみにスーパークラスに同じ名前のメソッドがあることに気付かずメソッド名衝突する問題はJava5から登場した@Overrideアノテーションで回避できる)

自分のクラスのメソッドを呼びたいときはできるかぎりthisをつけるべき。インスタンスメソッドはできるかぎりthis.メソッド名()
staticなメソッドはthisつけないでクラス名.メソッド名()とするのが望ましい。Checkstyleとか使ってコーディング規約を守るなら。
そもそもthis.superとかsuper.thisなんて記述ではコンパイル通らない。

138 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 03:58:36 ]
詳しい説明ありがとうございます

139 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:03:05 ]
となると、変数や定数のフィールドもsuperやthisをつけて使ったほうがよさそうですね・・・
今後気をつけます



140 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:14:16 ]
仮に>>130の例で


141 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:17:57 ]
仮に>>130の例で
ClassBでhoge()をオーバーライドしたとき
他のクラスからClassBのインスタンスからスーパークラスであるClassAのhoge()を呼び出すってことできます?

例えば
class ClassB extends ClassA {
 void hoge() { System.out.println("Hoge Override"); }
}
class ClassC {
 void nanika() {
  ClassB b=new ClassB();
  b.hoge(); //←ここでClassBのhoge()じゃなくてスーパークラスのほうのhoge()を呼び出すことって出来ますか?
 }
}






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

前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