Java 如何获取泛型的类型

Java 如何获取泛型的类型,java,generics,Java,Generics,可能重复: 我有一些c代码: 公共静态类ServiceLocator { 私有静态字典服务=新字典(); 公共静态无效注册表服务(类型服务) { 服务[类型(T)]=服务; } ... } 我想在java上写同样的逻辑。如何获取泛型T的类型(T.getClass()不工作) 就像c#中的(T)类型一样你不能。仿制药是一种有效的药物。您必须将类作为参数传递 不过,我不太明白你的例子。为什么要将类型(类)映射到自身?这是不可取的,但您可以检查isAssignableFrom(类cls)以获

可能重复:

我有一些c代码:

公共静态类ServiceLocator
{ 
私有静态字典服务=新字典();
公共静态无效注册表服务(类型服务)
{
服务[类型(T)]=服务;
} 
...
}
我想在java上写同样的逻辑。如何获取泛型T的类型(T.getClass()不工作) 就像c#中的(T)类型一样

你不能。仿制药是一种有效的药物。您必须将
作为参数传递


不过,我不太明白你的例子。为什么要将
类型(
)映射到自身?

这是不可取的,但您可以检查isAssignableFrom(类cls)以获得您期望的所有类,但听起来可以在这里实现更好的设计(不涉及类型检查的设计)

复制以下任何一种:,…由于您可以将类型的子类用作“服务”,结果会有所不同。它类似于IoC容器,它将一种类型注册为另一种类型,并且可以通过注册密钥检索。不,我不会编写类似ServiceLocator.RegisterService(typeof(ReportBuilder))和after call ServiceLocator.Resolve()的内容这将返回ReportBuilder的实例
public static class ServiceLocator
{ 

   private static Dictionary<Type, Type> services = new Dictionary<Type, Type>();

   public static void RegisterService<T>(Type service)
   {
      services[typeof (T)] = service;
   } 

...

}