gpt4 book ai didi

java - 使用泛型和接口(interface),返回类型是 Object,而不是 Type

转载 作者:行者123 更新时间:2023-12-02 09:26:11 24 4
gpt4 key购买 nike

我有一个 UseCase 接口(interface),简化为以下内容

   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 类型。

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

最佳答案

在运行时,由于泛型类型删除,只有对象。因此,人们可能需要这个类。

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);
}
}

关于java - 使用泛型和接口(interface),返回类型是 Object,而不是 Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58325638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com