我有一个通用类,说:
MyClass<T>
在此类的方法内部,我想测试T的类型,例如:
void MyMethod()
{
if (T == String)
...
if (T == int)
...
}
我怎样才能做到这一点 ?
谢谢你的帮助
通常,由于类型擦除,您不能这样做。有关更多详细信息,请参见Angelika
Langer的Java泛型常见问题解答
。
您 可以 做的是将a传递给Class<T>
构造函数,然后检查:
public MyClass<T>
{
private final Class<T> clazz;
public MyClass(Class<T> clazz)
{
this.clazz = clazz;
}
public void myMethod()
{
if (clazz == String.class)
{
...
}
}
}
请注意,尽管如此,Java仍不允许将原语用于类型参数,因此int
实在不行。
问题内容: 我试图了解类泛型的工作原理,这对我来说毫无意义。 因此,例如,如果我有以下课程: 然后我尝试 go方法不应该接受A或A的任何子类吗? 谢谢 :) 问题答案: 这样做的原因是基于Java如何实现泛型的。 数组示例 使用数组可以做到这一点(数组是协变的,正如其他人解释的那样) 但是,如果您尝试这样做会发生什么? 最后一行可以正常编译,但是如果您运行此代码,则可能会得到一个。因为您正在尝试将
问题内容: 我不确定以下代码中的最后一条语句为何非法。应该是的子类型,那么为什么不能将其分配给? 问题答案: 关键是指向 某种 类型的列表,但是编译器不知道该类型是什么,因此它不 知道 向其添加类型是否有效。举个例子,这也是一件好事- 您将向最初创建的用于保存字符串列表的对象添加一个。当然,这些信息在Java执行时会丢失-但是编译器会尽力确保您的安全。 见Java泛型常见问题解答了 很多 的更多信
问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符
如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个
如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或
本文向大家介绍Java中的泛型详解,包括了Java中的泛型详解的使用技巧和注意事项,需要的朋友参考一下 所谓泛型:就是允许在定义类、接口指定类型形参,这个类型形参在将在声明变量、创建对象时确定(即传入实际的类型参数,也可称为类型实参) 泛型类或接口 “菱形”语法 从泛型类派生子类 伪泛型 不存在真正的泛型类,泛型类对Java虚拟机来说是透明的.JVM并不知道泛型类的存在,换句话来说,JVM处理泛型