@Documented @Retention(value=RUNTIME) @Target(value={TYPE_USE,TYPE_PARAMETER}) @SubtypeOf(value=UnknownKeyFor.class) public @interface KeyFor
The value of the annotation is the reference name of the map. Suppose that config is a
 Map<String, String>. Then the declaration
 
   @KeyFor("config") String key = "HOSTNAME"; config.
 The value of the annotation can also be a set of reference names of the maps. If defaultConfig is also a Map<String, String>, then
 
   @KeyFor({"config","defaultConfig"}) String key = "HOSTNAME"; config and in defaultConfig.
 You do not usually need to write @KeyFor on the key type in a map. That is, you can
 declare variable Map<String, Integer> myMap; and the Nullness Checker will apply
 @KeyFor as appropriate. If you redundantly write @KeyFor, as in Map<@KeyFor("myMap") String, Integer> myMap;, then your code is more verbose, and more seriously
 the Nullness Checker will issue errors when calling methods such as Map.put.
EnsuresKeyFor, 
EnsuresKeyForIf@JavaExpression public abstract String[] value