Annotation Type KeyFor


  • @Documented
    @Retention(RUNTIME)
    @Target({TYPE_USE,TYPE_PARAMETER})
    @SubtypeOf(UnknownKeyFor.class)
    public @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:
    EnsuresKeyFor, EnsuresKeyForIf
    See the Checker Framework Manual:
    Map Key Checker
    • Required Element Summary

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