我有一个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;
}
}
但是,我的execute的返回类型不是User类型,而是Object类型。
我想更好地了解此处如何正确使用泛型,这是预期的输出吗?我知道可以将对象投射给用户,但是如果不需要的话,我想避免这种情况。
答案 0 :(得分:1)
在运行时,由于通用类型擦除,因此只有对象。因此,可能需要一个类。
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);
}
}