- type is encoded in key, allowing proper typing in Scala & Java - test cases for Scala & Java are included to ensure that the API makes sense and does not break