package Ġcom . d eng jian . annotation practice . jav ar untime Ċ Ċ import Ġjava . io . Serializable Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Type Variable Ċ Ċ /** Ċ Ġ* Ġ æ³Ľ åŀĭ ç±»åŀĭ åıĺéĩı ãĢĤ åı¯ä»¥ èİ·åıĸ æ³Ľ åŀĭ ä¸Ĭä¸ĭ éĻĲ çŃī ä¿¡æģ¯ Ċ Ġ*/ Ċ class ĠType Variable Test < K , ĠV > Ġwhere ĠK Ġ: ĠComparable <* >, ĠK Ġ: ĠSerializable Ġ{ ĊĠĠĠ Ġvar Ġkey : ĠK ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġvalue : ĠV ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( var arg Ġargs : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ åŃĹæ®µ çļĦ ç±»åŀĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfk : ĠField Ġ= ĠType Variable Test :: class . java . getDeclared Field (" key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfv : ĠField Ġ= ĠType Variable Test :: class . java . getDeclared Field (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Type : ĠType Variable < *> Ġ= Ġfk . generic Type Ġas ĠType Variable < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Type : ĠType Variable < *> Ġ= Ġfv . generic Type Ġas ĠType Variable < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠgetName Ġæĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( key Type . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( valueType . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Generic Declaration Ġæĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( key Type . generic Declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( valueType . generic Declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Bounds Ġæĸ¹æ³ķ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" K çļĦ ä¸Ĭ çķĮ ï¼ļ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Type . bounds . forEach Ġ{ Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" V çļĦ ä¸Ĭ çķĮ ï¼ļ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Type . bounds . forEach Ġ{ Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }