我有这个:
public interface Receiver extends x.y.a
{
public static abstract class Stub extends x.y.b implements Receiver
{
public Stub()
{
}
}
}
想写这个:
private final Receiver receiver = new Receiver.Stub()
{
};
使用反射。这甚至可能吗?我可以找到Stub()构造函数,但当然它无法自行执行。
答案 0 :(得分:2)
不,这是不可能的,如果您尝试通过反射实例化抽象类,您将获得异常。无论如何总是记得你无法实例化抽象类。虽然你可以创建匿名类。
答案 1 :(得分:1)
据我所知,你无法创建抽象类的实例。即使有反思。如果那个类不是抽象的,你可以简单地调用
Constructor c = Receiver.Stub.class.getConstructor(null);
Receiver r= (Receiver)c.newInstance(null);
答案 2 :(得分:1)
您的代码无需反射即可运行。您正在创建一个匿名子类。 AFAIK使用反射创建子类(匿名)是不可能的。也许这个帖子提供了丰富的信息:
或者:Is it possible to create an anonymous class while using reflection?