| 
                         | 
                    
                              1 
                        
                        
                                  7
                             
                            您无法从实例中获取它,因为在Java泛型中,类型参数仅在编译时可用,而在运行时不可用。 中提供了更正式的定义 JLS.  | 
                
| 
                         | 
                    
                              2 
                        
                        
                                  15
                             
                            
   
    如果
   
    
  
 
  
   但是,如果您只是拥有
    
  
   
    能够
   
    编辑: 巴卢斯克的评论如下。你真的不需要这样做; 你 已经声明了映射的类型,因此您不会得到比现有更多的信息。看看他的 answer here  | 
                
| 
                         | 
                    
                              3 
                        
                        
                                  2
                             
                            虽然已经给出了正确的答案,但还有一个选择尚未指出。基本上,字段和方法并不是泛型类型信息可以存在的唯一地方:超类声明也有这些信息。 
 
  然后可以通过调用“getGenericSuperclass”(on)找出所使用的泛型类型参数实例.getClass()'),然后访问指定的实际类型参数。它确实非常复杂,因为必须遍历类型层次结构以确保参数正确地绑定到映射(可能是别名等),但这是可以做到的。这就是“超级令牌”用来传递泛型声明的方式,比如: 
  许多Java框架(Jersey、Guice、Jackson等)都使用它 这里的问题是,尽管这确实允许确定实例的标称类型,但它仅在泛型类型的实际非泛型子类存在时才起作用,而且我不知道如何强制执行此要求(调用代码可能会发现奇怪的是,它必须为此创建一个有点虚假的Map子类)。  |