Problem with type parameter: "cannot be selected from a parameterized type"

I ran into a problem with generics.

Here is one of my classes that uses generics:

public class TokenServerResponse<D> {

    private String responseCode;
    private String responseMessage;
    private D responseData;
    ....

Here is our class: TokenServerResponseparameterized D.

I would like to specify a type in one of our methods as follows:

   protected ResponseEntity<TokenServerResponse<DigestResponseData>> digest(long globalMerchantUId, String expirydate, String pan, boolean updateExpiryDate) throws Exception {
        DigestRequest digestRequest = new DigestRequest();
        digestRequest.setGlobalMerchantUid(globalMerchantUId);
        digestRequest.setExpiryDate(expirydate);
        digestRequest.setPan(pan);
        digestRequest.setUpdateExpiryDate(updateExpiryDate);
        return restTemplate.postForEntity("/digest", digestRequest, TokenServerResponse<DigestResponseData>.class);
    }

However, I get the following compiler error: cannot select from parameterized type.

How can I use a type parameter D? I also tried casting to no avail. What am I wrong?

This is how the method is called digest:

    ResponseEntity<TokenServerResponse<DigestResponseData>> digestResponseEntity = digest(823, "1505", pan, true);
+4
source share
1 answer

Here:

return restTemplate.postForEntity("/digest", digestRequest, TokenServerResponse<DigestResponseData>.class);

, , . .
, TokenServerResponse, .

public abstract class TokenServerResponse<T> {
    private String responseCode;
    private String responseMessage;
    private T responseData;

    public T getResponseData() {
        return responseData;
    }
}

public class TokenServerResponseDigestResponseData extends TokenServerResponse<DigestResponseData> {

}

TokenServerResponseDigestResponseData :

return restTemplate.postForEntity("/digest", digestRequest, TokenServerResponseDigestResponseData.class);

:

TokenServerResponseDigestResponseData instance = ...
DigestResponseData data = instance.getResponseData();

- .

, , , TokenServerResponse, .
DigestResponseData , , , : TokenServerResponse TokenServerResponse<DigestResponseData>.   .

+3

Source: https://habr.com/ru/post/1662257/


All Articles