### Question:
Option implements Cloneable, Serializable { @Override public Object clone() { try { Option option = (Option) super.clone(); option.values = new ArrayList<String>(values); return option; } catch (CloneNotSupportedException cnse) { throw new RuntimeException("A CloneNotSupportedException was thrown: " + cnse.getMessage()); } } private  Option(final Builder builder);  Option(String opt, String description);  Option(String opt, boolean hasArg, String description);  Option(String opt, String longOpt, boolean hasArg, String description); int getId(); String getOpt(); Object getType(); @Deprecated void setType(Object type); void setType(Class<?> type); String getLongOpt(); void setLongOpt(String longOpt); void setOptionalArg(boolean optionalArg); boolean hasOptionalArg(); boolean hasLongOpt(); boolean hasArg(); String getDescription(); void setDescription(String description); boolean isRequired(); void setRequired(boolean required); void setArgName(String argName); String getArgName(); boolean hasArgName(); boolean hasArgs(); void setArgs(int num); void setValueSeparator(char sep); char getValueSeparator(); boolean hasValueSeparator(); int getArgs(); String getValue(); String getValue(int index); String getValue(String defaultValue); String[] getValues(); List<String> getValuesList(); @Override String toString(); @Override boolean equals(Object o); @Override int hashCode(); @Override Object clone(); @Deprecated boolean addValue(String value); static Builder builder(); static Builder builder(final String opt); static final int UNINITIALIZED; static final int UNLIMITED_VALUES; }### Answer:
@Test public void testClone() { TestOption a = new TestOption("a", true, ""); TestOption b = (TestOption) a.clone(); assertEquals(a, b); assertNotSame(a, b); a.setDescription("a"); assertEquals("", b.getDescription()); b.setArgs(2); b.addValue("b1"); b.addValue("b2"); assertEquals(1, a.getArgs()); assertEquals(0, a.getValuesList().size()); assertEquals(2, b.getValues().length); }