Ваш String[]
неявно преобразуется в Object[]
и принимается как пустой массив аргументов, а не как отдельный аргумент, который является пустым массивом.Попробуйте это:
Object arg = new String[0];
System.out.println(cd.newInstance(arg).toString());
или
System.out.println(cd.newInstance(((Object)new String[0]).toString());
или даже избегайте компилятора создавать массив для вас вообще:
System.out.println(cd.newInstance(new Object[] { new String[0] }).toString());
По сути этосмесь обработки varargs и ковариации массива: (