2016-09-02 11 views
1

これは、ジェネリックスと、定義された型を使用するように子クラスを拡張する方法の問題です。あるクラスから別のクラスにジェネリック型を渡す?

ジェネリックスを介して渡されるデータのタイプを定義するクラスAPIResponseがあります。このクラスには、メッセージなどのその他の詳細や、RESTサービスを呼び出すUIに渡すエラーも格納されます。

指定したタイプのAPIResponseEntityのインスタンスを作成しようとすると、エラーが発生します。ここでジェネリックを正しく使用していない可能性があります.APIResponseEntityに返されるデータの種類を渡す方法を教えてください.APIResponseEntityは最終的にAPIResponseで使用できます。

public class APIResponseEntity<T> extends ResponseEntity<APIResponse<T>> { 


public APIResponseEntity(HttpStatus pStatusCode) { 
    super(pStatusCode); 
} 

public APIResponseEntity(HttpStatus pStatusCode, MultiValueMap<String, String> pHeaders) { 
    super(pHeaders, pStatusCode); 
} 

public APIResponseEntity(HttpStatus pStatusCode, APIResponse<T> pBody) { 
    super(pBody, pStatusCode); 
} 

public APIResponseEntity(HttpStatus pStatusCode, APIResponse<T> pBody, MultiValueMap<String, String> pHeaders) { 
    super(pBody, pHeaders, pStatusCode); 
} 

}

@JsonPropertyOrder({ "status", "error", "data", "messages" }) 
public final class APIResponse<T> { 


private APIResponseStatus _status; 

private T _data; 

private APIError _error; 

private List<APIMessage> _messages; 


public APIResponse() { 
    super(); 
    _messages = new ArrayList<>(); 
} 

public APIResponse(T pData) { 
    this(); 
    _status = APIResponseStatus.OK; 
    _data = pData; 
} 

public APIResponse(APIError pError) { 
    this(); 
    _status = APIResponseStatus.ERROR; 
    _error = pError; 
} 


public APIResponseStatus getStatus() { 
    return _status; 
} 

public void setStatus(APIResponseStatus pStatus) { 
    _status = pStatus; 
} 

public Object getData() { 
    return _data; 
} 

public void setData(T pData) { 
    _data = pData; 
} 

public APIError getError() { 
    return _error; 
} 

public void setError(APIError pError) { 
    _error = pError; 
} 

public List<APIMessage> getMessages() { 
    return _messages; 
} 

public void setMessages(List<APIMessage> pMessages) { 
    _messages = pMessages; 
} 

private void addMessage(APIMessageStatus pMessageStatus, String pMessage) { 
    _messages.add(new APIMessage(pMessageStatus, pMessage)); 
} 

public void addMessageInfo(String pMessage) { 
    addMessage(APIMessageStatus.INFO, pMessage); 
} 

public void addMessageWarning(String pMessage) { 
    addMessage(APIMessageStatus.WARNING, pMessage); 
} 

public void addMessageError(String pMessage) { 
    addMessage(APIMessageStatus.ERROR, pMessage); 
} 

私は、ジェネリック

@RequestMapping(value = "/banks", method = RequestMethod.GET) 
public APIResponseEntity<List<Bank>> getBanks(WebRequest pWebRequest) { 

    IUser user = getUser(pWebRequest); 
    BankCriteria criteria = new BankCriteria(); 
    List<Bank> banks= _bankService.getBanks(user, criteria); 
    APIResponse<List<Bank>> response = new APIResponse<>(banks); 
    APIResponseEntity<List<Bank>> entity = new APIResponseEntity<>(HttpStatus.OK, banks); // errror , cannot infer type arguments for APIResponseEntity 
    return entity; 

} 
+0

Springフレームワークからその 'ResponseEntity'ですか?たぶん、春や何かで質問にタグを付けることを検討してください... –

答えて

1

なぜあなたはnew APIResponseEntity<>(HttpStatus.OK, banks)代わりのnew APIResponseEntity<>(HttpStatus.OK, response)を使用しているとAPIResponseEntityオブジェクトを作成しようとすると、私はコンパイルエラーを取得していますか? APIResponseEntityコンストラクタがありません。このコンストラクタには、第2引数としてList<>が定義されています。

これにあなたのコードを変更

@RequestMapping(value = "/banks", method = RequestMethod.GET) 
public APIResponseEntity<List<Bank>> getBanks(WebRequest pWebRequest) { 

    IUser user = getUser(pWebRequest); 
    BankCriteria criteria = new BankCriteria(); 
    List<Bank> banks= _bankService.getBanks(user, criteria); 
    APIResponse<List<Bank>> response = new APIResponse<>(banks); 
    APIResponseEntity<List<Bank>> entity = new APIResponseEntity<List<Bank>>(HttpStatus.OK, response); // errror , cannot infer type arguments for APIResponseEntity 
    return entity; 
} 
+0

私は上記のコードを再構築し、それをコンパイルしました、私はあなたがお金の上にいると思います。 –

+0

これが動作すれば、この 'new APIResponseEntity <>(HttpStatus.OK、response);'も使うべきです。答えがあなたの質問を解決した場合は、それを合格とマークすることを忘れないでください。 – mrt181

関連する問題