pig/src/main/java/com/twitter/elephantbird/pig/util/AbstractWritableConverter.java
@Override
  public void initialize(Class<? extends W> writableClass) throws IOException {
    if (writableClass == null) {
      return;
    }
    if (writable != null) {
      Class<?> existingWritableClass = writable.getClass();
      Preconditions.checkArgument(existingWritableClass.isAssignableFrom(writableClass),
          "Existing Writable implementation '%s' is not assignable from class '%s'",
          existingWritableClass.getName(), writableClass.getName());
    }
    try {
      writable = writableClass.newInstance();
    } catch (Exception e) {
      throw new IOException(String.format("Failed to create instance of Writable type '%s'",
          writableClass.getName()), e);
    }
  }
@Override
  public void initialize(Class<? extends W> writableClass) throws IOException {
    if (writableClass == null) {
      return;
    }
    if (writable != null) {
      Class<?> existingWritableClass = writable.getClass();
      Preconditions.checkArgument(existingWritableClass.isAssignableFrom(writableClass),
          "Existing Writable implementation '%s' is not assignable from class '%s'",
          existingWritableClass.getName(), writableClass.getName());
    }
    try {
      writable = writableClass.newInstance();
    } catch (Exception e) {
      throw new IOException(String.format("Failed to create instance of Writable type '%s'",
          writableClass.getName()), e);
    }
  }
Default implementation tests that class of internal Writable instance, if defined, is
assignable from the given class. If so, the internal Writable instance is replaced with a new
instance of the given class. If the given class is {@code null}, nothing is done.

@see WritableConverter#initialize(java.lang.Class)