泛型类的泛型构造函数

彼得·塞兹姆斯基

我有通用类ConsumerTest<T, U>和我的计划,T是可变的类型,U是ekvivalent不变型像<StringBuilder, String><MutableInt, Integer><MutableDouble, Double>,...我怎么能写从一成不变的创建可变类型的通用构造?这是我的尝试:

import org.apache.commons.lang3.mutable.MutableDouble;
import org.apache.commons.lang3.mutable.MutableInt;

class ConsumerTest<T, U> {

private T value;

public <T, U> ConsumerTest(U u) {
        this.value = new T(u);  // compile error
}

public static void main(String[] args) {
        ConsumerTest ctS = new ConsumerTest<StringBuilder, String>("Hello");
        ConsumerTest ctI = new ConsumerTest<MutableInt, Integer>(666);
        ConsumerTest ctD = new ConsumerTest<MutableDouble, Double>(11.11);
}

}
格特曼

另一个答案new T(u)是无效语法。不能将类型参数用作实例化的新类,因为不能保证该特定类的构造函数只使用该类型的一个实参。

此外,您还创建了一个通用的构造函数,该构造函数定义了自己的 TU,该构造函数遮蔽了类的T的声明U这就是为什么您会收到诸如“无法将T转换为T”之类的编译器错误消息的原因。从构造函数中删除声明,TU从类中删除声明

您仍然需要能够Ttype中的一个构造类型的对象U,因此提供转换器功能。这里注意,Java的内置在Function小号逆转的感觉UT你有。

class ConsumerTest<T, U> {

    private T value;

    public ConsumerTest(U u, Function<U, T> converter) {
        this.value = converter.apply(u);
    }

    public static void main(String[] args) {
        ConsumerTest ctS = new ConsumerTest<StringBuilder, String>("Hello", StringBuilder::new);
        ConsumerTest ctI = new ConsumerTest<MutableInt, Integer>(666, MutableInt::new);
        ConsumerTest ctD = new ConsumerTest<MutableDouble, Double>(11.11, MutableDouble::new);
    }
}

您可能有其他一些原因需要将此功能封装在一个未显示的类中,但是您可能不需要这样的类ConsumerTest只需创建功能。

Function<String, StringBuilder> ctS = StringBuilder::new;

或者,您可能根本不需要理会这些功能。直接创建可变对象。

StringBuilder sb = new StringBuilder("Hello");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java泛型复制构造函数

来自分类Dev

继承需要构造函数的泛型类型的抽象类

来自分类Dev

可以在引入其他泛型类型的泛型类上使用构造函数吗?

来自分类Dev

使用泛型在抽象类中调用构造函数

来自分类Dev

从泛型类调用泛型EventHandler

来自分类Dev

将泛型传递到类构造函数列表

来自分类Dev

构造函数泛型问题

来自分类Dev

Delphi泛型:无法将类和构造函数约束的泛型类型转换为接口

来自分类Dev

如何使泛型类型的构造函数

来自分类Dev

具有泛型构造函数的泛型类?

来自分类Dev

在类构造函数中使用泛型

来自分类Dev

构造函数作为参数:推断类的泛型为函数

来自分类Dev

Java泛型复制构造函数

来自分类Dev

继承需要构造函数的泛型类型的抽象类

来自分类Dev

是否有可能在引入其他泛型类型的泛型类上使用构造函数?

来自分类Dev

泛型类型作为构造函数参数

来自分类Dev

构造函数参数中的泛型

来自分类Dev

Java构造函数中的泛型?

来自分类Dev

Java泛型与非泛型构造函数

来自分类Dev

泛型类使用泛型参数

来自分类Dev

Java在构造函数中定义泛型

来自分类Dev

使用泛型在抽象类中调用构造函数

来自分类Dev

在泛型中使用必需的构造函数继承类

来自分类Dev

泛型类,泛型本身就是泛型

来自分类Dev

继承类中的泛型和构造函数

来自分类Dev

泛型构造函数中的重载解析

来自分类Dev

实例化泛型类抛出“不是构造函数”

来自分类Dev

使用类泛型构造的子类型

来自分类Dev

java中泛型类中的非泛型构造函数