package sample 配下に
public class Foo extends FooBase{ } public class FooBase extends AppBase{ } public class AppBase{ }
とあるとき、親Class 全てを求める方法
UnaryOperator<Class<?>> superFind = c->c.getSuperclass(); Class<?> cl = Foo.class; while(!(cl=superFind.apply(cl)).equals(Object.class)) { System.out.println(cl.getName()); }
あるいは、
UnaryOperator<Class<?>> superFind = c->c.getSuperclass(); for(Class<?> cl = Foo.class; !(cl=superFind.apply(cl)).equals(Object.class);){ System.out.println(cl.getName()); }
自Class を含めてStream にする
static Stream<Class<?>> superStream(Class<?> cl){ UnaryOperator<Class<?>> superFind = c->c.getSuperclass(); Builder<Class<?>> builder = Stream.builder(); builder.add(cl); Class<?> c = cl; while(!(c=superFind.apply(c)).equals(Object.class)) { builder.add(c); } return builder.build(); }
superStream(Foo.class).map(Class::getName).forEach(System.out::println);
なんか、もっと良い方法がないものだろうか。。。