### Question:
EnumUtil { public static <E extends Enum<E>> E find(final Class<E> enumType, final Object value) { if (enumType == null || value == null) { return null; } if (enumType.isAssignableFrom(IdAble.class)) { return null; } String key = enumType.getName() + ":(" + value.getClass().getName() + ":" + value + ")"; @SuppressWarnings("unchecked") E result = (E) COMPUTABLE.get(key, () -> { IdAble<?>[] values = invokeStaticMethod(enumType, "values"); for (IdAble<?> e : values) { if (value.equals(e.id())) { @SuppressWarnings("unchecked") E result1 = (E) e; return result1; } } return null; }); return result; }  static E find(final Class<E> enumType, final Object value);  }### Answer:
@Test public void testFind() { PageType pageType = EnumUtil.find(PageType.class, 2); assertThat(pageType, is(UNDO_LOG)); assertThat(EnumUtil.find(PageType.class, MyEnum.ABC), nullValue()); assertThat(EnumUtil.find(PageType.class, null), nullValue()); }