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

我有一个 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 类型。


我想更好地了解如何在这里正确使用泛型,这是预期的输出吗?我知道我可以将对象转换为用户,但如果不需要,我想避免这种情况。


开心每一天1111
浏览 94回答 1
1回答

四季花海

在运行时,由于泛型类型擦除,只有对象。因此,人们可能需要一门课程。public abstract class AbstractUseCase<T> implements UseCase<T> {&nbsp; &nbsp; protected final Class<T> type;&nbsp; &nbsp; protected AbstractUseCase(Class<T> type) {&nbsp; &nbsp; &nbsp; &nbsp; this.type = type;&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public User execute(Request request) {&nbsp; &nbsp; &nbsp; &nbsp; // create newUser based on request here&nbsp; &nbsp; &nbsp; &nbsp; return newUser;&nbsp; &nbsp; }}public class DefaultCreateUser extends AbstractUseCase<User> {&nbsp; &nbsp; public DefaultCreateUser() {&nbsp; &nbsp; &nbsp; &nbsp; super(User.class);&nbsp; &nbsp; }&nbsp; &nbsp; private Request request = new CreateUserRequest();&nbsp; &nbsp; @Override&nbsp; &nbsp; public User execute(Request request) {&nbsp; &nbsp; &nbsp; &nbsp; return new User();&nbsp; &nbsp; &nbsp; &nbsp; // Alternative in the base class:&nbsp; &nbsp; &nbsp; &nbsp; T newUser = type.getConstructor().newInstance();&nbsp; &nbsp; &nbsp; &nbsp; return newUser;&nbsp; &nbsp; &nbsp; &nbsp; // Alternative in the base class:&nbsp; &nbsp; &nbsp; &nbsp; Object newUser = ...;&nbsp; &nbsp; &nbsp; &nbsp; return type.cast(newUser);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java