別に事前に100%正解を出す必要はないでしょ
実装無しで設計が完璧にこなせるなんて、それは予言に近い
ウォーターフォールの理想論を極めた感じ
十分事前設計可能な程度の小さな規模だとか
既に熟知してる分野だったら、コード書かなくてもインターフェース分かるかもしれんけど
リファクタリングでボトムアップ的に導き出したインターフェースの方が
あとからメンテしやすいことだってよくある
>>689 >クラスもimplementできるようにしてほしい
意味がわからん
IDEにもよると思うけど、インターフェース抽出なんて30秒くらいでできるだろ
>>699 クラスを使ってるほうもインターフェースにしなきゃいけないじゃない
単純作業でも変更が広範囲に及ぶから結構しんどい
クラスをnewするところを除いて、どこも変更せずに
こっそり中身を入れ替えたいんだ…
Scala使えよ
構造的部分型があるからインターフェースなんか要らないぞ
interfaceにメソッド実装できるようにならなかっけ?
そう、それなら見なければいいじゃない
>>701 言いたいことはよく分かるぞ。最近はやっとこっちのほうが主流だからな。
けど、javaスレでstructural typeな言語使えって言われても・・・nominal type嫌いならなんでjavaスレに居るんだよ。
すんごい基本的な事かもしれんけど・・・
class testClassA{
private byte[] data;
void main(){
testClassB b = new testClassB();
data = b.getData();
b = null;
}
}
class testClassB{
private byte[] data1;
private byte[] data2;
byte[] getData(){
data1 = new byte[32];
data2 = new byte[32];
return data1;
}
}
↑の動作でb=null;した後ガベージコレクションが発生してもtestClassAのdataの中身は保持したままになってるって事でOK?
で、testClassBの中のdata1はメモリ上に残ったままになるけど、data2は他からの参照が無いって事で
ガベージコレクションで解放されるんかな?
教えてプリーズ!
yes
コンストラクタからは呼び出してはいけないメソッドがあって
どっかのバカが、やらかしちゃったんで、それを探し出したいんですけど、
たとえばこんなの
class Unko {
Unko() {
foo(); // アフォが追加したコード
}
void foo() {
assert なんとかかとか : "ゴルァ!コンストラクタから呼んじゃダメぽ!";
本来の処理...
}
}
この「なんとかかとか」に使えるスマートなコードを教えてくだしゃあ
>>708 assert !new Exception().getStackTrace()[1].getMethodName().equals("<init>");
assertを埋め込まなきゃいけないメソッドが分かってるんだったら
そのクラスのコンストラクタ見りゃいいだけだろ
何やってんだ
>>710 継承が多くて探すの面倒ってことかと思った。
本質的には初期化が終わってるフラグを持って、そのフラグが立ってなかったら例外でいいと思った。
Java SE 8 update11 キター
1:if (Date1 < Date3 && Date2 > Date3) { res = "ok";}
2:if (Date1 < Date3 || Date2 > Date3) { res = "ok";}
ORが||だと1と2で同じブーリアンになるよね?
不等号反転かつ全体の真偽値反転してるとかならともかく、
なんで同じになると思うんだ?
ただしDate1>Date3>Date2が条件
実際にに書いて同じになったから
そもそも何だこの質問?
717 :
デフォルトの名無しさん:2014/07/17(木) 17:54:19.08 ID:aUrLvZEm
Javaの勉強始めましたがいきなりつまづいています。可能ならば教えて下さい。
class hoge {
...
}
があってhogeのインスタンスを作るのに
hoge aaa = new hoge()
というように、なぜhogeを2回も書かないといけないのですか?
C#ならvarがあるよ
javaはちと遅れてるね
普通に1で書くんだろうけど2でも同じになったから聞いてみただけ
||と|の違いだと気づいたけど合ってるよね
>>717 違う場合があるから
List<String> list = new ArrayList<>();
721 :
デフォルトの名無しさん:2014/07/17(木) 18:02:57.10 ID:aUrLvZEm
717の続き
aaa = hoge()
や、せめて
aaa = new hoge()
って書かない(書かせない)理由が知りたいのです。
fugaってクラスもあったとして
fuga aaa = new hoge()
は当然エラーですよね
722 :
デフォルトの名無しさん:2014/07/17(木) 18:12:11.16 ID:aUrLvZEm
>>720 ありがとうございます。
そういう生成もあるのですね。
new hoge()はhogeクラスのコンストラクタを呼んでるからだと思う
>>721 変数の型指定が変数宣言を兼ねてるから…
C#を使えば幸せになれる
>>717 わけて考えろ。
1. hoge aaa;
2. new hoge();
1行目でhogeのインスタンスを格納(厳密にいうと参照)するためのaaaって変数を宣言してる。
2行目でhogeのインスタンスを作ってる。
これらを1行で書くと、
hoge aaa = new hoge();
となって、意味的には、hogeのインスタンスを格納するaaaって変数を作って、
そこに新しいhogeのインスタンスを作って代入してる。
newが必要なのは参照を返すからかなぁ…
c++だとfuga aaa;でインスタンスが作れるよね。
初期化時の引数指定する場合はfuga aaa(arg1, arg2...);
728 :
デフォルトの名無しさん:2014/07/17(木) 23:39:14.55 ID:uiWC/AQm
>>726 仰ることは分かります。
=new hoge()って書いてるんだから、aaaはhoge型と型推論してもいいんじゃない?記述が助長じゃない?と感じたんですよ。
生ビールを頼んだらジョッキに入れてくるのが当然でしょ? 湯呑みに入れてくる奴いないよね、って感じです
Cやったことあるなら宣言部分けると意味わからんからで納得しそうだな。
「宣言部分けて友達とかに噂されると恥ずかしいし・・・」
ああ、ガチなのか実際の型と宣言時の型が同じとは限らんよ
まあそれを言い出したら型推論の方が汎用性は高いんだけどな
>>728 冗長性を排した言語を使えばいいよ。
長年使ってるからかも知れないけど、この程度の冗長性が丁度よいんだよ。
糖衣構文増やしてるのもあまり好きじゃない。
Javaも十分糖衣構文増やしてると思うけどね
誕生以後の拡張はほとんど全部糖衣構文だろ
>>733 うん、だからそれが嫌だなーって思ってるということ。
IteratorとかAPI増える方が好み。
仕事だと合わせて使うけど。
// 個人の感想であり、生産性を保証するものではありません。
>>727 でもc++だとどこにインスタンスができるかいちいち把握しないといかんからなあ‥そういや c# と同じく auto が最近追加されたね
>>720 わざわざこういう書き方をするメリットは?
ArrayListの例だと、ArrayListがほぼListの実装でしかないから、そういう書き方をしてもあまり問題ないだろうけど、
List<String> list = new LinkedList<>()ととしてしまうと、Stack系のメソッドが漏れなく使えなくなる。
>>736 LinkedListを使うけどListのメソッドしか使わないことを明示する
protectedなメンバでListのメソッド以外の操作されたくないときとかあるんじゃね
>>736 後で挿入が多くなって遅くなった時、最初だけLinkedListに書き換えれるだけで済む。
つまり依存が少ない。
ならそもそも型について何も書かない型推論が一番依存が少ないことになるよね
フィールドや引数なら誰が触るかわからないからともかく、ローカル変数なら例えば「getとaddを持つ任意の型」と見なせる
その手の型推論はどこでうっかりLinkedListに成り下がるかわかったもんじゃないので
依存が少ないとは言えないんじゃね?
>>740 それを言うならローカル変数なら目の届く範囲だから依存しても構わないだろ。
Javaの中での書き方の話ししているのであって、型推論とかスレチ。
newしたら普通はfreeやdeleteが伴う訳だがgcが解決してくれる。
javaではクラスのインスタンスは全て参照だから必ずnewが利用される。
プリミティブな変数はその限りではないのでいちいちnewはしないが、javaの配列は配列オブジェクトなのでnewが必要。
みたいな?
それぞれのカードがどの場所にどういう順序で並んでいるかをデータ化するだけ
ああ、理解できた
ありがとうございました
なんか変に難しく考えてました
でもこれって同じ札が何度も出る可能性あるよな?
この場合どうしたらいいんだ?
一度出たものをどこかの配列に格納して
それを比べるってのは検討ついたがどう書けばいいんだ
そういうクラスってもうあるのか?
>>747 すいません
並び替えの表記ミスで同じ数字が出てただけでした。
ほんとすいません