PmAttrUtil { @SuppressWarnings("unchecked") public static <T> T getBackingValue(PmAttr<?> pmAttr) { if (pmAttr instanceof PmAttrBase) { return ((PmAttrBase<?, T>)pmAttr).getBackingValue(); } else if (pmAttr instanceof PmAttrProxy) { PmAttr<?> delegate = ((PmAttrProxy<?>)pmAttr).getDelegate(); return (delegate != null) ? (T) getBackingValue(delegate) : null; } else { throw new PmRuntimeException(pmAttr, "Unable to handle attribute type: " + pmAttr.getClass()); } }  @SuppressWarnings("unchecked") static void resetBackingValueToDefault(PmAttr<?>... attr); static void resetBackingValuesToDefault(PmObject rootPm); @SuppressWarnings("unchecked") static boolean isEmptyValue(PmAttr<?> pmAttr, Object value); @SuppressWarnings("unchecked") static T getBackingValue(PmAttr<?> pmAttr); static T_VALUE backingValueToValue(PmAttrBase<T_VALUE, T_BACKING_VALUE> pmAttrCtxt, T_BACKING_VALUE backingValue); static T_BACKING_VALUE valueToBackingValue(PmAttrBase<T_VALUE, T_BACKING_VALUE> pmAttrCtxt, T_VALUE value); static T_VALUE convertStringToValue(PmAttr<T_VALUE> pmAttrCtxt, String s); static String convertValueToString(PmAttr<T_VALUE> pmAttrCtxt, T_VALUE value); @Deprecated static T_VALUE convertBackingValue(PmAttrBase<T_VALUE, T_BACKING_VALUE> pmAttrCtxt, T_BACKING_VALUE backingValue); @Deprecated static T_BACKING_VALUE convertExternalValue(PmAttrBase<T_VALUE, T_BACKING_VALUE> pmAttrCtxt, T_VALUE value);  }
@Test public void testGetBackingValue() { assertEquals("V1", PmAttrUtil.getBackingValue(testPm.s)); assertEquals("V2", PmAttrUtil.getBackingValue(testPm.sWithDefault)); }