检查类的修饰符和类型

一个类可以被申明一个到多个影响它运行时行为的修饰符.
访问修饰符:public,protected,private;
需要重写的修饰符:abstract;
限制一个实例的修饰符的static;
禁止被修改的修饰符:final;
强制准确的浮点行为的strictfp;
注解

这些修饰符不是对所有的类都适合.如一个接口就不能为final,一个枚举不能是抽象的.java.lang.reflect.Modifier包含了所有可能的修饰符申明.


import java.lang.annotation.Annotation;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;

public class ClassDeclarationSpy {
public static void main(String... args) {
try {
Class<?> c = Class.forName(args[0]);
out.format("Class:%n %s%n%n", c.getCanonicalName());
out.format("Modifiers:%n %s%n%n",
Modifier.toString(c.getModifiers()));
out.format("Type Parameters:%n");
TypeVariable[] tv = c.getTypeParameters();
if(tv.length != 0) {
out.format(" ");
for(TypeVariable t : tv)
out.format("%s", t.getName());
out.format("%n%n");
} else {
out.format(" -- No Type Parameters -- %n%n");
}
out.format("Inheritance Path: %n");
List<Class> l = new ArrayList<Class>();
printAncestor(c,l);
if(l.size() !=0) {
for(Class<?> cl:l)
out.format(" %s%n",cl.getCanonicalName());
out.format("%n");
}else {
out.format(" -- No Super Classes -- %n%n");
}

out.format("Annotations:%n");
Annotation[] ann = c.getAnnotations();
if(ann.length!=0) {
for(Annotation a : ann)
out.format(" %s%n",a.toString());
out.format("%n");
}else {
out.format(" -- No Annotations -- %n%n");
}

} catch(ClassNotFoundException x ) {
x.printStackTrace();
}
}
private static void printAncestor(Class<?> c,List<Class> l) {
Class<?> ancestor = c.getSuperclass();
if(ancestor != null) {
l.add(ancestor);
printAncestor(ancestor,l);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值