Annotation Interface KeyFor


Indicates that the value assigned to the annotated variable is a key for at least the given map(s).

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"; 
indicates that "HOSTNAME" is a key in 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"; 
indicates that "HOSTNAME" is a key in 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.

See Also:
See the Checker Framework Manual:
Map Key Checker
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
    Java expression(s) that evaluate to a map for which the annotated type is a key.