Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在函数中返回泛型对象?_Java - Fatal编程技术网

Java 如何在函数中返回泛型对象?

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

我想返回泛型对象,但我得到错误的返回对象-提供:Human,预期:T

类,该类包含返回泛型对象的函数:

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