gpt4 book ai didi

Java Generic获取类型参数

转载 作者:行者123 更新时间:2023-12-04 18:05:58 25 4
gpt4 key购买 nike

在 Scala 中,你可以这样定义一个类:

class MyClass[T1[T2]] {
def abc(a1: T1[Double]):T1[Int] = ???
}

在此代码中,键入参数 T1表示需要一个类型参数的类型 T2 , 所以我们可以创建一个像 new MyClass[List] 这样的实例.

我想用 Java 来做,但我没有任何想法。

我想知道在 Java 中是否可行,如果不可能,请问我如何在 Java 中完成此操作。

根据我的理解,泛型类型本质上是类型的函数。所以如果你有一个类 List<T> ,你可以想到类List类型的函数,所以 List采用类似 Integer 的类型参数,那么它将是一个具体类型,如整数列表(List<Integer>)。

MyClass以上采用类型参数 T1 ,但我想要这个 T1也是一个带有类型参数的泛型类型 T2 ,所以我可以创建一个像 MyClass<List> 这样的实例并且可以使用类似 List<Integer> 的类型或 List<Double>里面MyClass .在 Scala 中,如果你尝试 MyClass[Int]MyClass[String]将失败,因为 IntString不接受类型参数。

当然,如果我允许重复一些代码,这可能不是必需的,但是为了使代码更通用,我认为这是必不可少的。

最佳答案

让它在 Java 中工作的唯一方法是为 T1 提供一个通用接口(interface)。

public interface GenericType<T> {
// ...
}

然后你可以定义你的类:

class MyClass {
public GenericType<Integer> abc(GenericType<Double> a1) {
//...
}
}

请注意,由于有通用接口(interface),您不再需要类级别的任何类型参数。然后在调用 MyClass.abc 之前,您需要包装您在 GenericType 中传递的实例。

您还可以提高一个抽象级别并定义

class MyClass<T1,T2> {
public GenericType<T1> abc(GenericType<T2> a1) {
//...
}
}

这将使您在使用 MyClass 时更加灵活。但这在很大程度上取决于 MyClass 的实际实现方式。

关于Java Generic获取类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26772693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com