### Question:
Row extends ForwardingMap<String, Object> { public Row addKeyVals(Object... keyVals) { checkArgument( keyVals.length == 0 || keyVals.length % 2 == 0, "content must be a list of iterant key value pairs."); Iterable<List<Object>> partition = Iterables.partition(newArrayList(keyVals), 2); for (List<Object> objects : partition) { Object key = objects.get(0); checkArgument(key instanceof String, "argument " + key + " is not a String"); Object value = objects.get(1); put(key.toString(), value); } return this; } Row();  Row(Map<String, Object> data); static Row fromKeyVals(Object... keyVals); Row addKeyVals(Object... keyVals); @Override Object put(String key, Object value); A getAs(Class<A> type, String key); A getAs(Class<A> type, String key, boolean convert); A getAsOr(Class<A> type, String key, A defaultValue); Optional<Object> getOptional(String key); Integer getInt(String key); Long getLong(String key); Double getDouble(String key); Float getFloat(String key); Boolean getBoolean(String key); BigDecimal getBigDecimal(String key); DateTime getDateTime(String key); String getString(String key); Row getRow(String key); Blob getBlob(String key); byte[] getByteArray(String key); @SuppressWarnings("unchecked") List<A> getAsListOf(Class<A> clazz, String key); @SuppressWarnings("unchecked") Set<A> getAsSetOf(Class<A> clazz, String key); boolean hasNonNullValue(String key); Row pick(String... keys); Row putAllIfAbsent(Map<String, Object> source); Row copy(); @Override String toString(); @Deprecated
    static boolean LEGACY_CONVERT_VALUE_ON_GET; }### Answer:
@Test public void addKeyVals() { Row r = new Row().addKeyVals("a", 1, "b", "val"); assertEquals(r.get("a"), 1); assertEquals(r.get("b"), "val"); }