目录
- git
- 本地回滚到到`120bc409ee3b8f63a23d0060e55118bcce557acf`提交记录
- 本地提交到已有代码分支
- IDEA
- 批量导入快捷键无效
- 更换背景主题
- 快捷键
- 快捷键可以设置eclipse模式,但是有些不生效,可能是冲突了
- `Ctrl+单击`,`Eclipse`里面是可以跳转到代码内部;`IDEA`是跳转到引用该方法的地方(`Ctrl + Alt +B`是跳转到方法内部)
- 格式化代码快捷键:`Ctrl+Alt+L`
- 转换大小写:`Ctrl+Shift+Y`(*eclipse*)或者`Ctrl+Shift+U`
- 下划线转驼峰的用插件 `CamelCase`,快捷键是 `Shift + Alt + U`
- 在这里插入图片描述
- 外部修改了文件名称,类内部名称需要修改,进入类内部,点击`Alt + Enter`,可以选择改成和外部名称一致,或者外部名称改成和内部一致
- `Ctrl+E`查看最近打开文件记录列表
- Alt + 箭头左右 (回到之前操作的文件)
- 设置打开代码窗口无上限
- Ctrl+Shift+O去除无用import,变成了导入.*,导致checkstyle不通过
- java
- org.springframework.util.ReflectionUtils
- 比对相同实体的属性值是否相同
- 源码
git
本地回滚到到120bc409ee3b8f63a23d0060e55118bcce557acf
提交记录
git reset --hard 120bc409ee3b8f63a23d0060e55118bcce557acf
强制推送到远程仓库,废弃掉之前的提交(这样做可能会改变其他人已经拉取的分支):
git push origin --force --all
本地提交到已有代码分支
在您本地对直接导入并解压缩的代码文件进行修改后,要同步到下载的Git代码分支上,可以按照以下步骤操作:
-
首先确保你已经在本地的这个项目文件夹下初始化了Git仓库,并且已经关联到远程的GitHub仓库。如果没有,请执行以下命令:
cd 你的项目文件夹路径 git init git remote add origin 远程仓库地址
-
将修改的文件添加到暂存区:
git add .
这里
.
代表所有修改过的文件,如果你只想添加特定文件,可以用git add 文件名
。 -
提交本地更改:
git commit -m "你的提交描述信息"
-
推送到对应的远程分支(假设是master分支):
git push origin master
-
如果远程分支不是master,比如是dev分支,则改为:
git push origin dev
-
如果在推送时遇到权限问题或者需要推送到一个新分支,可能需要使用
-u
参数创建与远程分支的追踪关系,以及-f
参数强制推送:git push -u origin 新分支名称 -f
请谨慎使用
-f
参数,因为它会覆盖远程分支上的内容。
IDEA
批量导入快捷键无效
Alt+Enter
,批量导入类无效,可以尝试打开下面开关
更换背景主题
快捷键
快捷键可以设置eclipse模式,但是有些不生效,可能是冲突了
Ctrl+单击
,Eclipse
里面是可以跳转到代码内部;IDEA
是跳转到引用该方法的地方(Ctrl + Alt +B
是跳转到方法内部)
格式化代码快捷键:Ctrl+Alt+L
转换大小写:Ctrl+Shift+Y
(eclipse)或者Ctrl+Shift+U
下划线转驼峰的用插件 CamelCase
,快捷键是 Shift + Alt + U
外部修改了文件名称,类内部名称需要修改,进入类内部,点击Alt + Enter
,可以选择改成和外部名称一致,或者外部名称改成和内部一致
Ctrl+E
查看最近打开文件记录列表
Alt + 箭头左右 (回到之前操作的文件)
设置打开代码窗口无上限
Ctrl+Shift+O去除无用import,变成了导入.*,导致checkstyle不通过
通过下面设置,默认超过5个就变成导入*
java
org.springframework.util.ReflectionUtils
ReflectionUtils
是Spring
框架提供的一个工具类,主要用于简化Java
反射相关的操作。这个类包含了多个静态方法,可以帮助开发者在运行时执行一些常见的反射任务,比如:
- 获取和设置私有字段的值:无论字段是否为私有,都可以通过 ReflectionUtils 访问其值。
- 调用方法:包括私有方法在内的任意方法都可以通过 ReflectionUtils 被安全地调用。
- 检查类、接口、方法和字段是否存在:辅助进行类结构的探测。
- 遍历类层次结构:递归查找父类或接口上的方法和字段。
- 设置访问权限:通过
makeAccessible()
方法临时改变访问控制,使得原本不可见的成员变为可见。- 处理异常:对于可能出现的反射异常进行了封装和统一处理。
- 获取所有字段:不论继承层次深浅,都能获取到类的所有字段。
通过使用
ReflectionUtils
,开发者可以减少手动编写反射代码的复杂度,降低潜在的错误风险,并使代码更具可读性和可维护性。在Spring
框架中,这个工具类广泛应用在依赖注入、AOP
代理、事件处理等方面。
使用场景就是表里面code
、value
字段存放的是属性名称、属性值,现在就是把表数据和具体实体做个映射,给实体属性set
值(惭愧,作为一个老程序员,第一次用这个工具类,特此记录一下)
- 设置属性值
- 具体方法
public static void setProperty(Object target, String propertyName, Object value) { Field field = ReflectionUtils.findField(target.getClass(), propertyName); if (field != null) { ReflectionUtils.makeAccessible(field); try { field.set(target, value); } catch (IllegalAccessException e) { throw new RuntimeException("无法设置属性值", e); } } else { throw new IllegalArgumentException("找不到名为 " + propertyName + " 的属性"); } }
比对相同实体的属性值是否相同
源码
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
/**
* 比较实体,返回相同和不同的属性
*/
public class EntityCompareTest {
private static Map<String, Object> differences = new HashMap<>(); // 用于存储不同属性及其新旧值
private static Map<String, Object> unchanges = new HashMap<>(); // 用于存储值未发生改变的属性及值
public static void main(String[] args) throws IllegalAccessException {
DemoEntity leftEntity = new DemoEntity();
leftEntity.setAge(32);
leftEntity.setId(20240229L);
leftEntity.setName("Tom");
leftEntity.setSex(1);
DemoEntity rightEntity = new DemoEntity();
rightEntity.setAge(31);
rightEntity.setId(20240229L);
rightEntity.setName("July");
rightEntity.setSex(2);
Class<?> leftClass = leftEntity.getClass();
Class<?> rightClass = rightEntity.getClass();
if (!leftClass.equals(rightClass)) {
throw new IllegalArgumentException("Entities must be of the same type");
}
Field[] fields = leftClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object leftValue = field.get(leftEntity);
Object rightValue = field.get(rightEntity);
if (leftValue == null && rightValue != null) {
differences.put(String.valueOf(field), new ComPareValue<>(leftValue, rightValue));
} else if (leftValue != null && !leftValue.equals(rightValue)) {
differences.put(field.getName(), new ComPareValue<>(leftValue, rightValue));
} else {
unchanges.put(field.getName(), leftValue);
}
}
System.out.println("变更信息:" + differences.toString());
System.out.println("未变更信息:" + unchanges.toString());
}
}
import lombok.Data;
/**
* demo实体类
*/
@Data
public class DemoEntity {
private Long id;
private String name;
private Integer sex;
private Integer age;
}
import lombok.Data;
/**
* 存储差异值.
*
* @param <L>
* @param <R>
*/
@Data
public class ComPareValue<L, R> {
private L left;
private R right;
public ComPareValue(L left, R right) {
this.left = left;
this.right = right;
}
}