Java基础-反射

常用类

java.lang.Class;                
java.lang.reflect.Constructor; 
java.lang.reflect.Field;        
java.lang.reflect.Method;
java.lang.reflect.Modifier;

获取类类型

Class c1 = Class.forName("Employee");   

Class c2 = Employee.class;  

Employeee = new Employee();  
Class c3 = e.getClass();

创建对象

Class c =Class.forName("Employee");  
Objecto = c.newInstance(); // 调用了Employee的无参构造方法

获取属性

Class c = Class.forName("java.lang.Integer");
Field[] fs = c.getDeclaredFields();
StringBuffer sb = new StringBuffer();
sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");
for(Field field : fs) {
    sb.append("\t");
    sb.append(Modifier.toString(field.getModifiers())+" ");
    sb.append(field.getType().getSimpleName() + " ");
    sb.append(field.getName()+";\n");
}
sb.append("}");
System.out.println(sb);

获取特定属性

User u = new User();
u.age = 12;
System.out.println(u.age);

Class c = Class.forName("User");
Field idF = c.getDeclaredField("id");
Object o = c.newInstance();
idF.setAccessible(true); // 使用反射机制可以打破封装性,导致了java对象的属性不安全
idF.set(o, "110");
System.out.println(idF.get(o));

方法和构造方法

reflection-001.jpg

Class aClass = ... // obtain class object
Constructor[] constructors = aClass.getConstructors();
Constructor constructor = aClass.getConstructor(new Class[]{String.class}); // 参数不匹配,NoSuchMethodException
Class[] parameterTypes = constructor.getParameterTypes();

Constructor constructor = MyObject.class.getConstructor(String.class);
MyObject myObject = (MyObject) constructor.newInstance("constructor-arg1");
如果你在 `style.questionTemplate` 样式文件中修改 `.ant-tag-checkable-checked` 的样式,可能会因为样式优先级问题导致修改生效。这种情况下,你可以使用后代选择器或者子选择器来提高样式优先级。 下面是一个简单的示例,展示如何使用后代选择器来修改 `CheckableTag` 组件的样式: ```less /* style.questionTemplate */ @import "~antd/dist/antd.less"; // 引入 antd 样式文件 /* 自定义样式 */ .questionTemplate { .ant-tag-checkable-checked { background-color: red; // 修改选中状态下的背景色 } } ``` 在上面的代码中,我们首先引入了 Ant Design样式文件。然后,我们定义了一个 `.questionTemplate` 样式类,用于包装 `CheckableTag` 组件。 在 `.questionTemplate` 样式类中,我们使用 `.ant-tag-checkable-checked` 选择器来选中选中状态下的 tag,并修改其背景色。 最后,我们将 `.questionTemplate` 样式类应用到包装 `CheckableTag` 组件的 div 上即可: ```jsx import { CheckableTag } from 'antd'; import style from './style.questionTemplate.less'; function MyComponent() { return ( <div className={style.questionTemplate}> <CheckableTag checked>1</CheckableTag> </div> ); } ``` 在上面的代码中,我们使用 `className` 属性将 `.questionTemplate` 样式类应用到包装 `CheckableTag` 组件的 div 上,从而修改样式。 需要注意的是,为了确保样式生效,我们需要使用 `less-loader` 或者 `css-loader` 中的 `modules` 选项来启用 CSS 模块化。同时,为了避免样式冲突,建议使用类似于 `style.questionTemplate` 的方式来引用样式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eddy咸鱼

感谢大佬加鸡蛋~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值