### Question:
JobDetailImpl implements Cloneable, java.io.Serializable, JobDetail { @Override public int hashCode() { JobKey key = getKey(); return key == null ? 0 : getKey().hashCode(); } JobDetailImpl();  JobDetailImpl(String name, Class<? extends Job> jobClass);  JobDetailImpl(String name, String group, Class<? extends Job> jobClass);  JobDetailImpl(String name, String group, Class<? extends Job> jobClass,
                     boolean durability, boolean recover); String getName(); void setName(String name); String getGroup(); void setGroup(String group); String getFullName(); JobKey getKey(); void setKey(JobKey key); String getDescription(); void setDescription(String description); Class<? extends Job> getJobClass(); void setJobClass(Class<? extends Job> jobClass); JobDataMap getJobDataMap(); void setJobDataMap(JobDataMap jobDataMap); void setDurability(boolean durability); void setRequestsRecovery(boolean shouldRecover); boolean isDurable(); boolean isPersistJobDataAfterExecution(); boolean isConcurrentExectionDisallowed(); boolean requestsRecovery(); @Override String toString(); @Override boolean equals(Object obj); @Override int hashCode(); @Override Object clone(); JobBuilder getJobBuilder();  }### Answer:
@Test public void testHashCode() { JobDetailImpl job = new JobDetailImpl(); Assert.assertThat(job.hashCode(), Matchers.is(0)); job.setName("test"); Assert.assertThat(job.hashCode(), Matchers.not(Matchers.is(0))); job.setGroup("test"); Assert.assertThat(job.hashCode(), Matchers.not(Matchers.is(0))); }