掲題通りなのですが、 Optional<User>
でユーザテーブルからユーザ情報を取得してくるメソッドがあったとします。
String name = "hogehoge; Optional<User> user = userRepository.findByName(name);
このfindByNameメソッドは、ユーザ情報があれば、OptionalにUserインスタンスを返して、なければ、Optional.empty()を返します。
受けた戻り値を元に以下のクラスのインスタンスに埋め込んで返すメソッド convertUserToResponse
を作りたいです。
Response.java
public class Response<T> { private int code; private String messsage; private T user; public Response(int code, T user, String... message) { this.code = code; this.message = message[0]; this.user = user; }
Userが戻ってきたときは、
new Response<User>(200, [ユーザインスタンス], new String[]{name});
を生成して返します。
Optional.empty()のときは、
new Response<String>(400, String.valueOf(""), new String[](name));
を生成して返します。
Userインスタンスが返却されたときは大丈夫なのですが、Optional.empty()で返ってきたときの書き方がわからないです。
この様に書いてみてエラーで困ってます。
public Response convertUserToResponse(String name) { Optional<User> user = userRepository.findByName(name); return user.map(obj -> new Response<User>(200, obj,new String[]{name})) .orElse(new Response<String> new Response(400, String.valueOf(""), new String[]{name})); }
.orElse()
のときに
new Response<String>
(...) としたいのですが、型パラメータが <User>
でないとコンパイルエラーとなってしまいます。
Functionを別定義にして処理をすることも考えたのですが、 Function<T, R>でapplyをオーバーライドしようとした時、Responseの第三引数を渡す方法がわからず、手が止まってしまいました。
なにかいい方法がございましたら、ご教示頂きたく、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー