在java中怎么获取一个范型集合中范型集合属性的属性

在java中怎么获取一个范型集合中范型集合属性的属性,第1张

一层一层获取啊。

首先你需要获取到Menu类的对象(对象名暂定为menu)

因为你的这个集合访问控制符为private,所以你需要在这个类中定义一个menuTow2的getter,既:

public List<Menu> getMenuTow2(){

    return thismenuTow2;

}

这样的。

然后使用menu调用这个方法

List<Menu> menuList = menugetMenuTow2();

这个时候你就已经获取到Menu类中的menuList这个属性值了。获取到的值为你定义的List<Menu>类型。

然后再调用这个List的get方法或者遍历这个集合,就获取到这个集合中的Menu对象,最后再调用该对象的属性的getter方法即可。

说的可能有点绕,那是因为你的属性里有一个是他自身的集合对象。还有不懂的请追问

纯手打,望采纳

Java代码

package ;

import java lang reflect Field;

import java lang reflect InvocationTargetException;

import java lang reflect Method;

public class TestBean {

private int age;

public static void main(String []args) throws InstantiationException IllegalAccessException SecurityException NoSuchFieldException{

try {

Class<> class =Class forName( TestBean );

Object tObject=class newInstance();

Field field=class getDeclaredField( age );

field setAccessible(true);  //设置私有属性范围

field set(tObject );

System out print(field get(tObject));

try {

Method method=class getMethod( setAge int class);

method invoke(tObject );

Method getMethod=class getMethod( getAge );

System out println(getMethod invoke(tObject));

} catch (NoSuchMethodException e) {

// TODO Auto generated catch block

e printStackTrace();

} catch (IllegalArgumentException e) {

// TODO Auto generated catch block

e printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto generated catch block

e printStackTrace();

}

} catch (ClassNotFoundException e) {

// TODO Auto generated catch block

e printStackTrace();

}

}

public int getAge() {

return age;

}

public void setAge(int age) {

this age = age;

}

lishixinzhi/Article/program/Java/hx/201311/26324

可以通过反射获取到属性方法信息:

public class User {

    private int id;

    private String name;

    private double amount;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        thisid = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        thisname = name;

    }

    public double getAmount() {

        return amount;

    }

    public void setAmount(double amount) {

        thisamount = amount;

    }

}

获取类信息:

import javalangreflectField;

import javalangreflectMethod;

import javalangreflectParameter;

public class ReflectDemo {

    public static void main(String[] args) {

        Class clz = Userclass;

        // 获取所有自己定义的属性(不包含从Object继承的,如果需要可使用getFields()方法)

        Field[] fields = clzgetDeclaredFields();

        for (Field f : fields) {

            Systemoutprintln("属性名称:" + fgetName() + ",属性类型:" + fgetType()getName());

        }

        // 获取所有自己定义的方法(同样不包含继承的)

        Method[] methods = clzgetDeclaredMethods();

        for (Method m : methods) {

            Systemoutprintln("方法名称:" + mgetName());

            Systemoutprintln("返回值类型:" + mgetReturnType()getName());

            // 获取方法的所有参数

            Parameter[] parameters = mgetParameters();

            for (Parameter p : parameters) {

                Systemoutprintln("参数类型:" + pgetType()getName());

            }

            Systemoutprintln("==========================================");

        }

    }

}

在JAVA中动态执行类的静态方法

/

在JAVA中,通过ClassforName()方法可以动态决定加载哪一个类,这个功能对于相同接口的不同实现来讲非常有用。比如对于设计好的数据库连接池接口,我们可以有多种的接口实现类来完成相同的功能,同时用户可以简单的通过修改配置文件来指定实际使用哪一个实现类,在源代码里面通过读取配置文件信息,并用ClassforName(configClassName)getInstance()就可以构造一个特定的实现类实例,而不用每次修改源代码。这样对于程序来讲只用关心接口的定义,用户只用进行配置文件的设置就完成了同一功能的不同实现的切换。

但是如果实现类需要通过静态方法来进行初始化的时候,动态加载的过程就会复杂一些。同样的以数据库连接池为例,通常连接池的构造函数都会被定义为私有的,而通过自定义的getInstance()静态方法来得到唯一实例。这种情况下简单的通过ClassforName()getInstance()就无法正确构造实例。

幸好JAVA所提供的反射机制(Reflection)为我们提供了完整了探悉类内部结构的方法。通过反射机制,我们能够完成基本上所有的运行时决定的动作(虽然这一实现要比其他动态语言,比如PHP,的eval()的使用要复杂的多)。

下面通过实际的例子说明如何在运行时动态访问类的静态方法。

package comaiycfcsframework;

import javabeansBeanInfo;

import javabeansIntrospectionException;

import javabeansIntrospector;

import javabeansPropertyDescriptor;

/

@author Felly

@date 2008-12-20

/

public class ConfigAnalysis {

public static void main(String d[]){

ConfigAnalysis config=new ConfigAnalysis();

configlistBeans();

}

public void listBeans() {

try {

BeanInfo bi = IntrospectorgetBeanInfo(Testclass);

PropertyDescriptor[] pds = bigetPropertyDescriptors();

for (int i = 0; i < pdslength; i++) {

String propName = pds[i]getName();

Systemoutprintln(propName);

}

} catch (IntrospectionException e) {

eprintStackTrace();

}

}

}

class Test {

private String id;

private String name;

private String age;

public String getId() {

return id;

}

public void setId(String id) {

thisid = id;

}

public String getName() {

return name;

}

public void setName(String name) {

thisname = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

thisage = age;

}

}

这是获得一个class类的实例,JAVA里面有个类的名字叫做class,在javalang里,用来表示当前类这个类型,这个class类的对象是由JVM自动构造的,所以可以直接获取。

有点拗口,具体的方法和信息你可以看下API。

以上就是关于在java中怎么获取一个范型集合中范型集合属性的属性全部的内容,包括:在java中怎么获取一个范型集合中范型集合属性的属性、Java反射设置私有属性和获取属性、java中如何遍历实体类的属性和数据类型以及等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9682596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存