Estou construindo minha própria classe APIResponse e uma das colunas é opcional com qualquer tipo de DTO/tipo de variável ou nula, mas sempre recebo erros Cannot infer type arguments for APIResponse<>
.
O que eu quero é passar um Opcional de QUALQUER TIPO
APIResponse.java
import org.springframework.http.HttpStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class APIResponse<T> {
private String message;
private HttpStatus httpStatus;
private Optional<T> data;
}
Abaixo está como tentei usar o APIReponse:
// Create an APIResponse object with null data
// Not sure why <String> does not return an error
// <String>, <Integer>, etc does not return any error
APIResponse<String> responseWithNullData = new APIResponse<>("Success", HttpStatus.OK, null);
// Create an APIResponse object with string data
// error Cannot infer type arguments for APIResponse<>
APIResponse<String> responseWithData = new APIResponse<>("Success", HttpStatus.OK, "HEY");
// Create an APIResponse object with string data
// error Cannot infer type arguments for APIResponse<>
APIResponse<Optional<String>> responseOptionalString = new APIResponse<>("Success", HttpStatus.OK, "Optinal HEY");
// Create an APIResponse object with custom class DTO
// error Cannot infer type arguments for APIResponse<>
APIResponse<CustomDTO> apiResponse = new APIResponse<>("Success", HttpStatus.OK, this.customDTO);
Se for importante, estou usando inicialização de mola (se você puder me recomendar uma abordagem melhor para minha preocupação, seria ótimo)
Como a variável
data
é do tipoOptional<T>
, o mesmo deve ser passado durante a inicialização do objeto tambémDito isto, também existem algumas variações que você pode fazer se isso se aplicar ao seu caso de uso
Declarando variável
data
do tipoT
e não como Opcional, ou sejaOu você pode evitar usar o tipo genérico
T
e usar o curinga?
que representa o tipo desconhecido (conforme discutido nos comentários)