2013-02-19 10 views
7
public interface View{... 

public interface Control<V extends View>{... 

public class RemoteControl<C extends Control<V extends View>> implements Control<V>{... 

RemoteControlクラスの "V extends View"で "トークンの構文エラー"、 "expected"が返されます。ジェネリックジェネリックス: "トークンのシンタックスエラー" extend "、expected"

私は、次の代替が、これは後者がビューの冗長宣言を必要とするので、より暗黙的な方法で行うことができない場合それでも、私は疑問に思う

public class RemoteControl<C extends Control<V>,V extends View> implements Control<V> 
{... 

可能であったと思います。すなわち:

public class TVRemoteControl extends RemoteControl<TVControl,TvView> implements TVControl{... 

対たぶん私はちょうど再び箱にこだわって

public class TVRemoteControl extends RemoteControl<TVControl> implements TVControl{... 

+0

私は解決策を見出そうとしましたが、あなたは既にそれを言ったと思います。あなたが望むように行うことはできず、後で説明する方法で行う必要があります。ここであなたの問題の手がかりを見つけることはできませんでしたが、私はこの有益なサイトにあなたを紹介します:http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html – Sentry

+1

'public class RemoteControl > 'リモートコントロールでは、リモートで制御されているコントロールがどのようなビューを使用しているのかは本当に重要ですか? – SpaceTrucker

+0

私はすべてのJavaジェネリックの質問に共感しています... – hbhakhra

答えて

4

はあなたが提案し、よりエレガントな方法で「ジェネリックジェネリック」を取得することが可能です次の代替が可能

私は推測

public class RemoteControl<C extends Control<V>,V extends View> implements Control<V>{} 

私は通常(読みやすくするため)として、それを書きますが、これは、正しい解決策です:

public class RemoteControl<V extends View, C extends Control<V>> implements Control<V>{} 

あなたはまた、extends Viewそのオブジェクトに入力されControlオブジェクトにRemoteControlを入力しています。そのため、オブジェクトを入力するControlオブジェクトをタイプするViewの実装を提供する必要があります。

私はVを提供しなければならない理由を、あなたの質問を解釈することができたと思います。それは<C extends Control<V>>から暗示されるべきではありません。これは、答えはされていないために、あなたはどのタイプViewControlオブジェクトを気にしない場合はControlの右の種類は(すなわちそのそれextends Control<V>

提供されることを確実にするためにVの型を提供する必要があります入力され、あなたはRemoteControlControlを入力する必要はありません。

public class RemoteControl<C extends Control> implements Control{} 

しかし、実際ControlV extends ViewRemoteControl implements Control<V>に入力され、むしろ、あなたが行うことを示唆している...