Java动态代理类抛出java.lang.ClassCastException异常_OceanSky6的博客-程序员秘密

技术标签: Java代理类  【Java系列】  java.lang.ClassCastException  

Java中自带的动态代理InvocationHandler接口、Proxy类只能针对接口进行动态代理,如果要对类进行代理可以使用第三方的类库像CGLIG等相关对字节码操作实现的类库;

下面我们可以看一下使用Java动态代理代理类会发生什么异常:

  • 创建一个接口类ProxyPeople
package com.test.Application;

public class ProxyPeople {

    public String work(String name) {
        System.out.println("工作名称是==》"+name);
        return name;
    }
}
  • 创建一个代理类的调用处理程序ProxyHandler
package com.test.Application;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class ProxyHandler implements InvocationHandler{
    

    private Object obj;

    public ProxyHandler(Object obj) {
            this.obj = obj;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        return method.invoke(obj, args);
    }

}
  • 客户端程序调用类中的work方法
package com.test.Application;

import java.lang.reflect.Proxy;

public class Test1 {

    public static void main(String[] args) {
        ProxyPeople people = new ProxyPeople();

        ProxyHandler handler = new ProxyHandler(people);
        ProxyPeople proxy = (ProxyPeople)Proxy.newProxyInstance(handler.getClass().getClassLoader(), people.getClass().getInterfaces(), handler);

        Object obj = proxy.work("财务");
        System.out.println(obj);
    }
}
  • 运行客户端程序将会抛出类转换异常
Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to com.test.Application.ProxyPeople
    at com.test.Application.Test1.main(Test1.java:11)

这个示例也说明了Java代理不可以对类进行代理,只能针对接口代理。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yaomingyang/article/details/81041413

智能推荐

计算机图形学MFC基础(基于Visual Studio2019)入门教学_A_Study_Bar的博客-程序员秘密

1. MFC新建一个工程1.1 创建一个新项目1.2 选择MFC应用1.3 定义项目名称,项目文件存放路径1.4 完成创建2. 初始工程文件的结构2.1 解决方案资源管理器2.2 类视图2.3 各类之间的继承关系2.4 OnDraw函数3. 自定义坐标系的设置3.1 原因3.2 映射模式的宏定义表3.3 实现4. 画笔画刷的使用4.1 CDC类 , 绘图工具类4.2 绘制像素点4.3 绘图标准步骤4.4 画笔的使用(直线段为例)本篇学习自:孔令德老师的《三维计算机图形学》

智能车竞赛-英飞凌TC264核心板-开源_Lonequier PCB的博客-程序员秘密

本期为大家开源一款英飞凌TC264核心板,领取后可以直接在某创或某配免费打板,焊接使用。

DB(五):关联查询、子查询、关联子查询、分页查询_小鹿快跑~的博客-程序员秘密

包括关联查询内链接、外链接、自查询;子查询在SELECT、WHERE、FROM语句中使用,子查询的执行过程及注意事项;关联子查询EXISTS、NOT EXISTS的执行过程,IN和EXISTS的区别;分页查询。

抛弃Python,我们为什么用Go编写机器学习架构?_AI科技大本营的博客-程序员秘密

所有参与投票的 CSDN 用户都参加抽奖活动群内公布奖项,还有更多福利赠送作者 |Caleb Kaiser译者 |弯月,编辑| 郭芮来源 | CSDN(ID:CSDNnews)如今...

解百鸡问题_若小七的博客-程序员秘密

鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁,鸡母,雏鸡各几何?输出所有可能的情况,若公鸡,母鸡,小鸡的数量分别为x,y,z,则每种情况的输出结果代码输出:public class lianyi {public static void main(String[] args) {// 鸡公for (int x = 0; x <= 20; x++) {// 鸡母for (int y = 0; y <= 33; y++) {// 小鸡int z = 100 - x

随便推点

springboot1.5.9整合elasticsearch2.3.5附带demo_愛~杦辷个訾的博客-程序员秘密

springboot1.5.9整合elasticsearch2.3.5附带demo注意点操作注意点注意springboot-data-elasticsearch和elasticsearch版本号的对应,这个是严格要求。操作1.下载elasticsearch2.3.5.zip修改C:\ruanjian\elasticsearch2.3.5\config下面的配置文件。cluster.n...

Matlab使用plot等画图的线型、符号及颜色汇总_plot线型_子木呀的博客-程序员秘密

原文链接:https://blog.csdn.net/qq_40969467/article/details/90758281 点击查看更多通信与专业知识 【1】线型、标记符、颜色的说明 【2】对于坐标轴的注释内容xlabel,ylabel的属性说明 figure,plot(Seg1,SS1_QJ1,'k');hold on plot(Seg1,SS1_QJ1,'ks') plot(Seg1,Q1*ones(length(Seg1)

支付宝生活号支付_支付宝 生活号支付_wxd_1024的博客-程序员秘密

支付宝开放平台之第三方授权登录与获取用户信息注意:支付宝公众号的主体是一个 pid 我们通过 pid和密码登录支付宝开放平台,创建一个应用,对应一个appid,在应用中设置回调域名,加密方式,RSA公私钥... ...,等审核通过应用上线以后就可以使用,程序中需要的是:appid、自己生成的RSA私钥(公钥上传到支付宝)、支付宝的公钥1.登录支付宝开放平台https://open.a...

xpath定位后打印xml字符串_毒小枭的博客-程序员秘密

etree.HTML():构造了一个XPath解析对象并对HTML文本进行自动修正。etree.HTML模块可以自动修正HTML文本etree.tostring():输出修正后的结果,类型是bytestostring()方法即可输出修正后的HTML代码,但是结果是bytes类型。这里利用decode()方法将其转成str类型代码如下content = html.xpath(...

Centos7.4下安装Mysql8.0.15_weixin_30881367的博客-程序员秘密

一、下载MysqlMysql下载地址:https://dev.mysql.com/downloads/mysql/二、卸载Linux自带的mariadb 安装Mysql之前需要卸载mariadb的安装包rpm -qa | grep mariadb 查看是否存在rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps 卸...

MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法_22aa,ws_一名普通程序员的博客-程序员秘密

CONCAT(str1,str2,…)  返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。注意:如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如:SELECT CO

推荐文章

热门文章

相关标签