- 1 名前:デフォルトの名無しさん [2016/06/17(金) 08:16:55.52 ID:442rGUo0.net]
- プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 pc11.2ch.net/hp/ Webプログラミング pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 (p)ttp://www.wikiroom.com/java/?path,classpath ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 ・String に == は使うな。equals() を使え。※ 質問時の心得 ・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。 ・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。 前スレ ★★Java質問・相談スレッド177★★©2ch.net echo.2ch.net/test/read.cgi/tech/1458033246/
- 797 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 09:22:52.18 ID:b/O7Qjtb.net]
- >>786
モービルのCMだよ
- 798 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 11:39:36.16 ID:yco4jaYN.net]
- >>開いたstreamが塞がらないw
これは素直にうまいと思いました(小並感)
- 799 名前:デフォルトの名無しさん [2016/09/26(月) 12:39:32.80 ID:mwa1njiS.net]
- まあでも座布団1枚かな
- 800 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 14:05:09.09 ID:dMvvSsQ7.net]
- ありがとう
- 801 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 18:51:06.54 ID:ZCZkJviH.net]
- 初歩的な質問だけど、2つの配列が同一の内容を持っていることを簡単にチェックしてくれるメソッドは無い?
例えば、 int[] a,bがあった時, int型のsize == a.length == b.lengthとする。 この時、 int i=0; for(; i<size; i++){ if(a[i] == b[i]) i++; } String ans = (i==size) ? "same" : "not same"; という普通のチェック法しか無いのか?
- 802 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 19:31:03.11 ID:Tv3f4Va/.net]
- >>795
System.out.println(Arrays.equals(a, b));
- 803 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 20:20:19.60 ID:ZCZkJviH.net]
- >>796
サンクス
- 804 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 20:38:58.07 ID:ZCZkJviH.net]
- >>795をちょっと発展させた質問だけど、
ハッシュマップのキー部分が(基本型じゃ無く)配列で定義されていたら、直感的なやり方だと上手くいかなくなってしまう 具体例 HashMap<int[], Integer> map = new HashMap<int[], Integer>() {{ put(new int[]{1, 1}, 3); put(new int[]{-1, 5}, 20); put(new int[]{10, 2}, -3); }}; System.out.println(map.get(new int[]{-1, 5})); // 出力は null これだとダメ こうしなきゃ行けないの? for (int[] a : map.keySet()) { if (Arrays.equals(a, new int[]{-1, 5})) { System.out.println(map.get(a)); } }
- 805 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 21:38:11.90 ID:ZRBGeI3f.net]
- >>798
どっかのスクリプトから来た人? Javaでは配列をキーにするというのはまずやらない というか一般に複雑なデータ構造を配列やコレクションだけで表現することはJavaでは嫌われる 基本的に、いちいち愚直にクラスを作って冗長で明示的すぎるコードを書くのが美徳とされる 794の例だとキーのためのクラスを作ってhashcodeやequalsを猿のように実装するのが正解
- 806 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 21:58:19.89 ID:NRdPNu0H.net]
- それより入門書でも読めよ
- 807 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 00:14:41.69 ID:dNidmfNN.net]
- 俺プロではないからマクロな感覚分からないんだよな
- 808 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 00:15:36.88 ID:dNidmfNN.net]
- >>799は参考になった
- 809 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 00:47:25.88 ID:aQphVoL7.net]
- >>796
瞬殺でワロタw
- 810 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 08:42:01.16 ID:ld49Y9Vg.net]
- 791の時点ですでにJavaっぽくない感じがするなぁ
愚直にやるとしてもこうじゃない? String ans = ""; for (int i = 0; i < a.length; i++) {
- 811 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 08:45:00.89 ID:ld49Y9Vg.net]
- 途中送信しちまった・・
String ans = "same"; for (int i = 0; i < a.length; i++) { if (a[i] != b[i]) ans = "not same" } 最後まで行ってからlength比較ってなんかCっぽい
- 812 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 08:48:11.60 ID:aQphVoL7.net]
- >>805
コンパイルエラー
- 813 名前:デフォルトの名無しさん [2016/09/27(火) 09:03:26.00 ID:/7SET8Ca.net]
- てか、a[i] != b[i] が一度成立したらそこから先は比較する必要なし。
- 814 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 09:22:47.94 ID:ld49Y9Vg.net]
- >>806
すまんセミコロンぬけてたわ こうか! String ans = "same"; for (int i = 0; i < a.length; i++) { if (a[i] != b[i]) { ans = "not same"; break; } }
- 815 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:05:48.66 ID:Gry6xj9+.net]
- C/C++からJavaに移ったらクラッシュしたときに
stack traceが表示されて、ソースコードのどこでクラッシュしたとか そのメソッドの呼び出し元がルートまで全部表示されて、 ぬるま湯すぎてワロタwww これってほかの言語でもあるの?便利すぎてもうこれがない言語はやりたくないsっすw
- 816 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:08:18.00 ID:Gry6xj9+.net]
- C/C++だったらどこでクラッシュしたかを調べることから始めないといけないからな
至る所にprintf入れて、ここのprintfは表示されてるけどここのprintfは表示されてない、 みたいなことを繰り返して特定していかないといけない そのうえメモリ破壊してたらビルドするたびにクラッシュ箇所が変わるからprintf作戦も使えないw おまいらズルすぎ。もっと早くjavaに移ればよかった。
- 817 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:09:13.01 ID:pJiHchri.net]
- Cだって Core Dumped してくれるじゃないか
- 818 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:15:00.94 ID:Gry6xj9+.net]
- gdbで見るやつだっけ?
javaのstack traceに比べたら手軽さが違いすぎる Segmentation faultと表示されて意味不明なアセンブラの羅列見せられても何の役にも立たん iphoneアプリ開発もやってみてるんだがC言語系なようで、 やっぱりクラッシュしたことしか教えてくれなくて、意味不明なアセンブラを見せられるのも同じ androidの方がええわ クラッシュしたときに解析効率が圧倒的に違いすぎる
- 819 名前:デフォルトの名無しさん [2016/09/27(火) 21:26:53.83 ID:utAkdrdU.net]
- >>812
え?gdbでも普通にCならCのソース出るよ。使い方知らないの? てか、この頃はIDEのデッバッグでステップやトレースをGUIの画面に出しながらできるじゃん。 Javaに限らず主要な言語はだいたい同じようにできるぞ。
- 820 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:33:02.60 ID:Gry6xj9+.net]
- >IDEのデッバッグでステップやトレース
ステップ実行のことを言ってる
- 821 名前:?
デバッガの使い方の話じゃないんですが。。 [] - [ここ壊れてます]
- 822 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:35:54.74 ID:l7d7Fmom.net]
- Cはミスってもその場で止まらずに、後になって突然暴走したりクラッシュしたりすることがよくあるからなあ
あのデバッグはまさに地獄
- 823 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:38:24.78 ID:w5gpFchP.net]
- あと3時間くらいしたらスタックトレースなんかどうでもよくなって
いかに相手を言い負かすかに心血を注ぐ二人の姿が見える
- 824 名前:デフォルトの名無しさん [2016/09/27(火) 21:39:49.73 ID:utAkdrdU.net]
- >>814
core dump したってデバッグオプション付きでコンパイルしてあれば gdb でソース出せるよ。
- 825 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 21:45:20.26 ID:Gry6xj9+.net]
- crashファイル指定してgdb起動してコマンド打ち込むのが面倒
そんなことをするぐらいならprintfを至るところに入れて再実行したほうが早い そんな作業をしている間に思考が飛んで何を調べていたか分からなくなりがち クラッシュした瞬間にクラッシュダンプ表示してくれればいいのに javaのstack traceは楽
- 826 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 22:01:30.85 ID:Gry6xj9+.net]
- ある関数が呼ばれたときに、その関数の呼び出し元をルートまで全部表示するのって
Java以外でできる言語あるんでしょうか
- 827 名前:デフォルトの名無しさん [2016/09/27(火) 22:06:43.47 ID:tLj3yCec.net]
- 関数の呼び出し元を記憶しておかないと、戻れないから普通に考えたら全部出来るはずだけど
- 828 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 22:16:21.97 ID:YgEqXvfd.net]
- >>819
そろそろ死ねよカス
- 829 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 22:37:49.98 ID:Gry6xj9+.net]
- かかってこいよ
- 830 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 22:46:28.22 ID:EXpjvHub.net]
- >>818
printf() はバッファリングされてるから使える場合とそうでない場合がある。 そんなことするぐらいなら gdb で core と一緒に指定して whe で呼び出し元出したり p や x で変数やメモリの内容出した方が確実。 そういうコマンド覚えられないなら IDE 使えばいい。 >>819 Cでもなんでもデバッグオプション付けてコンパイルしておいてデバッガ使えばできる。 但し、スタックを破壊するようなバグがあった場合は(OSもそれを検知できないような システムの場合は)途中から崩れて出せない場合がある。しかしそういうことが可能な 言語というとCやC++みたいな直接メモリ操作できてしまう言語だ。CやC++はそういう 安全性については言語のレベルではサポートしておらずライブラリにも使わない方が 良い関数が入っていたりする(例えば gets())。
- 831 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 22:55:42.21 ID:Gry6xj9+.net]
- デバッガ使わなくても出せるのはjavaだけなんすか
- 832 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 23:00:54.57 ID:w5gpFchP.net]
- 脳障害でもあんのかしら
- 833 名前:デフォルトの名無しさん mailto:sage [2016/09/27(火) 23:31:07.98 ID:Gry6xj9+.net]
- 大体デバッグビルドなんか使わねえだろ
ビルド時間は伸びるわ起動時間は伸びるわで良いことなしだろ リリース版とデバッグ版で挙動が違うみたいなこともあって最早何のデバッグしてるのか分からないだろ 仕事のプログラムでもリリース版しかビルドしない現場が多かったぞ リリース版で出せないんじゃ出せないのと一緒だろ
- 834 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 00:04:16.16 ID:7DkLKHaf.net]
- そうか
良かったな
- 835 名前:デフォルトの名無しさん [2016/09/28(水) 00:09:23.00 ID:WDfhJLOB.net]
- >>826
じゃあ Java のコンパイルも javac -g:none でやれば? デフォルトでは -g:source,lines と同じでデバッグ情報含んでるからな。
- 836 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 00:13:00.14 ID:WDfhJLOB.net]
- C:\Temp>type Test.java
public class Test { public static void main(String[] args) { int[] a = null; a[0] = 1; } } C:\Temp>javac Test.java C:\Temp>java Test Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:4) C:\Temp>javac -g:none Test.java C:\Temp>java Test Exception in thread "main" java.lang.NullPointerException at Test.main(Unknown Source) C:\Temp>
- 837 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 05:46:31.44 ID:Ks5fZMDV.net]
- よかったね
おめでとう
- 838 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 18:02:08.43 ID:ZkCEt2YU.net]
- >>826
ビルド時にPDBとかMAPとか外部生成しておいて デバッグする時にダンプと付き合わせればいい ただし最適化のせいでぽろぽろ情報が落ちるのは仕方ない
- 839 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 06:23:12.99 ID:XGa6uwRB.net]
- ここ使え
ideone.com
- 840 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 17:27:07.81 ID:Hi+y6PXx.net]
- int len=a.length;
if(len>b.length) len=b.length; とかしないと比較が終わる前に 配列が終わるん
- 841 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 19:02:48.90 ID:IMTQkm1l.net]
- 何言ってんの?
- 842 名前:デフォルトの名無しさん mailto:sage [2016/10/01(土) 19:05:23.53 ID:qVJYtxaX.net]
- min(a.length, b.length) とかそーゆー話じゃねーかと
- 843 名前:デフォルトの名無しさん [2016/10/02(日) 06:40:17.05 ID:XuZokQkz.net]
- Java Web startが無限に発生して固まってしまいます
助けてください
- 844 名前:デフォルトの名無しさん mailto:sage [2016/10/02(日) 18:40:59.78 ID:WLOGtLUz.net]
- Javaws 大量
でググってください。
- 845 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 01:23:08.66 ID:C//SKDLf.net]
- 結局、equalsの使い方ってどちらが正しい?現場で今もめてるんだが
定数.equals(変数) 変数.equals(定数)
- 846 名前:デフォルトの名無しさん [2016/10/03(月) 02:00:52.97 ID:cT7/Wfai.net]
- >>838
どっちも大間違い static boolean equals(a, b) ← 大正解
- 847 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 02:00:57.97 ID:hxqof8pD.net]
- どちらも正しい
- 848 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 02:11:30.59 ID:JXOSM+f0.net]
- >>839
equals(定数, 変数)とequals(変数, 定数)どちらが正しいんですか?w
- 849 名前:デフォルトの名無しさん [2016/10/03(月) 02:34:13.30 ID:cT7/Wfai.net]
- >>841
どっちも大間違い static boolean equals(引数, 引数) ← 大正解
- 850 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 07:56:30.98 ID:FA3Rr9+N.net]
- >>838
そんなん宗教の問題じゃんって前置きをしたうえで変数.equals(定数)を推す 英文法に置き換えればメソッドのオーナー(左側)が右側に依存してるわけだし 寿命が短い側が寿命の長い側を参照すべき 定数.equals(変数)は昔ながらの変数側のNULL避けでそう主張してるのだろうけど 引数チェックで最初にObjects.requireNonNull(変数)した後で Objects.equals(変数, 定数)賭するのが良い。 nullを見なかったことにするのは契約プログラミングの観点からすれば行儀が悪い。
- 851 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 16:15:00.68 ID:7+HzYAQg.net]
- ttp://d.hatena.ne.jp/nowokay/touch/20090219
- 852 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 19:29:56.73 ID:3q3IhDEc.net]
- トラックバック先でえらくバトってんなぁ
- 853 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 20:38:09.01 ID:C//SKDLf.net]
- 結局誰もわからないんだね
- 854 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 20:42:00.52 ID:VJUjUYX6.net]
- お前それは仏教とキリスト教のどっちが"絶対的"に正しいの?って聞いているようなことだって分かってんの?
- 855 名前:デフォルトの名無しさん [2016/10/03(月) 20:42:13.59 ID:LjbGDdSQ.net]
- >>846
俺にははっきりわかってる static boolean equals(引数, 引数) ← 大正解
- 856 名前:デフォルトの名無しさん [2016/10/03(月) 20:42:40.67 ID:LjbGDdSQ.net]
- >>847
仏教もキリスト教もどっちも大間違い static boolean equals(引数, 引数) ← 大正解
- 857 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 20:47:46.07 ID:YrJzZRxh.net]
- いい加減つまんねハゲ
- 858 名前:デフォルトの名無しさん [2016/10/03(月) 20:48:58.78 ID:LjbGDdSQ.net]
- >>850がハゲ ← 大正解
- 859 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 20:50:11.16 ID:HbmexdQK.net]
- ハゲは関係ないだろハゲは!
俺はハゲじゃないけど ハゲの人が泣いてると思わないのか 俺はハゲじゃないけど
- 860 名前:デフォルトの名無しさん [2016/10/03(月) 20:51:45.60 ID:LjbGDdSQ.net]
- equalの意味を考えろ
左辺と右辺を入れ替えて結果が変わるとかありえないだろ なんだそのガバガバな論理は 意味を考えろ、同一に順番なんて関係ない りんごがみかんならば、必ずみかんがりんごなんだよ
- 861 名前:デフォルトの名無しさん [2016/10/03(月) 20:53:14.82 ID:LjbGDdSQ.net]
- nullオブジェクトを使ったところで結局は内部でこれ
static boolean equals(引数, 引数) ← 大正解
- 862 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 20:54:16.83 ID:0xD3JTi2.net]
- なっこれが宗教家だよ
- 863 名前:デフォルトの名無しさん [2016/10/03(月) 20:56:01.57 ID:LjbGDdSQ.net]
- 順番が関係ないものに順番の概念を持ち出すから
とりとめのない水掛け論に発展する、そこに答えは1マクロンもない 大正解ロジックが唯一の大正解
- 864 名前:デフォルトの名無しさん [2016/10/03(月) 20:56:18.68 ID:hBEK0Of5.net]
- Scalaなら==だけでequals呼び出すぞ
- 865 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 20:59:29.56 ID:hxqof8pD.net]
- 数学でもランダウ記号なんか使ってると必ずしも 「A = B ⇔ B = A」 ではないが
- 866 名前:デフォルトの名無しさん [2016/10/03(月) 20:59:36.92 ID:LjbGDdSQ.net]
- >>855
怪しいとお考えでしょう、よく言われます けれど私が言ってることは普通のことです 大小の比較であれば順番の概念が必要になります 大なり小なりは向きがありますからね しかし=には向きがありません ガラスにマジックで書いて裏側から見てください 見なくても想像できますよね、全く同じです つまり順番の概念がそもそも成り立たない static boolean equals(引数, 引数) ← つまり大正解
- 867 名前:デフォルトの名無しさん [2016/10/03(月) 21:03:23.11 ID:LjbGDdSQ.net]
- >>858
____ / \ / ─ ─\ ? / (●) (●) \ | (__人__) | ________ \ ` ⌒´ ,/ .| | | ノ \ | | | /´ | | | | l | | | ヽ -一ー_~、⌒)^),-、 | |_________| ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | |
- 868 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:05:07.10 ID:PdXev88S.net]
- そうじゃない
お前がやってるのがキリスト教みたいな布教活動だって言っているの
- 869 名前:デフォルトの名無しさん [2016/10/03(月) 21:08:40.50 ID:LjbGDdSQ.net]
- >>861
キリスト教によって救われた人がどれ程いることか 俺は迷えるプログラマたちを導いて救済したい
- 870 名前:デフォルトの名無しさん [2016/10/03(月) 21:13:26.91 ID:LjbGDdSQ.net]
- 論理的に導かれる唯一の大正解を示すことによって
お前ら木偶の坊どもの頭にかかってる蜘蛛の巣を払いのけ 光りあふれる鮮やかな未来をお前らと共に歩んでいきたい 共に生きよう
- 871 名前:デフォルトの名無しさん [2016/10/03(月) 21:13:50.63 ID:LjbGDdSQ.net]
- static boolean equals(引数, 引数) ← 大正解
- 872 名前:デフォルトの名無しさん [2016/10/03(月) 21:14:40.66 ID:LjbGDdSQ.net]
- お前らよーく考えろよ、このスレで一番声がでかいのは誰かってこと
正解はそこにある
- 873 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:15:54.46 ID:SLz7tpRD.net]
- なんかあぼーんが多いわ
- 874 名前:デフォルトの名無しさん [2016/10/03(月) 21:16:26.53 ID:LjbGDdSQ.net]
- >>866
ぇ
- 875 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:29:22.01 ID:g+XkVx2o.net]
- Java7以降はObjectsクラスを使う、で終わったネタを無理に引っぱろうとしても何も出てこない
なおnull許容型の議論もJava8でOptionalが追加されたので、これも解決済みだろう 今はまだよくてもJavaREPLするようになって再度蒸し返されそうな気もする
- 876 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:33:28.66 ID:oXywut21.net]
- すいませんレベル高い議論の途中に低レベルな質問で申し訳ないんですが
A→B→C って継承してるときにCからAのメソッド呼び出すのってどうすればいいんでしょうか superだとBのしかよべないんですが
- 877 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:35:41.44 ID:DydELLCK.net]
- >>869
Bでもsuper呼ぶ
- 878 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:38:06.52 ID:oXywut21.net]
- つまりBを書き換えないとそういうことはプログラム仕様上できないってことでしょうか?
- 879 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:41:19.99 ID:DydELLCK.net]
- >>871
祖先のメソッドを呼びたい時点で、継承の使い方を間違えてると思われる
- 880 名前:デフォルトの名無しさん [2016/10/03(月) 21:42:16.50 ID:LjbGDdSQ.net]
- super.superでいけるだろ
- 881 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:48:51.18 ID:oXywut21.net]
- コンパイルとおりませんでした
- 882 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:52:37.82 ID:oXywut21.net]
- >>872
厳密にいえばそうなんですが 多重継承できない以上そういうことしたくなるときってでません? しかもABが人の書いたコードで安易に変更したくない場合とか
- 883 名前:デフォルトの名無しさん [2016/10/03(月) 21:54:29.44 ID:iH7XdtiT.net]
- >>847
お答えしよう。どちらも落とし穴があるので間違い。ただし止観の行のような効果的な修行方法も残しておいてくれた仏教の方が少しまし。
- 884 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 21:57:09.89 ID:VWEC2olx.net]
- 呼び出したいメソッドをBでオーバーライドしてなければsuperで呼べる
オーバーライドしてたら・・・そんなことあるの?設計見直した方がよくない?
- 885 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 22:00:11.80 ID:DydELLCK.net]
- >>875
親(B)の駄目コードをスキップしたいなら、Aを継承する。契約違反してまでBを継承するのがオカシイ。 もしくは、継承でなくてコンポジション使うとか。
- 886 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 22:17:26.14 ID:oXywut21.net]
- デザインパターン的にまずいのは分かってるんですが
言語仕様上可能なのかどうかをおききしたかっただけです 無理そうなのでおとなしく別の方法試します
- 887 名前:デフォルトの名無しさん mailto:sage [2016/10/03(月) 22:22:59.24 ID:Sy28Ke7B.net]
- >>875
そういうパッチ的な継承の使い方って今時はあんまりしないよ 継承は基本的に悪、どうしても使うなら極力制限して慎重に使えというのが最近の流れ
- 888 名前:デフォルトの名無しさん [2016/10/04(火) 07:46:38.77 ID:o3yJa1Hl.net]
- 言語的に何かの仲間を表す役目はアノテーションに移った感じはするね
Springでいう@Serviceとか、@Componentとか 昔なら継承するか外部ファイルに書くしかなかった
- 889 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 14:50:26.61 ID:Q/b319ee.net]
- 継承使うとテスト書きにくい
- 890 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 23:32:34.63 ID:1OpjxEYO.net]
- 継承が悪ってのは初めて知った
調べよ
- 891 名前:デフォルトの名無しさん mailto:sage [2016/10/04(火) 23:38:30.04 ID:1BCIDfGo.net]
- 初心者こそ最初のうちは継承を封印するべきだな
コードの再利用に継承なんか必要ないし多態はinterfaceで十分 ただ、継承を使った方がより自然に実装できるケースもあるので、 継承使わなくても全く問題なく作れることを十分理解した上でそれでも必要だと思えば使えばいい
- 892 名前:デフォルトの名無しさん [2016/10/04(火) 23:52:38.34 ID:cLjsChxH.net]
- ゲーム作るなら結構継承使うけどそれ以外だと…
しかもゲームでも組み込みスクリプト使うこと多い そもそもjavaでゲーム作らない
- 893 名前:デフォルトの名無しさん [2016/10/05(水) 08:03:03.93 ID:W42un36/.net]
- interfaceがデフォルト実装もてるようになったからabstractクラスの必要性もひとつ減ったよなぁ
- 894 名前:デフォルトの名無しさん [2016/10/05(水) 16:43:11.96 ID:6T6LA8v8.net]
- 独自の機能を持ったアノテーションを定義するにはどうしたらいいでしょうか。
JDKの @interface Overrideの定義を見ても、 @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { } としか書かれてなくて、@Overrideをつけたメソッドが正しくオーバーライドされているかチェックするコードがどこにあるのか分かりません。
- 895 名前:デフォルトの名無しさん [2016/10/05(水) 16:48:13.78 ID:l2mkxdlB.net]
- 確か組み込み
JVMの中にある 何故キーワードじゃなくてアノテにしたのかは不明だが
- 896 名前:デフォルトの名無しさん mailto:sage [2016/10/05(水) 17:30:41.66 ID:EDqQ344L.net]
- アノテーションはアノテーションそのものに機能を定義するんじゃないよ
アノテーションが付いた何らか(メソッド、クラスetc)を検出して何らかの動作(オーバーライド検証、コード生成etc)をする それは884が言うようにJVMの中にあったり、外部コマンドだったり、IDEの機能だったりする
- 897 名前:デフォルトの名無しさん [2016/10/05(水) 18:08:17.66 ID:76uxEqiR.net]
- >>885
Android用ゲームでは使わざるを得ない
|

|