相关疑难解决方法(0)

Java动态代理 - 如何引用具体类

我有一个与java中的动态代理有关的问题.

假设我有一个Foo用方法execute和类调用的接口FooImpl implements Foo.

当我创建代理时Foo,我有类似的东西:

Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                                     new Class[] { Foo.class },
                                     handler);
Run Code Online (Sandbox Code Playgroud)

假设我的调用处理程序如下所示:

public class FooHandler implements InvocationHandler {
    public Object invoke(Object proxy, Method method, Object[] args) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我的调用代码看起来像

Foo proxyFoo = (Foo) Proxy.newInstance(Foo.getClass().getClassLoader(),
                                       new Class[] { Foo.class },
                                       new FooHandler());
proxyFoo.execute();
Run Code Online (Sandbox Code Playgroud)

如果代理可以executeFoo界面拦截上述呼叫,那么它FooImpl可以在哪里播放?也许我正在以错误的方式查看动态代理.我想要的是能够execute从具体实现中捕获调用Foo,例如FooImpl.可以这样做吗?

非常感谢

java proxy dynamic

5
推荐指数
1
解决办法
2937
查看次数

Java,我可以将任意接口应用于现有类吗?

如果两个类有一些签名完全相同的方法,但这些方法没有被继承,有没有办法用公共方法定义一个接口,并使用相同的接口指向两个类的两个实例?

例如,假设一类Cat具有boolean isAlive()与另一个类Dog具有boolean isAlive()CatDog具有比其它没有共同的祖先Objectboolean isAlive()不是继承的方法。我不能修改Cat或者Dog因为它们是别人写的。我可以随意创建一个这样的界面并用它来指向猫或狗吗?

interface lovable
{
    boolean isAlive();
}

void main()
{
    lovable thing = new Cat(); <-- any syntax to achieve this?
    love(thing);
}

void love(lovable thing)
{
    if (thing.isAlive())
        System.out.println("Aww.");
    else
        System.out.println("Eww.");
}
Run Code Online (Sandbox Code Playgroud)

java interface

3
推荐指数
2
解决办法
3238
查看次数

标签 统计

java ×2

dynamic ×1

interface ×1

proxy ×1