### Question:
MutableTreeImpl extends AbstractSettableNode<E, MutableSettableNode<E>> implements MutableTree<E, MutableSettableNode<E>>, MutableSettableNode<E> { public static <E> TypeKey<MutableTreeImpl<E>> typeKey() { return new TypeKey<MutableTreeImpl<E>>() {}; } MutableTreeImpl(E element);   MutableTreeImpl(E element, SimpleCollection<MutableTreeImpl<E>> childList); @Override MutableTreeImpl<E> addChild(E e); @Override boolean removeChild(MutableSettableNode<E> child); @Override MutableTreeImpl<E> getRoot(); @Override boolean isEmpty(); @Override MutableTreeImpl<E> setRoot(E root); static TypeKey<MutableTreeImpl<E>> typeKey(); @Override int getNumberOfChildren(); @Override Iterator<MutableSettableNode<E>> childIterator();  }### Answer:
@Test public void typeKey() { final TypeKey<MutableTreeImpl<String>> key = MutableTreeImpl.typeKey(); assertEquals(MutableTreeImpl.class, key.getTreeType()); }