Logger { protected String getTag(@NonNull Object src) { if (src instanceof String) { return (String) src; } else { return String.format("%s (%d)", src.getClass().getSimpleName(), src.hashCode()); } }  abstract void debug(@NonNull Object tag, @NonNull String message); abstract void error(@NonNull Object tag, @NonNull String message); abstract void error(@NonNull Object tag, @NonNull String message, @NonNull Throwable th); abstract void info(@NonNull Object tag, @NonNull String message);  }
@Test public void getTag() { Date test = new Date(); assertEquals(String.format("%s (%d)", test.getClass().getSimpleName(), test.hashCode()), logger.getTag(test)); assertEquals("test", logger.getTag("test")); }