我在Java中需要这样的东西(C#样本)
class Program
{
static void Main(string[] args)
{
Method<String>();
}
static void Method<T>()
{
Type typeT = typeof(T);
Type typeString = typeof(String);
if (typeT == typeString)
{
Console.WriteLine("Is String");
}
}
}
}
我有通用方法,需要在方法中检查类型T.
protected <T> MyClass<T> myMethod(MyClass<T> myObj){
// if T is string do ..., else do ...
}
答案 0 :(得分:3)
您需要一个Class<T>
类型的附加参数,因为在类型擦除后,通用信息将被删除。但是,拥有Class<T>
将允许您在运行时访问有关T
的(meta)信息:
protected <T> MyClass<T> myMethod(MyClass<T> myObj, Class<T> clazz) {
if (clazz == String.class) { ... }
}
答案 1 :(得分:1)
您无法执行typeof(T);
,因为T在运行时未定义/未知。
在Java中,Generics不会存在于运行时,它适用于名为擦除的概念。
Docs:在类型擦除过程中,Java编译器会擦除所有类型参数,如果type参数是有界的,则将每个参数替换为第一个绑定,如果type参数是无界的,则替换为Object。
您可以使用参数
上的instanceof
运算符来解决此问题
即。 myObj instanceof String
或@kocko建议的答案