在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]
将失败,因为Int
或String
不接受类型参数。
当然,如果我允许复制某些代码,但是为了制作更通用的代码,这可能没有必要,我认为这是不可或缺的。
答案 0 :(得分:0)
在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
实际实现的方式。