在Scala中,您可以这样定义一个类:
class MyClass[T1[T2]] {
def abc(a1: T1[Double]):T1[Int] = ???
}
在此代码中,type参数T1
表示需要一个type参数的类型T2
,因此我们可以创建一个实例,例如new MyClass[List]
。
我想用Java做到这一点,但我不知道。
我想知道在Java中是否有可能,如果没有,我不知道如何在Java中做到这一点。
根据我的理解,泛型实质上是一种类型的函数。因此,如果您有一个类似的类List<T>
,则可以认为该类List
是一个类型的函数,因此List
需要一个类似的类型参数Integer
,那么它将是一个具体的类型,例如integers(List<Integer>
)列表。
MyClass
上面有一个类型参数T1
,但我希望这T1
也是一个有类型参数的泛型类型T2
,所以我可以创建一个类似的实例,MyClass<List>
并可以使用类似List<Integer>
或List<Double>
内部的类型MyClass
。在Scala中,如果尝试MyClass[Int]
或MyClass[String]
将失败,因为Int
或String
不接受类型参数。
当然,如果我允许重复一些代码,这可能不是必需的,但是要制作更通用的代码,我认为这是必不可少的。
在Java中执行此操作的唯一方法是为Java提供通用接口T1
。
public interface GenericType<T> {
// ...
}
然后,您可以将类定义为:
class MyClass {
public GenericType<Integer> abc(GenericType<Double> a1) {
//...
}
}
请注意,由于具有通用接口,因此在类级别不再需要任何类型参数。然后,在调用之前,MyClass.abc
您需要包装要传入的实例GenericType
。
您还可以提高一个抽象级别并定义
class MyClass<T1,T2> {
public GenericType<T1> abc(GenericType<T2> a1) {
//...
}
}
这将使您在使用时更具灵活性MyClass
。但这在很大程度上取决于MyClass
实际的实施方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句