java的反射机制

一直不太明白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的属性跟方法,而其他两个则可以取到任意的属性和方法。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值