親Class を全て参照する

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);

なんか、もっと良い方法がないものだろうか。。。