1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public class AllDefaultMethods {
private static Class<?> loadClassFromFileName(String name) {
String className = name.substring(0, name.length()
- ".class".length());
try {
return Class.forName(className.replace('/', '.'));
} catch (Throwable t) {
// skip unknown class, or LinkageError
return null;
}
}
public static void main(String... args) throws IOException {
try (JarFile jarFile = new JarFile(args[0])) {
jarFile.stream()
.map(JarEntry::getName)
.filter(name -> name.endsWith(".class"))
.map(AllDefaultMethods::loadClassFromFileName)
.filter(Objects::nonNull)
.flatMap(type -> Arrays.stream(type.getDeclaredMethods()))
.filter(Method::isDefault)
.forEach(System.out::println);
}
}
} |