为了账号安全,请及时绑定邮箱和手机立即绑定

使用泛型和接口,返回类型是 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 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信