### Question:
WireSafeEnum { @Nonnull @SuppressWarnings("unchecked") public static <T extends Enum<T>> WireSafeEnum<T> of(@Nonnull T value) { checkNotNull(value, "value"); Class<T> enumType = (Class<T>) value.getClass(); ensureEnumCacheInitialized(enumType); return (WireSafeEnum<T>) ENUM_LOOKUP_CACHE.get(enumType).get(value); } private  WireSafeEnum(Class<T> enumType, String jsonValue, T enumValue); private  WireSafeEnum(Class<T> enumType, String jsonValue); @Nonnull @SuppressWarnings("unchecked") static WireSafeEnum<T> of(@Nonnull T value); @Nonnull @SuppressWarnings("unchecked") static WireSafeEnum<T> fromJson(
      @Nonnull Class<T> enumType,
      @Nonnull String jsonValue
  ); @Nonnull Class<T> enumType(); @Nonnull @JsonValue String asString(); @Nonnull Optional<T> asEnum(); @Nonnull T asEnumOrThrow(Supplier<? extends X> exceptionSupplier); @Nonnull T asEnumOrThrow(); boolean contains(@Nonnull T value); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void itDoesntAllowNumericJsonValues() { Throwable t = catchThrowable(() -> WireSafeEnum.of(NumericJsonEnum.ABC)); assertThat(t) .isInstanceOf(IllegalStateException.class) .hasMessageContaining("NumericJsonEnum"); }