关于泛型中返回类型的问题(需要返回不同类的实例)。

问题描述 投票:1回答:1

所以我现在的代码是这样的。我们的想法是使用通用类型T来接收不同类的实例,并返回这些实例。

我应该能够像这样调用类的实例。

new A().add(new B())
    public static <T> T <T> add(T t) {
        return new T();
    }

基本上对我来说,返回类型应该是类本身,这样它就可以通过返回类型获取一个新的实例。

谁能指导我,我的逻辑哪里出了问题?

java generics jshell
1个回答
1
投票

你不能仅仅从通用类型中调用构造函数,因为 1. 类型擦除意味着: 2. T 化为 Object (或不管它的上界是什么)在运行时,2.你不知道构造函数一定会接受0个参数。

更好的方法是用一个 Supplier

public static <T> T add(Supplier<T> supplier) {
    return supplier.get();
}

而你可以这样使用这个方法。有了方法引用,就很简洁了。

B b = YourClass.add(B::new);
© www.soinside.com 2019 - 2024. All rights reserved.