2017-10-30 2 views
2

この状況に対処してください。私はクラス2つのオブジェクトが含まれRequestContextの持っJavaジェネリックス:reduntantパラメータを削除するには

public abstract class BasicCommand<RequestT, ResponseT> { 
    protected Collection<ResponseT> execute(RequestT request) { 
     return Something; 
    } 
} 

は、私は抽象クラス BasicCommand持って今

public class RequestContext<RequestT> { 

    private RequestT requestT; 
    private HttpRequest httpRequest; 
} 

を、私は私のBasicCommandどの要求を拡張したいですパラメータ化されていますRequestContextと応答はパラメタですResponseT:

public abstract class Command<RequestContext<RequestT>, ResponseT> extends BasicCommand { 
    @Override 
    public Collection<ResponseT> execute(RequestContext<RequestT> request) { 
     return something(); 
    } 
} 

このコードはコンパイルされません。あなたはRequestTが複製されたパラメータを見ることができるように

public abstract class Command<T extends RequestContext<RequestT>, RequestT, ResponseT> 
     extends BasicCommand<RequestContext<RequestT>, ResponseT> { 
} 

:いくつかの試行後

は、最終的に私はこの思い付きました。

だけコマンドのこの特定の実装を見て:

public class SpecificCommand extends Command<RequestContext<String>, String, String> { 
} 

reduntant paremeterは本当に刺激性です。 の署名を変更するにはどうすればいいですか? BodyCommandが指定されています(変更できません)。 ありがとう!

答えて

2

パラメータTは不要です。あなたはそれを使用していません。

試してみてください。

public abstract class Command<RequestT, ResponseT> extends BasicCommand<RequestContext<RequestT>, ResponseT> { 
    @Override 
    public Collection<ResponseT> execute(RequestContext<RequestT> request) { 
     ... 
    } 
} 

と:

public class SpecificCommand extends Command<String, String> { 
} 
+0

ありがとう!この答えは命を救う人です! –

+0

@EgorStepanovようこそ。 – Eran

関連する問題