1

我有这个:

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() 构造函数,但它当然无法自行执行。

4

3 回答 3

2

不,那是不可能的,如果你尝试通过反射来实例化抽象类,你会得到异常。不管是什么情况,永远记住你不能实例化抽象类。虽然您可以创建匿名类。

于 2012-07-07T21:16:46.917 回答
1

据我所知,您无法创建抽象类的实例。即使有反思。如果那个类不是抽象的,你可以简单地调用

Constructor c = Receiver.Stub.class.getConstructor(null);
Receiver r= (Receiver)c.newInstance(null);
于 2012-07-07T21:05:53.793 回答
1

您的代码可以正常工作,无需反思。您正在创建一个匿名子类。AFAIK 无法使用反射创建子类(匿名)。也许这个线程是有用的:

在Java中是否可以仅给定父类的实例动态创建匿名子类实例?

或者这个:是否可以在使用反射时创建一个匿名类?

于 2012-07-07T21:22:22.633 回答