java的反射机制

来源:互联网 发布:如何突破公司网络限制 编辑:程序博客网 时间:2024/04/30 16:35

一直不太明白java的反射机制,今天稍微看了下,写了一个例子:

public static void main(String[] args) {try {Class clazz = Class.forName("cn.com.mysite.sink.ScalaSink");Field[] fields = clazz.getDeclaredFields();                for(int i = 0; i < fields.length; i++) {                 // 权限修饰符                int mo = fields[i].getModifiers();                String priv = Modifier.toString(mo);                // 属性类型                Class<?> type = fields[i].getType();                System.out.println(priv + " " + type.getName() + " "                        + fields[i].getName() + ";");            }                System.out.println();            System.out.println("Public fields: ");                fields = clazz.getFields();                for(int i = 0; i < fields.length; i++) {                    int mo = fields[i].getModifiers();                String priv = Modifier.toString(mo);                // 属性类型                Class<?> type = fields[i].getType();                System.out.println(priv + " " + type.getName() + " "                        + fields[i].getName() + ";");            }                                      Method method=clazz.getDeclaredMethod("isEmpty",String.class);            method.setAccessible(true);            Object o = method.invoke((cn.com.mysite.sink.ScalaSink)clazz.newInstance(),"");            System.out.println(o);} catch (Exception e) {e.printStackTrace();}}

打印结果:

private static final org.slf4j.Logger logger;public static final java.lang.String TOPIC_HDR;private java.lang.String isWhite;private java.util.Properties kafkaProps;private java.lang.String topic;private int batchSize;private java.lang.String hostname;private java.lang.String uripath;private java.lang.String field;private java.lang.String dataSource;private [Ljava.lang.String; f;private java.util.List messageList;private org.apache.flume.sink.SinkCounter counter;private com.ibm.tivoli.unity.common.rest.RestClient restClient;private com.ibm.tivoli.unity.common.rest.RequestResult result;private java.text.SimpleDateFormat df;private java.text.SimpleDateFormat format;private java.util.Map map;private com.ibm.json.java.JSONObject batch;private java.lang.StringBuilder sb;private com.ibm.json.java.JSONObject job;private static java.security.MessageDigest digest;private java.util.concurrent.ExecutorService threadPool;private long bytes;private int _count;private java.io.File timeFile;private long lastSendTime;private long sendTimeInterval;private boolean isWrite;private java.io.FileWriter writer;private boolean countFlowEnable;Public fields: public static final java.lang.String TOPIC_HDR;true

class里面有几个方法:getDeclaredFields();getFields();   getDeclaredMethod();getMethod();

取值不太一样,getFields()与getMethod()只能取修饰符为public的属性跟方法,而其他两个则可以取到任意的属性和方法。



0 0
原创粉丝点击