public Object asType(Class<?> type) throws UnsupportedOperationException { if (type.isAssignableFrom(Set.class)) { return getFiles(); } if (type.isAssignableFrom(List.class)) { return new ArrayList<File>(getFiles()); } if (type.isAssignableFrom(File[].class)) { Set<File> files = getFiles(); return files.toArray(new File[0]); } if (type.isAssignableFrom(File.class)) { return getSingleFile(); } if (type.isAssignableFrom(FileCollection.class)) { return this; } if (type.isAssignableFrom(FileTree.class)) { return getAsFileTree(); } throw new UnsupportedOperationException(String.format("Cannot convert %s to type %s, as this type is not supported.", getDisplayName(), type.getSimpleName())); }