Java 如何在函数中返回泛型对象?
我想返回泛型对象,但我得到错误的返回对象-提供:Human,预期:T 类,该类包含返回泛型对象的函数:Java 如何在函数中返回泛型对象?,java,Java,我想返回泛型对象,但我得到错误的返回对象-提供:Human,预期:T 类,该类包含返回泛型对象的函数: public class DataHuman<T extends HumanProcess> { public T getObject() { return Human.builder().build(); } } 扩展接口的对象: @Data @Builder public class Human implements HumanProces
public class DataHuman<T extends HumanProcess> {
public T getObject() {
return Human.builder().build();
}
}
扩展接口的对象:
@Data
@Builder
public class Human implements HumanProcess {
private String name;
}
我想创建更多类似于HumanProcess的类来实现HumanProcess,并在getObject()中返回它。一旦引入了另一个
HumanProcess
的实现,这一点就很明显了:
static class AlmostHuman implements HumanProcess {
}
并且(为了本示例),请执行以下操作:
此强制转换是无用的,因为编译器不会以任何方式强制执行它,但至少代码可以编译。当然,如果您以以下形式使用它:
DataHuman<AlmostHuman> dh = new DataHuman<>();
AlmostHuman almost = dh.getObject();
生成器来自lombokA
Human
不是T
-如果T
是SomeSpecificSubclass
,它扩展了Human,那么你不能简单地返回一个简单的、基本的Human
。你可以使用HumanProcess
作为方法getObject
@HadesZazif的类型返回,那么这有什么意义呢如果你从来没有使用过它,那么它首先就是T
?OP只需要阅读一些关于泛型的教程,并习惯它们。看起来这并不是真的应该是泛型的,正如@HadesZazif所说的,它实际上只是依赖于人工过程。
return (T)Human.builder().build();
DataHuman<AlmostHuman> dh = new DataHuman<>();
AlmostHuman almost = dh.getObject();
static class DataHuman<T extends HumanProcess> {
public HumanProcess getObject() {
return Human.builder().build();
}
}