### Question:
XProperties extends OrderedProperties { @Nullable @Override public synchronized Object get(final Object key) { final Object value = super.get(key); if (null == value || !(value instanceof String)) return value; return substitutor.replace((String) value); } XProperties();  XProperties(@Nonnull final Map<String, String> initial); @Nonnull static XProperties from(@Nonnull @NonNull final String absolutePath); void register(@Nonnull final String prefix,
            @Nonnull final Conversion<?, ? extends Exception> factory); @Override synchronized void load(@Nonnull final Reader reader); @Override synchronized void load(final InputStream inStream); @Nullable @Override String getProperty(final String key); @Nullable @Override synchronized Object get(final Object key); @Nullable T getObject(@Nonnull final String key); @Nullable @SuppressWarnings("unchecked") T getObjectOrDefault(@Nonnull final String key,
            @Nullable final T defaultValue);  }### Answer:
@Test public void shouldReplaceGet() { xprops.setProperty("foo", "found"); xprops.setProperty("bar", "${foo}"); assertThat(xprops.get("bar"), is(equalTo((Object) "found"))); }