首页 > 其他分享 >反射实例化对象&反射实例化生成工具类

反射实例化对象&反射实例化生成工具类

时间:2024-04-03 17:31:05浏览次数:19  
标签:反射 化生成 java public 实例 call import properties

一,和普通实例化的区别:

若有有参构造函数,会自动生成无参构造函数。

若无无参构造函数,也会自动生成无参构造函数。

相比之下,反射实例化更加灵活。

二,该过程会用到大量接口,类:

接口回调:

类A有实现类B,C,D

接口名 a=new B;

call(a);

a=new C;

call(a);

public static void call(){

System.out.println(call(num));

}

这样就不用在每一个实现类中重写该方法

普通写法:

B b=new B;

b.call();

public static void call(){

System.out.println(call(B));

}

C c=new C;

c.call();

public static void call(){

System.out.println(call(C));

}

三,流程:

1.创建一个.properties结尾的文件:

没有Resource Bundle怎么办:

输入Resource Bundle Editor,开始下载

进入该文件,输入:CircleFactory为想选择的实现类的类名,如果src下还有其他文件夹A-B-C,CircleFactory在这里面,写classname=A.B.C.CircleFactory

2.反射实例化生成工具类:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;

public class PropertiesUtil {
    public PropertiesUtil(){}
    public static Object getBean() throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Properties properties=new Properties();
        properties.load(new FileInputStream("D:\\IDEA\\untitled1\\src\\ShapeFactory.properties"));//将刚刚写的文件加载到properties中 刚开始没写完整地址,报错了
        String property=properties.getProperty("classname");//获取对象类名
        Object instance=Class.forName(property).getConstructor().newInstance();//newInstance()实例化对象
        return instance;//返回对象
 
    }

3.客户端代码:

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
        System.out.println("=============");
        Shape shape;
        ShapeFactory shapeFactory;

        shapeFactory = (ShapeFactory) PropertiesUtil.getBean();//(ShapeFactory)有定要写,因为getBean()返回Object,和ShapeFactory不是一个类型,这点忘记写了,会报错的,点击就可以自动添加上
        shape = shapeFactory.createshape();
        shape.draw();
        shape.erase();
    }
}

三,遗憾之处:

1.实例化不同的对象,需要更改配置文件的className值

2.而且如果多个javaBean的实例化信息存放在properties内,不免会出现属性重复的情况。比如Person类有name属性,User类也有name属性,这时就需要创建多个properties文件

标签:反射,化生成,java,public,实例,call,import,properties
From: https://blog.csdn.net/m0_74115535/article/details/137351105

相关文章

  • 56.html+css网页设计实例/“家乡”主题上海介绍/web前端期末大作业/
    一、前言  本实例以上海为主题设计,div+css布局,页面简单大气,代码精简,供大家参考。【关注作者|获取更多源码(2000+个Web案例源码)|优质文章】;您的支持是我创作的动力!【点赞收藏博文】,Web开发、课程设计、毕业设计有兴趣的联系我交流分享,3Q!二、网页文件三、网页效果以下......
  • 栈应用-经典实例
    栈的实际应用非常广泛。在回溯问题中,它可以存储访问过的任务或路径、撤销的操作等,还有递归算法也是用的栈结构.之前两篇针对栈的实现用了两个版本,即数组的版本和对象的版本,这里就栈的经典应用举两个实例看看即可.进位制转化括号匹配十进制转二进制我们的日常生活中基......
  • Python套索回归lasso、SCAD、LARS分析棒球运动员薪水3个实例合集|附数据代码
    全文链接:https://tecdat.cn/?p=35585原文出处:拓端数据部落公众号在数据科学和机器学习领域,回归分析是一种强大的工具,用于探索变量之间的关系并预测未来的结果。其中,套索回归(LassoRegression)是一种线性回归方法,特别适用于解决高维数据和过拟合问题。它通过引入正则化项来限制模......
  • MySQL分组查询实例
    DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`ag......
  • 54.html+css+js网页设计实例/“企业”酒庄主题介绍/web前端期末大作业/
    一、前言  本实例以“企业”酒庄为主题设计,应用html+css+js、图片轮翻效果、留言板、搜索等,供大家参考。【关注作者|获取更多源码(2000+个Web案例源码)|优质文章】;您的支持是我创作的动力!【点赞收藏博文】,Web开发、课程设计、毕业设计有兴趣的联系我交流分享,3Q!二、网页文......
  • MySQL分组查询实例
    DDL——学生表——成绩表CREATETABLE`result`(`rid`int(11)NOTNULLAUTO_INCREMENTCOMMENT'成绩编号',`testName`varchar(255)DEFAULTNULLCOMMENT'测试名称',`score`double(4,2)DEFAULTNULLCOMMENT'成绩',`studentId`int(11)DEFAU......
  • MySQL分组查询实例
    1、DDL——学生表——成绩表CREATETABLE`result`(`rid`int(11)NOTNULLAUTO_INCREMENTCOMMENT'成绩编号',`testName`varchar(255)DEFAULTNULLCOMMENT'测试名称',`score`double(4,2)DEFAULTNULLCOMMENT'成绩',`studentId`int(11)DEF......
  • MySQL分组查询实例
    DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`ag......
  • MySQL分组查询实例
    DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`ag......
  • Linux enable命令教程:启动或关闭shell内建指令(附实例详解和注意事项)
    Linuxenable命令介绍enable是Linux系统中的内建命令,用于启动或关闭shell内建指令。如果执行的文件名称与shell内建指令相同,可以使用enable-n来关闭shell内建指令。如果不加-n参数,enable可以重新启动已关闭的指令。Linuxenable命令适用的Linux版本enable命令在大多数Li......