Java通用获取类型参数

JJS

在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]将失败,因为IntString不接受类型参数。

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

太空卡车

在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java通用获取类型参数

来自分类Dev

获取通用类型的通用参数

来自分类Dev

获取通用类型的通用参数

来自分类Dev

获取通用参数的类型

来自分类Dev

获取通用参数类型的名称

来自分类Dev

获取通用参数类型的名称

来自分类Dev

Java:使用lambda参数获取通用方法的实际类型

来自分类Dev

Java扩展通用类型参数

来自分类Dev

Java通用方法类型参数

来自分类Dev

Java通用方法类型参数

来自分类Dev

Java获取实际的通用参数

来自分类Dev

Java:获取Lambda的通用类型

来自分类Dev

Java获取集合的通用类型

来自分类Dev

Java:获取lambda的通用类型

来自分类Dev

从通用委托函数获取参数类型

来自分类Dev

从通用委托函数获取参数类型

来自分类Dev

获取通用变量的参数化类型类

来自分类Dev

具有newInstance的Java通用类型参数

来自分类Dev

Java中的通用参数类型匹配

来自分类Dev

Java通用类扩展了参数化类型

来自分类Dev

具有newInstance的Java通用类型参数

来自分类Dev

Java通用类型参数未通过验证

来自分类Dev

Java中的通用参数类型匹配

来自分类Dev

在Roslyn程序集中获取匿名类型的通用参数类型

来自分类Dev

在Java中将通用类型作为通用方法参数传递

来自分类Dev

Java:使用通用参数获取类的类

来自分类Dev

从通用列表类型获取Java类名称

来自分类Dev

Java获取通用类型而无需扩展

来自分类Dev

Java中的通用参数类型和返回类型