Java中的“反射泛型容器”你了解多少?
Posted 我是老实人辶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的“反射泛型容器”你了解多少?相关的知识,希望对你有一定的参考价值。
反射
为什么要有反射?
- 运行期,根据某种条件才能确定使用哪个类的对象的时候,就可以采用反射。
-
策略模式(灵活)
abstract BaseStrategy.excute()
```abstract BaseStrategy.excute(){ //执行某种策略 } 复制代码
-
- 策略: AStrategy、BStrategy 、CStrategy
-
Class personClass = Class.forName("com.data.muse")
Class personClass1 = Class.forName("com.data.muse")
personClass 和 personClass1是相同的
-
获得class对象有几种方式?
- getClass
Class class1 = person.getClass()
- class
Class class2 = Person.class()
- class.forName
Class class3 = Class.forName(com.xxx)
-
如何通过class文件获取对象
-
获得class
Class personClass = Class.forName(com.person)
-
获得构造方法
Constructor<Person> constructor = personClass.getConstructor()//获得构造方法
Person person = constructor.newInstance() //初始化生成Person对象
-
通过Class对象,获得Field对象 Person类的那么属性
Filed nameFiled = personClass.getFiled("name") //获取类中name的属性
-
操作Filed,获得属性值
String name = String.valueOf(nameFiled.get(person))
-
BeanUtil是干嘛用的
实际工作中
1. 单体服务、微服务(垂直分割)
2. 服务的层次划分(水平分割)
复制代码
-
通过反射,可以将对象的属性值赋值给另一个对象
容器
ArrayList:本质是个数组
add: 扩容:add之前需要判断长度是否足够 是否需要扩容
1. 旧的长度的二进制右移一位,相当于原来的长度的1/2,加上原来的长度
2. 新的长度依然无法满足需要的最小的扩容量,则新的长度改为最小扩容量
复制代码
remove: {"a1","a2","a3","a4"} 例如删除a2
1. 获得需要移动元素的个数 size-index-1 4-1-1=2
2. 调用system.arraycopy(旧的数组,删除元素index+1,旧的数组)方法
复制代码
LinkedList
获得一个Node
add:
get
先将判断index在前半部分还是后半部分,然后for循环遍历,遍历到最后一个就是该值
remove:
所有对数组进行的操作都要进行数组越界的校验
复制代码
相当于将要删除的节点的前后节点与其断开,将前后节点相连接
以上是关于Java中的“反射泛型容器”你了解多少?的主要内容,如果未能解决你的问题,请参考以下文章