13/12/06 10:55:55.50
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 URLリンク(pc11.2ch.net)
Webプログラミング URLリンク(pc11.2ch.net)
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
(p)URLリンク(www.wikiroom.com)
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※
前スレッド
★★Java質問・相談スレッド165★★
スレリンク(tech板)
2:デフォルトの名無しさん
13/12/06 11:29:54.92
他の言語ではなく、Javaが選択される理由を教えてください
3:デフォルトの名無しさん
13/12/06 11:30:48.82
学習に最適
4:デフォルトの名無しさん
13/12/06 19:26:23.36
教えてください
宣言と生成についてわかりません
例えば
class A{
}
class B{
}
…
static void main{
A a = new A();
B b = new A();
}
aとbの違いがわかりません。
右辺の生成はわかるのですが、
宣言の意味合いがよくわかりません。
教えてください
すみません、初心者です!
5:デフォルトの名無しさん
13/12/06 19:28:06.23
なんだこれ
6:デフォルトの名無しさん
13/12/06 19:31:00.56
変ですか?
7:デフォルトの名無しさん
13/12/06 19:35:14.58
うん。まあ、細かいことはおいといて。聞きたいのは変数宣言と生成の違い?
8:デフォルトの名無しさん
13/12/06 19:36:02.27
いつも new するとは限らないから、宣言と生成は違う
String a = new String();
String b = "hello";
String c = System.getProperty("os.name");
String d = b + c;
9:デフォルトの名無しさん
13/12/06 20:04:45.21
変数宣言と生成の違いというより、
宣言について曖昧なのかもしれません。
上のaとbの文は、両方ともクラスAのメンバを使用できるようになりますよね。
じゃあ、宣言の違いによって何が変わるのって感じです。
素人な説明ですみません。
10:デフォルトの名無しさん
13/12/06 20:31:08.54
String str1 = "hello";
String str2 = str1;
str1 → "hello" ← str2
String str1 = "hello";
String str2 = "hello";
str1 → "hello"
str2 → "hello"
11:デフォルトの名無しさん
13/12/06 20:35:19.28
見方がわからんw
12:デフォルトの名無しさん
13/12/06 20:37:21.36
すまん、適当に書いてしまったw
13:デフォルトの名無しさん
13/12/06 21:12:37.26
それは生成の話ですよね。
クラス型の代入の話はわかります。
あとstringだと限定的でなかなか理解が。
僕がわからないのを言い換えると、
①クラスAで宣言したクラスAオブジェクトa
②クラスBで宣言したクラスAオブジェクト
この①と②は何が変わるのか。
同じこと言ってますよね…
14:デフォルトの名無しさん
13/12/06 21:18:24.68
ポリモーフィズムの話か
15:デフォルトの名無しさん
13/12/06 22:04:28.84
質問です。
あるインターフェースを継承したインターフェースを実装する場合、
implementの記述で、後者だけでなく前者も記述しているソースを見かけるのですが、
何か意味があるのでしょうか?
言葉ではわかりにくいので例を書きますと
interface A {}
interface B extends A {}
これらがあるときに
class C implement B {}
class D implement A, B {}
この場合、CもDも同じ機能を持つことになり、Dの記述は冗長だと思うのですが
何か違いはあるんでしょうか? リファクタリング時に役にたつとかでしょうか?
16:デフォルトの名無しさん
13/12/06 22:13:31.97
class A{
int aa = 1;
public A(){
System.out.println("コンストラクタA");
}
public void AAA(){
System.out.println("メソッドAAA");
}
}
class B extends A{
int bb =2;
public B(){
System.out.println("コンストラクタB");
}
public void BBB(){
System.out.println("メソッドBBB");
}
}
17:デフォルトの名無しさん
13/12/07 02:10:22.02
String a = new String
Object b = new String
Objectとして扱う(Objectで定義されているメソッドしか使わない)なら、bの方が依存関係を緩くできる。
b = new Integer
と、Stringでないものにしても、bはObjectとして扱われるので影響がない。
18:デフォルトの名無しさん
13/12/07 04:53:45.79
>上のaとbの文は、両方ともクラスAのメンバを使用できるようになりますよね。
>じゃあ、宣言の違いによって何が変わるのって感じです。
AとB関係ない型なのに
B b = new A();
なんだこれ。
19:デフォルトの名無しさん
13/12/07 06:38:18.82
>>15
開発のなりゆきでそうなっただけで深い意味はないかも。
20:デフォルトの名無しさん
13/12/07 10:22:44.79
>>18
最初の「なんだこれ」はそれだった。
違和感を感じていたが誤記だろうと放置していたら本質だった。
21:デフォルトの名無しさん
13/12/07 14:33:56.07
質問です。
Android SDK の Bundleクラス(Intentで使われてるやつです)のような
万能の入れ物になるようなクラスはJavaの標準では用意されていないのでしょうか?
また、ない場合に自作するとしたら、適当にプリミティブラッパ型とSerializable型を
保持するHashMapを複数持ったクラスなどで代用すれば良いでしょうか?
22:デフォルトの名無しさん
13/12/07 14:55:17.77
しね
23:デフォルトの名無しさん
13/12/07 15:08:19.30
ありがとうございます。自己解決しました
24:デフォルトの名無しさん
13/12/07 15:28:12.23
どれが解決したかわからないという
25:デフォルトの名無しさん
13/12/07 16:05:36.11
javaでFnumって、どういう使い勝手がありますか?
最初、普通に整数型かと思ったら違うかったし
引数で取ったとしてswich文での処理となると思いますし
どうなんでしょうか
26:デフォルトの名無しさん
13/12/07 16:11:59.89
>>15
まぁ)avaの仕様だと思って我慢してください。
俺としては、インターフェイスの定数の保持の利点が
見いだせない。
27:>>15
13/12/07 19:42:31.92
>>19>>26
なるほど・・・ありがとうございました
28:デフォルトの名無しさん
13/12/07 20:15:37.70
class A{
public void AAA(){}
}
class B extends A{
public void BBB(){}
}
public class javatest2 {
public static void main(String arg[]){
A hoge1= new A();
B hoge2= new B();
A hoge3= new B();
B hoge4= new A(); //型の不一致: A から B には変換できません ??1
hoge1.AAA();
// hoge1.BBB(); //メソッド BBB() は型 A で未定義です
hoge2.AAA();
hoge2.BBB();
hoge3.AAA();
// hoge3.BBB(); //メソッド BBB() は型 A で未定義です ??2
上の??1 と??2 がわかりません
29:デフォルトの名無しさん
13/12/07 21:12:33.22
>>28
1. サブタイプはスーパータイプの一種なので互換性があるが、逆はそうではない
よく挙げられるのは動物の例
Animal hoge1 = new Animal(); // OK - 動物同士、何の問題もない
Cat hoge2 = new Cat(); // OK - ネコ同士、何の問題もない
Animal hoge3 = new Cat(); // OK - ネコは動物であるので、ネコを動物として扱っても問題はない
Cat hoge4 = new Animal(); // NG - 動物一般をネコとして扱うことはできない
30:デフォルトの名無しさん
13/12/07 21:16:52.17
>>28
2. 「メソッドBBBが型Aで未定義です」のメッセージ通り、型AにメソッドBBBの定義は無いでしょ?
hoge3の型はAなんだから
hoge3が指しているオブジェクトの型ではなく、hoge3という変数自身の型だ
変数自身の型しか見ないので、hoge3が実際に何のオブジェクトを指しているか指していないかは考慮されない
31:デフォルトの名無しさん
13/12/07 21:49:36.82
ありがとうございます。
んーでもまだしっくりこない。
オブジェクトの型と変数の型の違いがわかりません。
というより、やっぱり、オブジェクト生成とは何か。変数宣言とは何か。
をしっかりと理解していない気がします。
32:デフォルトの名無しさん
13/12/07 22:09:48.36
>>15,26
メソッドの検索順番が変わるんだよ。
クラスメソッドと違ってインタフェースメソッドは
階層が深いとこで定義されていると検索が遅くなる。
33:デフォルトの名無しさん
13/12/07 22:10:23.03
違いも何も、生成したオブジェクトを自分がどのように扱うかを決めるのが宣言だろうに。
34:デフォルトの名無しさん
13/12/07 22:27:57.02
>>31
1に関しては悩む点じゃないからスルー。
2はちょっと難しい。
hoge3は「A」という型で宣言されているからAに定義されているメソッド以外は呼び出せない。
ただしhoge3の「中身(インスタンス)」はnew B();で作ったのでBのメソッドを呼び出す能力は持っているはず。
こういう場合はキャストという操作でhoge3の型を変えてやればいい。
((B) hoge3).BBB();
こうすればエラーにならずBBBが呼び出せる。
35:デフォルトの名無しさん
13/12/07 22:34:04.55
上の
AAA hoge3 = new BBB();
では型宣言側のhoge3.AAA()はOKで、hoge3.BBB()はNGですが、
下のオーバーライドを確認するためのプログラムでは、逆の挙動が出てます。
上の例に従うとAAA hoge3=new BBB(); → hoge3.show();は、
AAA.show()が示されると思ったのですが、実際はBBB.show()でした。
難しい。。。
どなたか説明いただけると助かります
class AAA{
String a="AAA";
void show(){System.out.println("AAA.show()");}}
class BBB extends AAA{
String a="BBB";
void show(){System.out.println("BBB.show()");}}
public class javatest3 {
public static void main(String arg[]){
AAA hoge1 = new AAA();
AAA hoge2 = new BBB();
BBB hoge3 = new BBB();
hoge1.show();
hoge2.show();
hoge3.show();
System.out.println(hoge1.a);
System.out.println(hoge2.a);
System.out.println(hoge3.a);}}
36:デフォルトの名無しさん
13/12/07 22:43:22.76
>>35
抽象クラスやインターフェースを使ったことあるか?
それを使えば「型とインスタンスは別」って理解できるから先にそうしろ
37:デフォルトの名無しさん
13/12/07 22:51:52.02
すみません、まだ趣味で初めて1週間くらいで、、、
抽象クラスとインターフェースは斜め読んだだけであまり理解してません。
とりあえず、この問題は放置して先に進んでみます。
また戻ってくるのでかまってください。
ありがとうございました。
38:デフォルトの名無しさん
13/12/07 23:02:47.86
また難しいところから攻めてるな。実際のところ、継承の乱用はタブーなんだが。
39:桃白白 ◆9Jro6YFwm650
13/12/07 23:48:33.11
>>35
オーバーライドとはそういうもの
逆でもなんでもない
40:デフォルトの名無しさん
13/12/08 01:51:07.91
大は小を兼ねるってことだよ。
41:デフォルトの名無しさん
13/12/08 05:59:05.92
>>39
失せろカス
42:デフォルトの名無しさん
13/12/08 06:52:06.52
Vector<String> ary = new Vector<String>();
ary.add("データ0");
ary.add("データ1");
ary.add("データ2");
for (int i = 0 ; i < ary.size() ; i ++) {
String str = ary.get(i);
}
というソースを実行すると、本当に稀な確立で、
ary.get(i);でArrayIndexOutExceptionが発生します。
別スレッドからaryがいじられるとかはありえないのですが
Java6でVectorにバグがある等の話はありますでしょうか?
43:デフォルトの名無しさん
13/12/08 06:57:23.21
ない。
ArrayIndexOutOfBoundsExceptionではなくArrayIndexOutExceptionなんて書いている時点でまず自分を疑った方がいい。
44:デフォルトの名無しさん
13/12/08 07:10:32.69
全然釣れないですね~^^
45:42
13/12/08 07:43:17.85
ありゃ、なんかスレ荒れてましたか
例外の名前はあいまいに覚えてたのを書きました
今は無駄っぽいので、またスレが冷静になってきたら質問します。
46:デフォルトの名無しさん
13/12/08 07:55:47.01
ションベンして寝てろカス
47:デフォルトの名無しさん
13/12/08 08:31:01.74
>>42
Vector使うのもいいけど
ArrayListを使うことをお勧めします
48:デフォルトの名無しさん
13/12/08 09:12:21.96
結構昔から非推奨タグ付いてなかったっけVector
49:デフォルトの名無しさん
13/12/08 10:54:41.51
確かに1次元のくせにベクトルとは生意気だとおもったな。
50:デフォルトの名無しさん
13/12/08 11:19:28.33
全然だめですね~^^
釣れないですです^^
51:デフォルトの名無しさん
13/12/08 11:44:52.22
2次元だと行列になるのでは
52:デフォルトの名無しさん
13/12/08 12:13:38.13
一成分がスカラー
二成分がベクトル
行列は一般的なものでしょ
53:デフォルトの名無しさん
13/12/08 12:34:44.11
割り込みベクタって表現、ダイキライ
54:デフォルトの名無しさん
13/12/08 13:19:54.26
javaでprocessingのbackgroundの様な関数を作れなくて困ってるんですがどういう風にすれば作れるか教えて頂けませんか?
抽象的で申し訳ないですが教えて下さい。
55:42
13/12/08 13:22:11.07
そんなprocessingやってる前提で話されても・・・
ここジャヴァーのスレですし
56:デフォルトの名無しさん
13/12/08 13:28:10.28
すみません…
具体的に言うと四角形を方向キーで動かすアニメーションを作ろうと思って書いてみたのですが、どうやっても前の四角形を消す事が出来ず残像?の様な感じになってしまいアニメーションにならないんです。
57:デフォルトの名無しさん
13/12/08 13:36:51.56
背景と同じ色で四角形を塗りつぶせば消える
58:デフォルトの名無しさん
13/12/08 13:44:46.88
>>57
四角形作って塗り潰そうと考えて作ってみたんですけど自分が作ったプログラムだと塗り潰せてないんです…そして何故塗り潰せないのかが分からなくて本当に困ってるんです。
後ここってプログラミング貼っても大丈夫なんでしょうか?
59:デフォルトの名無しさん
13/12/08 13:49:03.05
プログラミング張れるのか、すごいな
60:デフォルトの名無しさん
13/12/08 14:00:28.23
>>59
初心者だということを察して下さいお願いします
今から参考書買ってこようと思うんですが
、自分の質問が解決されそうな本とかって分かりませんか?
61:デフォルトの名無しさん
13/12/08 14:08:52.80
すれ違い
62:デフォルトの名無しさん
13/12/08 14:45:09.43
その程度の質問ならどの本にも書いてあるよ
63:デフォルトの名無しさん
13/12/08 15:05:36.78
そんなのは色々ゴチャゴチャチャレンジしてたら解決するよ。
64:デフォルトの名無しさん
13/12/08 15:54:39.79
ゴチャゴチャチャレンジしてたら解決するようなことは質問禁止!
65:デフォルトの名無しさん
13/12/08 16:13:20.70
ゴチャゴチャチャレンジしてたら解決するような事かどうかが判断できない時は質問OK!
66:デフォルトの名無しさん
13/12/08 16:17:49.85
昨日の継承の問題で、抽象クラスとインターフェイスを勉強してきたのですが、
んー、なんかその話とは違う気がする。。。
やっぱり宣言とオブジェクト生成について本質を理解しなければいけないとおもうんです
オーバーライドのところで、逆の挙動が出るということに関して、そういうものと言われましたが、
たぶん僕の言いたい事が伝わってない気がします。
言いたい事は、
最初のプログラムではhoge2はBBBメソッドは使用できないくせに、
次のプログラムではhoge2はBBBメソッドがオーバーライドで優先されて使用される。
それがなぜなのか。これを理解するためにおそらく宣言と生成の本質を理解しないといけませんよね。
プログラムを整理したのでまた載せます
67:デフォルトの名無しさん
13/12/08 16:19:19.84
class A{
String a="AAA";
void AAA(){System.out.println("AAAメソッド");}
}
class B extends A{
String b="BBB";
void BBB(){System.out.println("BBBメソッド");}
}
public class javatest2 {
public static void main(String arg[]){
A hoge1= new A();
A hoge2= new B();
B hoge3= new B();
hoge1.AAA();
hoge2.AAA();
// hoge2.BBB(); //メソッド BBB() は型 A で未定義です
hoge3.AAA();
hoge3.BBB();
System.out.println(hoge2.getClass());
System.out.println(hoge1.a);
System.out.println(hoge2.a);
// System.out.println(hoge2.b); //bb は解決できないか、フィールドではありません
System.out.println(hoge3.a);
System.out.println(hoge3.b);
}
}
68:デフォルトの名無しさん
13/12/08 16:21:13.97
実行結果
AAAメソッド
AAAメソッド
AAAメソッド
BBBメソッド
class java02.B
AAA
AAA
AAA
BBB
69:デフォルトの名無しさん
13/12/08 16:23:29.72
class AAA{
String a="AAA";
void show(){System.out.println("AAAメソッド");}
}
class BBB extends AAA{
String a="BBB";
void show(){System.out.println("BBBメソッド");}
}
public class javatest3 {
public static void main(String arg[]){
AAA hoge1 = new AAA();
AAA hoge2 = new BBB();
BBB hoge3 = new BBB();
hoge1.show();
hoge2.show();
hoge3.show();
System.out.println(hoge2.getClass());
System.out.println(hoge1.a);
System.out.println(hoge2.a);
System.out.println(hoge3.a);
}
}
70:デフォルトの名無しさん
13/12/08 16:24:52.07
目がチカチカするからやめて
71:デフォルトの名無しさん
13/12/08 16:24:55.63
実行結果
AAAメソッド
BBBメソッド
BBBメソッド
class java03.BBB
AAA
AAA
BBB
72:デフォルトの名無しさん
13/12/08 16:27:32.42
勉強不足
73:デフォルトの名無しさん
13/12/08 16:30:38.99
A hoge2= new B();
クラスAのメソッドしか利用しないって意味だよ
74:デフォルトの名無しさん
13/12/08 16:31:55.81
勉強もほどほどになんか作ってみろよ。半年もすれば本質なんか勝手にわかる。
75:デフォルトの名無しさん
13/12/08 16:33:33.87
すみません。でも俺は丸一日この文とにらめっこだよ。助けてほしい。
●前者と後者で違い
前者 メソッドをオーバーライドさせず、AAA()とBBB()でメソッド名が違う
後者 メソッドをオーバーライドさせ、メソッド名show()
●hoge2の結果
前者 BBB()メソッドは使用できない。
後者 オーバーライドされBBB()メソッドが優先される。
なぜなぜ?
>>34 のキャストすればできました。そうゆう対策は知らなかったし理解できました。
そうではなく、なぜこの問題が起こるのかが知りたいです。
これを理解するには宣言と生成の本質の理解が必要と思うんですが、
どこを調べても、宣言はメモリが・・・とかそんな説明ばっかです。
76:デフォルトの名無しさん
13/12/08 16:34:58.63
void show()←クラスAにもあるメソッド
77:デフォルトの名無しさん
13/12/08 16:38:13.22
勉強不足なのは間違いないけど。。。
>>73
>A hoge2= new B();
>クラスAのメソッドしか利用しないって意味だよ
でも2番目のプログラムでは、
AAA hoge2 = new BBB();
で、BBBメソッドが呼ばれたよ??
78:デフォルトの名無しさん
13/12/08 16:38:23.68
馬鹿には無理
79:デフォルトの名無しさん
13/12/08 16:38:26.92
A hoge2= new B();
メソッドの使用がクラスAに存在するものだけに制限されている
つまり void AAA()だけ
AAA hoge2 = new BBB();
メソッドの使用がクラスAAAに存在するものだけに制限されている
つまり void show()だけ
80:デフォルトの名無しさん
13/12/08 16:41:09.15
>>76
hoge2.show() で呼ばれるのは、クラスAではなくてクラスBですよ。
実行結果から見て。
81:デフォルトの名無しさん
13/12/08 16:42:27.07
Javaでわからないことを質問するスレ
スレリンク(prog板)
82:デフォルトの名無しさん
13/12/08 16:45:12.03
>>79 の理屈では、
後者のプログラムではhoge2.show()の実行結果がAAAメソッドになりません?
83:デフォルトの名無しさん
13/12/08 16:46:48.61
じゃあこうしよう
A村で生まれた子供にはAAAという笛が渡されます。
その笛を吹くとどこからともなく怪人が現れAAAと叫びます
AAA村で生まれた子供にはshowという笛が渡されます
その笛を吹くとどこからともなく怪人が現れAAAと叫びます
なぜ怪人はAAAと叫んだのでしょうか?
笛を吹いた子供がAAA村の子供だと知っているからです。
BBB村で生まれた子供にはshowという笛が渡されます
その笛を吹くとどこからともなく怪人が現れBBBと叫びます
なぜ怪人はBBBと叫んだのでしょうか?
笛を吹いた子供がBBB村の子供だと怪人は知っているからです。
とても分かりやすい説明だと思う
84:デフォルトの名無しさん
13/12/08 16:49:53.90
追加
B村で生まれた子供にはAAAという笛とBBBという笛が渡されます。
いたれりつくせりです。
85:デフォルトの名無しさん
13/12/08 16:55:56.21
どこのコぺペ?w
86:デフォルトの名無しさん
13/12/08 16:55:58.77
おっと上ミステイクしたかもな。
追加
ある日A村で子供が生まれました。しかし驚くべきことにその子供はB村の子供だったのです。
その子供は残念なことにAAAという笛しか渡されませんでした。
その子供はAAAという笛を吹いてみました。
怪人はAAAと一言言ってさりました。
こどもは寂しい思いをしました。
次の日のことです。
AAA村で子供が生まれました。またまた驚くべきことにその子供はBBB村の子供だったのです。
その子供にはshowという笛が渡されました。
その子供はshowという笛を吹いて見ました。
怪人はBBBと叫びました。
子供は嬉しくて涙がでました。
なぜ怪人はBBBと叫んだのでしょう?
それは怪人がその子供はBBB村の血筋のものだと知っていたからです!
87:デフォルトの名無しさん
13/12/08 17:00:36.46
・どこで生まれたかによって渡される笛がきまってしまうこと
・子供は渡された笛を吹くことしかできないこと
・同じ笛でもどの血筋の子供が吹くかで何が起こるかは変わりうること
とてもわかりやすい例えだと思う
88:デフォルトの名無しさん
13/12/08 17:01:42.93
ちょっとわかりにくいです。
村は 型を示すのか、オブジェクト型を示すのか
89:デフォルトの名無しさん
13/12/08 17:03:02.54
//北斗神拳伝承者、百裂拳(メソッド)を使えます。
class Hokuto{
void hyakuretuken(){...}
}
//北斗神拳を継承しているので百裂拳を使えます
class B extends A{}
//北斗神拳を継承、百裂拳をオーバーライドした天翔百裂拳が使えます。
class C extends A{
void hyakuretuken(){/*空中から百烈拳*/}
}
B kenshiro = new B();
C toki = new C();
//ケンシロウ
A denshosha=kenshiro;
denshosha.hyakuretuken();//百裂拳が発動
denshosha=toki;
denshosha.hyakuretuken();//天翔百裂拳が発動
こういうことだな。
90:デフォルトの名無しさん
13/12/08 17:04:00.26
まちげぇた。class Hokutoをclass Aにかえてくれw
91:デフォルトの名無しさん
13/12/08 17:04:40.94
翻訳例
AAA hoge2 = new BBB();
BBB村の妊婦さんを誘拐しました。
その子供hoge2はAAA村で生まれました。
92:デフォルトの名無しさん
13/12/08 17:07:31.01
荒らすなカス
93:デフォルトの名無しさん
13/12/08 17:14:01.95
わかんねー!
94:デフォルトの名無しさん
13/12/08 17:19:00.20
勉強ってつまんねぇし身につかないだろ。目的がないから。
ゲーム作りたいとか目的があるプログラミングは面白いし身につく。
プログラミングにまで「勉強」を適用したら人生真っ暗だぜ。
95:デフォルトの名無しさん
13/12/08 17:19:36.06
>>75
A型の変数でB型のメソッドが呼べないのはあたりまえ。
メソッドがオーバーライドされてるときはサブクラスのメソッドが優先される。
そんだけ。問題があるとするならお前の頭。
96:デフォルトの名無しさん
13/12/08 17:27:38.30
コンパイル時のメソッド名解決と実行時のメソッド名解決は、
解決される時期が全く別でな…
言語仕様15章12節嫁。
97:94
13/12/08 17:28:59.74
物事の本質が見えている奴とは俺のような奴である(キリッ
98:デフォルトの名無しさん
13/12/08 17:29:00.78
荒らすなカス
99:デフォルトの名無しさん
13/12/08 17:31:28.36
荒らすなカスって言ってる奴がカス!
100:デフォルトの名無しさん
13/12/08 17:34:32.63
メソッド名とメソッドの中身を切り離して考えればいい
使用できるメソッドが宣言の仕方によって制限される
メソッドの実行内容がどのインスタンスに呼ばれたかに依存する
そんだけ
101:デフォルトの名無しさん
13/12/08 17:47:07.32
コンパイル時の問題と実行時の問題を分けて理解する必要がある
コンパイルエラーはプログラムをコンパイルする時のエラーであって、プログラムはまだ1行も実行されていない
AAAのオブジェクトもBBBのオブジェクトも生成されていないし、
もし実行されたらそのとき変数hoge3はどんなオブジェクトを指しているであろうか、などといったことは判りはしない
だからコンパイル時には、変数宣言の型だけに基づいて、実際に実行せず静的に、エラーチェックをするんだ
エラーチェックを通ってコンパイルに成功したら、ようやく実行を始められる
実行時には実際にオブジェクトを生成するし、各変数がどんなオブジェクトを指してるかも判る
102:デフォルトの名無しさん
13/12/08 17:56:04.16
なんだか思ったよりずっと深い悩みっぽいね
言語設計のレベルの疑問なんかね
そうだとしたら知らんですわ
javaプログラミングに慣れてない人が突っ込む話じゃないと思うし
突っ込んだところで理解できないレベルの話だと思われる
103:デフォルトの名無しさん
13/12/08 18:02:19.70
馬鹿には無理
104:デフォルトの名無しさん
13/12/08 18:05:01.80
>>75
これのどこが難しいの?
class Car{
void drive() {
System.out.println("I am just a car.");
}
}
class HyperCar extends Car{
@Override
void drive() {
System.out.println("I am a hyper car.");
}
}
class SuperCar extends Car{
@Override
void drive(){
System.out.println("I am a super car.");
}
}
Car carA = new Car();
Car carB = new HyperCar();
Car carC = new SuperCar();
carA.drive(); // "I am just a car."
carB.drive(); // "I am a hyper car."
carC.drive(); // "I am a super car."
105:デフォルトの名無しさん
13/12/08 18:14:42.57
勉強不足
106:デフォルトの名無しさん
13/12/08 19:26:28.59
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。
スレリンク(poverty板)
107:デフォルトの名無しさん
13/12/08 21:06:41.95
こうするとコンパイルエラーです。
>>104では、
インスタンスの型側のメソッドが使用できてるのに、下文では、宣言型に依存している。
メソッドを使用できるのはやっぱり、宣言の型側に依存するのですよね。
じゃあ右辺のインスタンスの型は何を意味するのかなって。
class Car{
void drive() {System.out.println("I am just a car.");}
}
class HyperCar extends Car{
void driveHyper() {System.out.println("I am a hyper car.");}
}
class SuperCar extends Car{
void driveSuper(){System.out.println("I am a super car.");}
}
public class javatext5 {
public static void main(String[] args) {
Car carA = new Car();
Car carB = new HyperCar();
Car carC = new SuperCar();
carA.drive(); // "I am just a car."
carB.Hyperdrive(); // "I am a hyper car."
carC.Superdrive(); // "I am a super car."
}
}
108:デフォルトの名無しさん
13/12/08 21:08:02.12
もうジャヴァなんかあきらめてC#やれお
109:デフォルトの名無しさん
13/12/08 21:09:55.49
javaのwebスクレイピングプログラムを自作しているのですが、5個のスレッドでとあるサイトに
アクセスして情報を取得する処理を数日間続けると1個のスレッドが止まってしまうというような
ことに悩んでおります。
原因のわかる方、見当の付く方はおられるでしょうか。
110:デフォルトの名無しさん
13/12/08 21:15:43.24
>>109
ちんちんかゆいんですと泌尿器科に行ってちんちん見せないようなもの。
原因わかるわけないじゃん。ちんちんうpよろ。
111:デフォルトの名無しさん
13/12/08 21:22:38.71
ネットワークで簡単な通信(エコーサーバーみたいなのでも)作ってる時って
根本的にネットワークの仕組み理解してないからしてサンプルプログラムに毛が生えたレベルのものでも
どこかに脆弱性あるかもしれんからビクビクしてる
バッファオーバーフローとかも解説読んでもピンとこない XSSとかSQLインジェクションはわかる
ソフト公開してる人はセキュリティ方面にものすごく自信があるから公開してるってことなの?
あれって使用者に何かあったら作成者が責められるよね?
112:デフォルトの名無しさん
13/12/09 01:03:04.79
>>107
> >>104では、インスタンスの型側のメソッドが使用できてるのに
その理解は間違ってる。
「@Override」の文字通り「上書きされたCarクラスのdrive()メソッド」を呼び出しているだけだよ。
だからCarクラスに宣言されている内容しか見えない。
今回はその内容が一部上書きされているから上書きされたメソッドの結果に置き換わっただけ。
113:デフォルトの名無しさん
13/12/09 02:29:55.28
>>109
スタックオーバーフローじゃないの?
スレッドプールはたまに新スレッドで入れ替え直す方が良い
114:デフォルトの名無しさん
13/12/09 18:29:40.41
こんにちは。プログラム初心者です(1週間くらい)。
調べてもよくわからないところがあったので質問させてください。
下記のようなコードを書いたのですが、コード下から7行目の(★)引数に関して
該当する行の引数「kei(int x, int y)」とすると、Printlinされる整数値は「8」となりますが、
引数を「kei(int a ,int b)」とすると、出力される整数値は「3」となり、
フィールド値として定義したa,bと、kei()メソッド内の、aとbは別物の変数になってるようです。
main()メソッドと、pri()メソッドは同じ値なのに、なぜkei()メソッドだけそうなるのでしょうか?
よろしくお願いします。
public class sam {
static int a;
static int b;
public static void main(String[] args){
a=3;
b=5;
kei(a,b);
pri();
}
static void kei(int x, int y){ //(★)引数に関して
a=a+b;
}
static void pri(){
System.out.println(a);
}
}
115:デフォルトの名無しさん
13/12/09 18:43:00.50
>>114
static int a;
static int b;
と
keiの引数は別だから。
116:デフォルトの名無しさん
13/12/09 18:44:23.85
同じ名前の変数が2つあったら、より内側の方を見るから
117:デフォルトの名無しさん
13/12/09 18:48:40.84
>>115様、>>116様、ありがとうござました!とても気分がすっきりしました
1週間くらい悶々でした。どうもありがとうございました^^!!
118:デフォルトの名無しさん
13/12/09 19:05:06.20
>>111
LICENSE読めボケェ
119:デフォルトの名無しさん
13/12/09 19:45:11.04
>>117
死ねよ
120:デフォルトの名無しさん
13/12/09 20:21:13.45
>>119
どの辺が死に値するんだよw
121:デフォルトの名無しさん
13/12/09 20:27:13.03
>>117
一生すっきりしてろカス
122:デフォルトの名無しさん
13/12/09 22:03:18.82
ずぶの素人です。現在サーブレットの入門書を読みながら設定をしています。
トムキャットのほうでエラーがでてるようなのですが、以前までできてた操作ができなくなりました。例えば、以下のURLで以前までは結果がけってきてたのですが、今は帰ってきてません。
URLリンク(localhost:8080)
web.xmlにエラーがありそうなので、教科書と比較してみてるのですが、余分な文はいれてないように思います。
具体的にはURLリンク(localhost:8080)ここでトムキャットのHPを映すくとはできます。
URLリンク(localhost:8080)ここになると404 The requested resource is not available. となります。
エラーっぽいメッセージ
WEB-INF/web.xml;の解析エラーです。
linenumber 53; columnNumber:9 XMLドキュメント構造は、同じエンティティ内で開始及び終了する必要があります。
startup.ContextConfig parseWebXml 重大:53行目の9列目で発生しました。
前のエラーのためにこのアプリケーションは利用できないようにマークします。
トムキャットのコンソールがコピペできないので、これだけで情報になるかわかりませんが、原因がわかる方いましたら、教えてもらえますでしょうか?よろしくお願いします。
123:デフォルトの名無しさん
13/12/09 22:17:00.54
ゆとりってバカだな
124:デフォルトの名無しさん
13/12/09 22:18:42.78
web.xmlにエラーて書いてあんだろ
125:デフォルトの名無しさん
13/12/09 22:43:17.95
>>123
いや、書いてあることもわかるし、該当の場所もみてるんですが、何が間違えてるかわからないのです。
よって何かアドバイスいただければと思います。
126:デフォルトの名無しさん
13/12/09 22:58:25.70
最近はエラー日本語なのか。でも読まない人には意味ないし、読む人は英語でも調べるから意味薄いな。
>>122
xmlの補助をしてくれるエディタで見れば、すぐわかりそう。
127:デフォルトの名無しさん
13/12/09 22:59:10.44
>>125
タグの対応がおかしいんだろ。
128:デフォルトの名無しさん
13/12/09 23:02:49.01
プログラム書くよりデバッグは難しい
129:デフォルトの名無しさん
13/12/09 23:15:39.04
クライアントよりサーバーのプログラムの方がデバッグは難しい
130:デフォルトの名無しさん
13/12/09 23:45:29.09
all in oneのnetbeans使いやすいなー
eclipseは環境を作らなきゃいけないから、めんどい
netbeansの方が軽い気がするのは気のせいか
131:デフォルトの名無しさん
13/12/09 23:56:03.47
>>127
>XMLドキュメント構造は、同じエンティティ内で開始及び終了する必要があります。
このエラーがポイントっぽいのですが、どういう意味を表すのでしょうか?
132:デフォルトの名無しさん
13/12/09 23:57:03.29
すいません。>>131 自己解決しました。
スレ汚し申し訳ないです。
133:デフォルトの名無しさん
13/12/10 00:29:29.18
>>130
統合されてるのが好きならIntelliJはもっと気に入ると思う
134:デフォルトの名無しさん
13/12/10 00:37:43.78
トムキャットとjavaの関係を一言で言うとなんですか?
135:デフォルトの名無しさん
13/12/10 00:52:17.65
恋人同士
136:デフォルトの名無しさん
13/12/10 01:35:33.37
すいませんここで聞いていいのか分からないのですが、
Breaking the Towerというゲームができないのです
URLリンク(mojang.com)
メインVista sp2 サブXP sp3
Java Plug-in 10.45.2.18
使用中のJREのバージョン 1.7.0_45-b18 Java HotSpot(TM) Client VM
ユーザーのホーム・ディレクトリ = C:\Documents and Settings\pc
java.lang.ArrayIndexOutOfBoundsException: 1
at com.mojang.tower.HighscoreManager.getTopScores(HighscoreManager.java:40)
at com.mojang.tower.TowerComponent$2.run(TowerComponent.java:138)
Failed to get highscores
セキュリティレベルを中、次世代のJava Plug-inを無効、Javaキャッシュ削除し、
ブラウザをFirefox25、Chrome31、IE8と変えてみましたが、
どうやっても最初のタイトル画面が表示されて止まった(固まった)ままで動きません
ご教示ください
137:デフォルトの名無しさん
13/12/10 01:54:54.98
ゲーム作った奴に報告しろ
138:デフォルトの名無しさん
13/12/10 04:13:25.08
echo.jsp
<%@page contentType="text/html; charset=Windows-31J"%>
<HTML><BODY><H2>EchoServletの入力</H2>
<FROM ACTION="../servlet/input.EchoServlet"> <INPUT TYPE="TEXT" NAME="message"><INPUT TYPE="SUBMIT"> </FORM> </BODY> </HTML>
EchoServlet.java
package input;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EchoServlet extends HttpServlet {
public void doGet( HttpServletRequest request,
HttpServletResponse response )
throws ServletException, IOException {String msg = request.getParameter("message");response.setContentType("text/plain; charset=Windows-31J");PrintWriter out = response.getWriter();
out.println("message=" + msg);}}
この二つのファイルを置いてコンパイルを実行したところ、jspで呼び出したボタンを押しても、ボタンが反応しないのですが
原因わかる方いますでしょうか?
139:デフォルトの名無しさん
13/12/10 04:22:19.73
ゆとりってバカだな
140:デフォルトの名無しさん
13/12/10 04:28:03.23
>>139
そんな簡単な間違え犯してますでしょうか?
141:デフォルトの名無しさん
13/12/10 04:30:06.78
やってましたwwwwwwすいません。
142:デフォルトの名無しさん
13/12/10 04:31:02.39
ありがとうございます。
143:136
13/12/10 07:42:07.80
>>137
あ、みなさんも動きませんか
数年前からあるらしいのでjavaのバージョンが進んで動かなくなってるのかな
ありがとうございました
144:デフォルトの名無しさん
13/12/10 08:40:42.52
トムキャトは俺の横で寝ている
145:デフォルトの名無しさん
13/12/11 01:06:31.10
close関数を呼んで明示的にリソースを閉じているのに
長期的に動作させるとtoo many open fileとなってしまいます。
Javaではclose呼んでも閉じないことがあるのでしょうか?
146:デフォルトの名無しさん
13/12/11 07:12:15.34
>>145
throwで飛び越えてるとか。
Finalyでcloseしてるか?
147:デフォルトの名無しさん
13/12/11 07:46:45.51
closeしてるつもりで
できてないとしか思えんな
148:デフォルトの名無しさん
13/12/11 15:51:39.62
FirefoxでAppletの扱いがさらに酷いことに…
Appletってなんとかならないのかね?まだ使っているんですけど…
149:デフォルトの名無しさん
13/12/11 23:07:58.17
import java.io.PrintWriter;
って API として、何かを呼び出してるのでしょうか?
初心者なんですが、ほかにも
import javax.servlet.servletexception
とか、何を表してるのか知りたいのですが、わかるような本、もしくはサイトありますでしょうか?
150:デフォルトの名無しさん
13/12/11 23:10:18.73
「Firefox 26」(!!!!!!)公開、すべてのJavaプラグインの起動にクリックが必要に
スレリンク(poverty板)
【悲報】Firefox26.0リリース
スレリンク(poverty板)
151:デフォルトの名無しさん
13/12/11 23:10:52.09
>>import java.io.PrintWriter;
>>って API として、何かを呼び出してるのでしょうか?
呼び出しているよ
>>import javax.servlet.servletexception
>>とか、何を表してるのか知りたいのですが、わかるような本、もしくはサイトありますでしょうか?
あるよ
152:デフォルトの名無しさん
13/12/11 23:19:40.36
基本、クラス定義の外側にある行は実行の対象じゃないんで・・・
153:デフォルトの名無しさん
13/12/11 23:51:24.70
アプレット実行可にしてるやつなんていたのか
154:デフォルトの名無しさん
13/12/12 00:01:40.04
今やセキュリティホールの代名詞だよね
155:デフォルトの名無しさん
13/12/12 00:03:43.39
>>151
>>とか、何を表してるのか知りたいのですが、わかるような本、もしくはサイトありますでしょうか?
あるよ
教えていただけますでしょうか?
package filter;
import java.io.IOException;
import javax.servlet.filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
public void init(FilterConfig filterConfig)
throws ServletException {
このpublicから始るものは 関数と考えていいのでしょうか?
読み方がわかりません。詳しく纏められてるサイト、本の紹介をお願いいたします。
156:デフォルトの名無しさん
13/12/12 00:09:12.64
>>155
publicの読み方がわからないの?
157:デフォルトの名無しさん
13/12/12 00:10:56.77
>>156
さすがにわかりますが、他はわかりません。
たとえば、
import javax.servlet.ServletResponse; は何をしてる構文なんでしょうか?
わからずとりあえず打ってますが、一つ一つの単語?がわかれば理解が早いとおもったしだいです。
158:デフォルトの名無しさん
13/12/12 00:14:36.64
過去レス読め、ggrksまたはスレチ
159:デフォルトの名無しさん
13/12/12 00:16:04.71
>>157
そのレベルだったら本来は入門書の最初から読み進めるのが最も望ましい
今すぐ特定のコードを理解しなきゃいけない事情があるのなら俺には近道は思いつかない
160:デフォルトの名無しさん
13/12/12 00:16:48.33
そもそもこのプログラムはどこから引っ張ってきたのでしょうか?
161:デフォルトの名無しさん
13/12/12 00:20:15.61
>>159
一応 java入門は一通り読んで、
今サーブレットを作成しながら進んでます。Cを少し齧ってたのですが、いいかげん構文読めないと思いました。
入門の本は読んだのですが、どこあたりにこれらの構文の 単語の意味が書いてあるかわからずそれを訪ねています。
>>160
サーブレット入門書を読みながら、今はサーブレットフィルタの設定をしてるところです。
162:デフォルトの名無しさん
13/12/12 00:22:02.87
>>159
貴殿がおっしゃってることは至極最もだと思いますが、
たとえば、
publicは どこどこに公開することを表していて・・
とか一つの単語ごとに言い切ることは不可能でしょうか?
勿論、それができるなら、分厚い入門書必要ないといわれそうですが。。
163:デフォルトの名無しさん
13/12/12 00:23:32.90
>一応 java入門は一通り読んで、
ほんまかいな、それに後出しは嫌われるとしってるよね
164:デフォルトの名無しさん
13/12/12 00:25:22.35
脳内完結厨房か、お休み
165:デフォルトの名無しさん
13/12/12 00:30:24.45
>>162
importは「クラスの名前を省略したいとき」に使う。
javax.servlet.FilterChain
と書かなければいけない場所があった時に、
import javax.servlet.FilterChain;
を最初に書いておけば
FilterChain と書くだけで javax.servlet.FilterChain を指し示すことができる。
ただしクラス名が衝突する場合はimportはできない。
import javax.servlet.FilterChain; と
import myclass.FilterChain;
を同時に記述するとFilterChainクラスがどちらを指すのかが不明になるので同時にimportすることは出来ない。
publicは「クラスの外側からその要素にアクセスすることを許可する場合」に使う。
publicの代わりにprivateと記述した場合、その要素はそのクラスの中からしかアクセスすることはできない。
166:デフォルトの名無しさん
13/12/12 00:36:27.80
年齢をお聞きしても宜しいでしょうか?
167:デフォルトの名無しさん
13/12/12 00:40:44.53
>>166
今年66になるオジさんです。定年後の趣味としてjavaを習い始めました。
168:デフォルトの名無しさん
13/12/12 00:43:55.05
初心者に教えるにしては随分手の込んだコードだぜ?
インターフェースまで使ってるし
169:デフォルトの名無しさん
13/12/12 00:44:17.27
その息子の正志です
170:デフォルトの名無しさん
13/12/12 01:02:36.31
>>167
残念ですがここ(2ちゃんねる)は初心者に優しくしてくれるサイトではないです
モチベーションをそがれるだけだと思います
ですので別の場所に助けを求めるか、自力で奮闘することをおすすめします
171:デフォルトの名無しさん
13/12/12 01:28:15.59
>>145
ProcessBuilderとかは
標準出力・入力・エラーの3つのストリームを
勝手に作成するから
そいつら使ってないか?
172:デフォルトの名無しさん
13/12/12 02:17:19.15
トムキャット7.0.47なんですが、
conf下のweb.xmlに invokerサーブレットの項目がないようなのですが、デフォルトでしょうか?
173:デフォルトの名無しさん
13/12/12 07:02:25.40
>>172
tomcat3辺の古いのにはあった記憶があるが、
最近のバージョンはセキュリティ上の理由で存在しないと思うよ。
174:デフォルトの名無しさん
13/12/12 12:26:55.30
JAVA7をインストールしたはずなのにバージョン情報が6表示のままなのはどうしてなんでしょうか?
この7が偽者ってことなんですか?
175:デフォルトの名無しさん
13/12/12 12:46:48.61
>>174
両方インストールしてんだろ。
176:デフォルトの名無しさん
13/12/12 14:08:44.97
>>175
ということは、先に6を手動でアンインストールしないといけないということですか
自動で入れ替えしてくれるものとばかり思ってました(失礼)
177:デフォルトの名無しさん
13/12/12 14:23:41.92
>>176
環境書いてないからエスパーになるが、環境変数PATHの設定でそうなってるだけだと思うぞ。設定するかフルパスで指定して実行すれば好きな方を使えるはず。
Javaだけでなく環境の使い方も学んだほうがいいぞ。
178:デフォルトの名無しさん
13/12/12 14:55:08.51
OSによって切り替え方法が異なる。
179:デフォルトの名無しさん
13/12/12 16:13:51.14
>>177
ありがとう、勉強してみるよ
180:デフォルトの名無しさん
13/12/12 20:54:16.47
ユーザーJREはside by sideだけどシステムJREはversion新しい方で上書きだからパス通してないだけだろうな
181:デフォルトの名無しさん
13/12/12 21:56:01.44
異なるスレッドで扱うため、リストとそれに登録したオブジェクトの操作に対して同期を取りたいのですが
synchronizedListを用いて生成したリストを用いる場合は、以下のような使い方で正しいでしょうか?
SampleClass obj = objList.get(i);
synchronized(obj)
{
obj.method();
}
リスト操作(addやget)自体はsynchronizedで囲ったりしなくても
synchronizedListで生成してる限りは同期が取れていて、
リストから取得したオブジェクトは別途synchronizedを使って同期取らなきゃ駄目って認識です。
182:デフォルトの名無しさん
13/12/12 22:00:53.53
それはダメだろ
追加されたりしたらインデックスが狂う
183:デフォルトの名無しさん
13/12/12 22:12:10.95
どういう意味かと悩んでしまいましたが
つまり、下のように書けば問題解決かな…?
synchronized(objList)
{
SampleClass obj = objList.get(i);
obj.method();
}
184:デフォルトの名無しさん
13/12/12 22:29:13.51
>>183
iはどっから来るんだ?
for (int i = 0; i < objList.size(); i++) { >>183 or >>181 }
たとえばこれだと、ループ回してる最中にリストの途中へ要素が挿入されたら
同じ要素に対して2回以上methodが呼び出されてしまう可能性があるぞ
185:デフォルトの名無しさん
13/12/12 22:36:08.78
インデックスはそれに関連する変更可能なコレクションがロックされている間だけ有効と考えるのが無難
つまり>>184の例ならforの外側でobjListをロックする
186:デフォルトの名無しさん
13/12/12 22:44:39.26
>>184
なるほど・・・
ループを使う場合は全体をsynchronizedで囲って↓みたくすべきという事ですね
synchronized(objList)
{
for(int i=0;i<objList.size();i++){ objList.get(i).method; }
}
ループは考えてませんでしたが確かにiだとループカウンタみたいでした。
ループしなければ>>183で大丈夫そうかな?
ループ扱う際にも注意が必要と分かったので助かりました。
187:181
13/12/12 22:47:09.34
名前にレス番書き忘れてた
そして>>185の方も補足ありがとうございます。
188:デフォルトの名無しさん
13/12/12 22:50:29.32
ループでなくてもiを一時的に保持してる以上はズレるでしょ。
仮にiがメソッドの引数なら、結局使う側でロックしなきゃいけない
スレッドセーフ(笑)なクラスが出来上がる。
189:デフォルトの名無しさん
13/12/13 00:07:42.09
パブリックなメンバ変数のみを持ったクラスを継承して、いろいろメソッドを追加したい
それから、継承元のオブジェクトを元に、継承先のオブジェクトを生成する手段も用意したい
継承元は将来頻繁に変更することが想定されているので、継承先オブジェクトを生成するメソッドで
継承元のすべてのパラメータを列挙してうんぬんというのは避けたいところ
こういうことするのに簡単な方法ってない?
Field使ってやればいけそうだけど、あまりスマートではないなぁと思って
あと、Java的にはメンバ変数の継承はなにか問題あったりする?
190:デフォルトの名無しさん
13/12/13 00:13:58.23
URLリンク(www.ipa.go.jp)
Javaって怖いね
191:デフォルトの名無しさん
13/12/13 00:14:54.97
ゆとり乙
192:デフォルトの名無しさん
13/12/13 00:23:46.81
Lombok使ってみたがこれ他の機能との相性は大丈夫なんか?
あとListのゲッターはnullなら新しいArrayList返す実装が好きだからそこが不満
193:デフォルトの名無しさん
13/12/13 00:29:14.67
>>189
継承しないで包含する
インスタンスの生成はコンストラクタに渡すだけ
194:デフォルトの名無しさん
13/12/13 00:50:42.28
>>193
渡したオブジェクトのメンバ変数へどうやってデリゲートすればええのん?
元クラスのメンバ変数の定義変えたときに、先クラスの定義変えるとかはやりたくない
あと、型情報落ちるのもできれば勘弁
195:デフォルトの名無しさん
13/12/13 01:01:21.64
>>194
パブリックなメンバ変数のみを持ったクラス getパブリックなメンバ変数のみを持ったオブジェクト() {
return this.パブリックなメンバ変数のみを持ったオブジェクト;
}
難しく考えるな
196:デフォルトの名無しさん
13/12/13 01:09:25.20
>>194
元クラスのメンバの定義の変化にまで対応するにはメタプログラミングが必要になる
が、到底実用的ではないのでほとんどやってる人はいない
197:デフォルトの名無しさん
13/12/13 01:11:15.66
>>195
お前は状況設定が理解できてないな
「いろいろメソッドを追加したい」と言ってるんだから単なるデリゲートじゃ駄目
元クラスのメンバを利用したメソッドを作り、かつ元クラスのメンバの定義が変更されても追加したメソッドに修正せずに済む方法を求めている
そんなものはメタプログラミングしかない
198:デフォルトの名無しさん
13/12/13 01:14:36.86
>>197
その要件なら包含で満たせるよね
199:デフォルトの名無しさん
13/12/13 01:18:52.01
全フィールドを手でコピーしたりするようなコード書くのは
修正が面倒だから嫌だという意味だろ?
それだけなら包含でいい
200:デフォルトの名無しさん
13/12/13 01:19:03.73
>>198
コンポジションはコーディング時の元クラスのメンバ定義に依存してしまうので、
コーディング後に元クラスの定義が変更されたらそれに対応することは出来ないよ。
201:デフォルトの名無しさん
13/12/13 01:22:09.17
>>195
すまん、要件が抜けてた
フレームワークの仕様上、持ってるオブジェクトのメンバ変数にアクセスするのに1段で行けないと問題がある
aInstance.getBVariable() や aInstance.bVariable は おkだけど、aInstance.getB().variable は多分ダメ
202:デフォルトの名無しさん
13/12/13 01:26:16.82
うお、伸びてた
みんなありがとう
なんか難しいっぽいな…
Javaむずいお('・ω・`)
203:デフォルトの名無しさん
13/12/13 01:27:54.73
>>201
その仕様になってる理由は?
204:デフォルトの名無しさん
13/12/13 01:33:47.98
>>203
フレームワークがライブラリに依存してる
JSONICなんだけど、デコードする際の仕様がそんな感じっぽい
調べきれてないのでもしかしたらなんか迂回策あるかもしれないが…
205:デフォルトの名無しさん
13/12/13 01:36:14.07
>>204
オブジェクト指向を正しく使うためにコーディング規約で制限してるのかと思ったよ
206:デフォルトの名無しさん
13/12/13 01:45:03.37
関係ないけど、javaxにjsonのfactory追加されるな。
207:デフォルトの名無しさん
13/12/13 01:50:17.30
問題は内部実装に何使ってるかだな
既存のサードパーティ製のライブラリをjavaxに配置しただけなら特に嬉しくはない
208:デフォルトの名無しさん
13/12/13 04:09:03.42
自分は、Androidアプリ作るためにEclipse使ってますが
NetBeansも入れています。
そこで、javaのデスクトップアプリを作るには
どちらを、使ったほうが良いでしょうか。
漠然とした質問で申し訳ありません。
209:デフォルトの名無しさん
13/12/13 04:16:10.64
URLリンク(ossforum.jp)
210:デフォルトの名無しさん
13/12/13 05:20:16.54
>>209
レスありがとうございました。
javaアプリの開発は、NetBeansでおこないます。
211:デフォルトの名無しさん
13/12/13 10:12:54.78
>>207
Factoryだから実装は隠蔽されるだろし、環境ごとに違うだろう。
212:デフォルトの名無しさん
13/12/13 12:46:15.22
>>211
JSONのライブラリなんて環境依存な要素がないし、Oracle JDKかOpenJDKかの違いしかないでしょ。
213:デフォルトの名無しさん
13/12/13 15:32:04.72
>>212
何言ってんだお前は。どのサードパーティでも隠蔽されるって話だろ。
214:デフォルトの名無しさん
13/12/13 15:59:02.96
>>192
とりあえずandroidでは問題なし
allargsコンストラクタ効かないけど。
フィールドに@notnullつければヌルポ投げるゲッター生成可能
使ってないからあまり詳しく知らないが。
215:デフォルトの名無しさん
13/12/13 16:15:45.27
>>213
ファクトリーメソッドパターンを使ってオブジェクト指向的に隠蔽するという話ではなく、
物理的に内部実装が隠蔽されるという話?
216:デフォルトの名無しさん
13/12/13 16:22:47.46
>>215
物理的の意味がわかりませんが。
xmlのAPIとかと同じ。
217:デフォルトの名無しさん
13/12/13 16:28:39.79
>>216
XMLのAPIは内部でどのような実装を使っているか確認できますケド。
URLリンク(ideone.com)
218:デフォルトの名無しさん
13/12/13 16:51:28.15
androidはスレちがい
219:デフォルトの名無しさん
13/12/13 17:08:10.51
>>217
どこらへんが物理的かわからない。
情報だけだろ。
220:デフォルトの名無しさん
13/12/13 17:09:54.06
>>216
い み ふ、いみふ
221:デフォルトの名無しさん
13/12/13 17:16:00.54
先ほどから日本語の読み書きに支障が起きている人がいますね。
222:デフォルトの名無しさん
13/12/13 17:17:29.06
隠蔽って依存しないって意味だろ。
確認できたから何だって言うんだ?
223:デフォルトの名無しさん
13/12/13 17:23:22.74
>>222
依存度の話は誰もしていませんよ。
JSONを実装するにあたりサードパーティ製のライブラリを取り入れたのなら、
何を取り入れたのかを確認したいだけです。そこに依存も糞もありません…。
224:デフォルトの名無しさん
13/12/13 17:45:26.75
JSONを実装するのか、偉い
225:デフォルトの名無しさん
13/12/13 17:49:10.70
>>223
なら最初からjar見ろよ。
見て、ふーんで終わりだろ。
コアAPIもソースのauthorで誰が書いたかわかるが、別に気にしないだろう。
226:デフォルトの名無しさん
13/12/13 17:55:54.06
>>225
ああ、そのレベルの方ですか。
Java標準ライブラリにはバグや変わった挙動があるので、
サードパーティ製のライブラリを取り入れた場合はそのライブラリの癖を把握しておくことが必須ですよ。
「仕様通りに書いたのに動きません。ライブラリのバグです」は仕事では言い訳にならないからね。
227:デフォルトの名無しさん
13/12/13 18:03:08.25
>>226
アホか。
問題あるならfactoryでなくて自分でインストールしたライブラリ使え。
228:デフォルトの名無しさん
13/12/13 18:03:16.21
「実装する」の意味がわかんやつにいわれてもなー、国語かな
229:デフォルトの名無しさん
13/12/13 18:09:04.52
なかなか釣れませんね~^^
230:デフォルトの名無しさん
13/12/14 02:25:59.52
xercesとかXalanとかfastinfosetとかJOGLが複数バージョン内部パッケージにあるとかrhinoとかnashornとかもう嫌だ