亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用泛型和接口,返回類型是 Object,而不是 Type

使用泛型和接口,返回類型是 Object,而不是 Type

開心每一天1111 2023-10-13 10:00:15
我有一個 UseCase 界面,簡化為以下內容   public interface UseCase<T> {        T execute(Request request);   }一個實現的例子是。public class DefaultCreateUser implements UseCase<User> {    private Request request = new CreateUserRequest();    @Override    public User execute(Request request) {        // create newUser based on request here        return newUser;    }}但是,我的執行返回類型不是 User 類型,而是 Object 類型。我想更好地了解如何在這里正確使用泛型,這是預期的輸出嗎?我知道我可以將對象轉換為用戶,但如果不需要,我想避免這種情況。
查看完整描述

1 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

在運行時,由于泛型類型擦除,只有對象。因此,人們可能需要一門課程。

public abstract class AbstractUseCase<T> implements UseCase<T> {


    protected final Class<T> type;


    protected AbstractUseCase(Class<T> type) {

        this.type = type;

    }


    @Override

    public User execute(Request request) {

        // create newUser based on request here

        return newUser;

    }

}


public class DefaultCreateUser extends AbstractUseCase<User> {


    public DefaultCreateUser() {

        super(User.class);

    }


    private Request request = new CreateUserRequest();


    @Override

    public User execute(Request request) {

        return new User();


        // Alternative in the base class:

        T newUser = type.getConstructor().newInstance();

        return newUser;


        // Alternative in the base class:

        Object newUser = ...;

        return type.cast(newUser);

    }

}


查看完整回答
反對 回復 2023-10-13
  • 1 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號