Java泛型获取类型参数
在Scala中,可以将类定义为:Java泛型获取类型参数,java,scala,generics,higher-kinded-types,Java,Scala,Generics,Higher Kinded Types,在Scala中,可以将类定义为: class MyClass[T1[T2]] { def abc(a1: T1[Double]):T1[Int] = ??? } 在这段代码中,类型参数T1表示需要一个类型参数T2的类型,因此我们可以创建一个类似newmyclass[List]的实例 我想用Java做这个,但我不知道 我想知道它在Java中是否可行,如果不可行,我想知道如何在Java中实现这一点 根据我的理解,泛型类型本质上是类型的函数。因此,如果您有一个类,如List,您可以将类List视
class MyClass[T1[T2]] {
def abc(a1: T1[Double]):T1[Int] = ???
}
在这段代码中,类型参数T1
表示需要一个类型参数T2
的类型,因此我们可以创建一个类似newmyclass[List]
的实例
我想用Java做这个,但我不知道
我想知道它在Java中是否可行,如果不可行,我想知道如何在Java中实现这一点
根据我的理解,泛型类型本质上是类型的函数。因此,如果您有一个类,如List
,您可以将类List
视为类型函数,因此List
接受一个类型参数,如Integer
,那么它将是一个具体的类型,如整数列表(List
)
上面的MyClass
接受一个类型参数T1
,但是我想这个T1
也是一个接受类型参数T2
的泛型类型,所以我可以创建一个类似MyClass
的实例,并且可以在MyClass
内部使用类似List
的类型。在Scala中,如果尝试MyClass[Int]
或MyClass[String]
将失败,因为Int
或String
不接受类型参数
当然,如果我允许复制一些代码,这可能不是必需的,但要生成更通用的代码,我认为这是必不可少的。在Java中实现这一点的唯一方法是为
T1
提供一个公共接口
public interface GenericType<T> {
// ...
}
这将使您在使用
MyClass
时更加灵活。但这在很大程度上取决于MyClass的实际实现方式。@dimo414你错了。他的意思是:他能做classmyclass
和返回方法T1
?如何在编译时指定T1
是多态类型。@Jatin我到底错在哪里?我做了一个事实陈述,Java使用尖括号表示泛型,并提供了了解更多信息的资源。我没有试图回答这个问题,这就是为什么我发布了一条评论而不是答案。@dimo414问题中的代码是Scala代码,Scala使用方括号。对不起,我误导了你@贾丁是对的。我想知道是否可以从您的评论中定义一个类,如class MyClass
@dimo414Java使用尖括号表示泛型类型
意味着您试图说只需将[]
替换为
。大家都知道。提供对泛型教程的一般参考
就像提供到维基百科页面的链接一样。它有什么帮助?不,classmyclass
不在java中编译,因为默认情况下编译器只考虑泛型类型中的一个级别。我认为这是一个极好的问题
class MyClass {
public GenericType<Integer> abc(GenericType<Double> a1) {
//...
}
}
class MyClass<T1,T2> {
public GenericType<T1> abc(GenericType<T2> a1) {
//...
}
}