diff --git a/config/src/main/java/com/typesafe/config/ConfigMergeable.java b/config/src/main/java/com/typesafe/config/ConfigMergeable.java index c760bf9d..fc8b6f9f 100644 --- a/config/src/main/java/com/typesafe/config/ConfigMergeable.java +++ b/config/src/main/java/com/typesafe/config/ConfigMergeable.java @@ -25,18 +25,34 @@ public interface ConfigMergeable { * values just return the original value, since they automatically override * any fallback. * - * <p> - * The semantics of merging are described in the <a + * <p> The semantics of merging are described in the <a * href="https://github.com/typesafehub/config/blob/master/HOCON.md">spec - * for HOCON</a>. - * + * for HOCON</a>. Merging typically occurs when either the + * same object is created twice in the same file, or two + * config files are both loaded. For example: + * <pre> + * foo = { a: 42 } + * foo = { b: 43 } + * </pre> + * Here, the two objects are merged as if you had written: + * <pre> + * foo = { a: 42, b: 43 } + * </pre> + * * <p> * Note that objects do not merge "across" non-objects; if you write * <code>object.withFallback(nonObject).withFallback(otherObject)</code>, * then <code>otherObject</code> will simply be ignored. This is an - * intentional part of how merging works. Both non-objects, and any object - * which has fallen back to a non-object, block subsequent fallbacks. - * + * intentional part of how merging works, because non-objects such as + * strings and integers replace (rather than merging with) any + * prior value: + * <pre> + * foo = { a: 42 } + * foo = 10 + * </pre> + * Here, the number 10 "wins" and the value of <code>foo</code> would be + * simply 10. Again, for details see the spec. + * * @param other * an object whose keys should be used if the keys are not * present in this one