- ★★Java質問・相談スレッド182★★
67 :デフォルトの名無しさん (ワッチョイ 13b9-2CcH [123.48.137.100])[]:2019/02/27(水) 04:09:48.78 ID:ZxiXIgw80 - interfaceでthisの型をメソッドの引数に使う方法はありますか?総称型を使わずに
これができないとequals的な自クラスの他オブジェクトを受け取るタイプのインターフェースのために 総称型を指定しなきゃいけないので面倒です public interface TestI{ void method(ThisClass o); }
|
- ★★Java質問・相談スレッド182★★
73 :デフォルトの名無しさん (ワッチョイ 13b9-4qoz [123.48.137.100])[]:2019/02/27(水) 14:30:01.32 ID:ZxiXIgw80 - でも"thisの型"をデフォルトで使えても良いと思いませんか?
オブジェクトが使用される時常に明らかになっているはずです。 つまり記述を省略できても良い
|
- ★★Java質問・相談スレッド182★★
75 :デフォルトの名無しさん (ワッチョイ 13b9-4qoz [123.48.137.100])[]:2019/02/27(水) 16:09:27.46 ID:ZxiXIgw80 - public interface TestI<T extends TestI>{
void method(T o); } こう書くと警告でます。extends TestIのところで TestI<?>と書くんですか?
|
- ★★Java質問・相談スレッド182★★
77 :デフォルトの名無しさん (ワッチョイ 13b9-4qoz [123.48.137.100])[]:2019/02/27(水) 18:38:23.32 ID:ZxiXIgw80 - それでも出来るのは最初から分かってるんですが、
意味的にTestIを実装したものしかそこに書かないでしょう? だからその前提を記述しておきたいという話です。
|
- ★★Java質問・相談スレッド182★★
78 :デフォルトの名無しさん (ワッチョイ 13b9-4qoz [123.48.137.100])[]:2019/02/27(水) 18:40:40.28 ID:ZxiXIgw80 - あと面倒と言ってるのはそのインターフェースを実装しているクラス、
さらにそのクラスを継承したクラス、さらにそれを継承したクラスと 記述箇所が一斉に増えるからです。 抽象クラスが実装しているインターフェースにこういう要件が発生すると実際かなり面倒であることは想像できるはずです。
|
- ★★Java質問・相談スレッド182★★
79 :デフォルトの名無しさん (ワッチョイ 13b9-4qoz [123.48.137.100])[]:2019/02/27(水) 18:43:33.03 ID:ZxiXIgw80 - public abstract class AbClass<T extends AbClass> implements TestI<T>{
} public abstract class AbClass2<T extends AbClass2> extends AbClass<T>{} このように次々と続いていくことになります。 そしてこれらすべてで警告が出ます。
|
- ★★Java質問・相談スレッド182★★
80 :デフォルトの名無しさん (ワッチョイ 13b9-4qoz [123.48.137.100])[]:2019/02/27(水) 18:51:04.99 ID:ZxiXIgw80 - 上にもありましたがComparable的なインターフェースという事になりますが
このようなインターフェースを継承ツリーの上の方で実装すると問題になります。 通常のインターフェースや、通常の総称型インターフェースでは問題無いんですが、 このようなインターフェースはたびたび継承ツリーの各クラスでそのクラスについての実装を記述する事になります。 だから、thisの型が予約語として扱えると非常に便利だろうと。
|
- ★★Java質問・相談スレッド182★★
82 :75 (ワッチョイ 13b9-4qoz [123.48.137.100])[]:2019/02/27(水) 21:45:06.35 ID:ZxiXIgw80 - >>81
できました。
|