public static Checksum newInstance(final String className)
    {
        Objects.requireNonNull(className, "className is required!");

        if (Crc32.class.getName().equals(className))
        {
            return crc32();
        }
        else if (Crc32c.class.getName().equals(className))
        {
            return crc32c();
        }
        else
        {
            try
            {
                final Class<?> klass = Class.forName(className);
                final Object instance = klass.getDeclaredConstructor().newInstance();
                return (Checksum)instance;
            }
            catch (final ReflectiveOperationException ex)
            {
                throw new IllegalArgumentException("failed to create Checksum instance for class: " + className, ex);
            }
        }
    }
@Test
    void newInstanceReturnsSameInstanceOfCrc32()
    {
        assertSame(Crc32.INSTANCE, Checksums.newInstance(Crc32.class.getName()));
    }