- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Java反射根据不同方法名动态调用不同的方法(实例)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
list页面的字段要求可以根据用户的喜好进行排序,所以每个用户的字段都对应着不同的顺序(字段顺序存数据库),我们从数据库里取出来的值是对象,但是前台传值是用的ajax和json array,所以就面临着一个对象到json的转换问题:1. 每个用户的字段顺序不固定,代码不能写死, 2. 根据用户字段顺序去取值,如果用if判断每个值然后调用不同的方法,if条件语句太多。然后就看了下反射.
Model 类,跟正常model一样 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public
class
Person {
private
String name;
private
int
age;
private
String address;
private
String phoneNumber;
private
String sex;
public
String getName() {
return
name;
}
// 以下是get 和set方法,省略。
}
|
测试类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import
java.lang.reflect.InvocationTargetException;
import
java.lang.reflect.Method;
import
java.util.ArrayList;
import
java.util.List;
public
class
Test {
// init person object.
private
Person initPerson() {
Person p =
new
Person();
p.setName(
"name"
);
p.setAge(
21
);
p.setAddress(
"this is my addrss"
);
p.setPhoneNumber(
"12312312312"
);
p.setSex(
"f"
);
return
p;
}
public
static
void
main(String[] args)
throws
SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Test test =
new
Test();
Person p = test.initPerson();
List<String> list =
new
ArrayList<String>();
// Add all get method.
// There is no ‘()' of methods name.
list.add(
"getName"
);
list.add(
"getAge"
);
list.add(
"getAddress"
);
list.add(
"getPhoneNumber"
);
list.add(
"getSex"
);
for
(String str : list) {
// Get method instance. first param is method name and second param is param type.
// Because Java exits the same method of different params, only method name and param type can confirm a method.
Method method = p.getClass().getMethod(str,
new
Class[
0
]);
// First param of invoke method is the object who calls this method.
// Second param is the param.
System.out.println(str +
"(): Get Value is "
+ method.invoke(p,
new
Object[
0
]));
}
}
}
|
样就可以根据数据库获取的字段遍历从对象去取相应的值了 。
上面那个方法是要给list添加get方法名,才能根据相应的get方法名去获取值,如果前台传过来的只是一个属性名,那我们还要转换成相应的get方法,麻烦.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public static void getValueByProperty(Person p, String propertyName) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// get property by the argument propertyName.
PropertyDescriptor pd =
new
PropertyDescriptor(propertyName, p.getClass());
Method method = pd.getReadMethod();
Object o = method.invoke(p);
System.out.println(
"propertyName: "
+ propertyName +
"\t value is: "
+ o);
}
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException {
Test test =
new
Test();
Person p = test.initPerson();
// get all properties.
Field[] fields = p.getClass().getDeclaredFields();
for
(Field field : fields) {
getValueByProperty(p, field.getName());
}
}
|
这样就能直接通过传过来的propertyName获取对应的value值了 。
以上这篇Java反射根据不同方法名动态调用不同的方法(实例)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
最后此篇关于Java反射根据不同方法名动态调用不同的方法(实例)的文章就讲到这里了,如果你想了解更多关于Java反射根据不同方法名动态调用不同的方法(实例)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
一、反射 1.定义 Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法(即使是私有的);对于任意一个对象,都能够调用它的任意方法和属性,那么,我
有没有办法从 JavaScript 对象内部获取所有方法(私有(private)、特权或公共(public))?这是示例对象: var Test = function() { // private m
我有一个抽象类“A”,类“B”和“C”扩展了 A。我想在运行时根据某些变量创建这些实例。如下所示: public abstract class A { public abstract int
假设我们在内存中有很多对象。每个都有一个不同的ID。如何迭代内存以找到与某些 id 进行比较的特定对象?为了通过 getattr 获取并使用它? 最佳答案 您应该维护这些对象的集合,因为它们是在类属性
假设我有这个结构和一个方法: package main import ( "fmt" "reflect" ) type MyStruct struct { } func (a *MyS
C#反射简介 反射(Reflection)是C#语言中一种非常有用的机制,它可以在运行时动态获取对象的类型信息并且进行相应的操作。 反射是一种在.NET Framework中广
概述 反射(Reflection)机制是指在运行时动态地获取类的信息以及操作类的成员(字段、方法、构造函数等)的能力。通过反射,我们可以在编译时期未知具体类型的情况下,通过运行时的动态
先来看一段魔法吧 public class Test { private static void changeStrValue(String str, char[] value) {
结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套; go中的struct类型理解为类,可以定义方法,和函数定义有些许区别; struct类型是值类型
反射 1. 反射的定义 Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们
反射的定义 java的反射(reflection) 机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到嘛,那么,我们就可以
我有一个 Java POJO: public class Event { private String id; private String name; private Lon
我编写了以下函数来检查给定的单例类是否实现了特征。 /** Given a singleton class, returns singleton object if cls implements T.
我正在研究 Java 反射的基础知识并观察有关类方法的信息。我需要获得一个符合 getMethod() 函数描述的规范的方法。然而,当我这样做时,我得到了一个 NoSuchMethodExceptio
我正在通过以下代码检索 IEnumerable 属性列表: BindingFlags bindingFlag = BindingFlags.Instance | BindingFlags.Public
我需要检查属性是否在其伙伴类中定义了特定属性: [MetadataType(typeof(Metadata))] public sealed partial class Address { p
我正在尝试使用 Reflections(由 org.reflections 提供)来处理一些繁重的工作,因此我不需要在很长的时间内为每个类手动创建一个实例列表。但是,Reflections 并未按照我
scala 反射 API (2.10) 是否提供更简单的方法来搜索加载的类并将列表过滤到实现定义特征的特定类? IE; trait Widget { def turn(): Int } class
我想在运行时使用反射来查找具有给定注释的所有类,但是我不知道如何在 Scala 中这样做。然后我想获取注释的值并动态实例化每个映射到关联注释值的带注释类的实例。 这是我想要做的: package pr
这超出了我的头脑,有人可以更好地向我解释吗? http://mathworld.wolfram.com/Reflection.html 我正在制作一个 2d 突破格斗游戏,所以我需要球能够在它击中墙壁
我是一名优秀的程序员,十分优秀!