Proxy.newProxyInstance 理解

1.准备接口

interface Animals {
    fun sounds(name:String):String
    fun eat(name: String):String
}

2.准备实现类

class Dog :Animals {
    override fun sounds(name: String): String {
        println("$name 再叫")
        return "汪汪汪"
    }


    override fun eat(name: String): String {
        println("$name 再吃" )
        return "muniangmuniang"
    }
}

3.准备代理 及 Main函数

fun main() {
    val dog: Dog = Dog()


    val proxy = Proxy.newProxyInstance(
        dog.javaClass.classLoader, dog.javaClass.interfaces
    ) { proxy, method, args ->
        println(method.name)
        args?.forEach {
            println(it.toString())
        }
        println("open")
        method.invoke(dog, args[0])
        println("stop")
        null
    } as Animals

    proxy.sounds("张三")
    proxy.eat("lisi")
    println("xxx")




}


END 附上打印输出控制台

sounds
张三
open
张三 再叫
stop
eat
lisi
open
lisi 再吃
stop
xxx

Process finished with exit code 0

EXTRA再来点额外的。

public  void main2() {
        final Animals dog=new Dog();
        //com.example.learnkt.proxy.Dog is not an interface  ERROR 下面这个是执行不了的
        Animals animals= (Animals) Proxy.newProxyInstance(Dog.class.getClassLoader(), new Class[]{Dog.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                method.invoke(dog,args[0]);

                return null;
            }
        });

        Animals animals2= (Animals) Proxy.newProxyInstance(Animals.class.getClassLoader(), new Class[]{Animals.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                method.invoke(dog,args[0]);

                return null;
            }
        });

//        animals.eat("baba");  //ERROR
        animals2.sounds("hhsx");
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,269评论 2 33
  • 一:单选题 1.下列哪一种叙述是正确的(D) A.abstract修饰符可修饰字段、方法和类 B. 抽象方法的bo...
    java耿阅读 1,931评论 0 2
  • 什么是序列化 Java序列化其实是由Java序列接口提供框架将对象转换成字节序列,而反序列则是将字节序列重新转换成...
    暮城悠然丶阅读 186评论 0 0
  • 7.2 面向套接字编程我们已经通过了解Socket的接口,知其所以然,下面我们就将通过具体的案例,来熟悉Socke...
    lucas777阅读 1,214评论 0 2
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,629评论 28 53