java反射实例:
import java.lang.reflect.*;
import java.util.*;
public class GenericReflectionTest
{
public static void main(String[] args)
{
// read class name from command-line args or user input
String name;
if (args.length > 0)
name = args[0];
else
{
Scanner in = new Scanner(System.in);
System.out.println("Enter class name (e.g. java.util.Date): ");
name = in.next();
}
try
{
// print generic info for class and public methods
Class cl = Class.forName(name);
printClass(cl);
for (Method m : cl.getDeclaredMethods())
printMethod(m);
printFiles(cl);
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
private static void printFiles(Class cl) {
// TODO Auto-generated method stub
Field[] files=cl.getDeclaredFields();
for (Field field : files) {
field.setAccessible(true);
System.out.print(Modifier.toString(field.getModifiers())+ " ");
printType(field.getGenericType());
System.out.print(" "+field.getName()+" \n");
}
}
public static void printClass(Class cl)
{
System.out.print(cl);
printTypes(cl.getTypeParameters(), "<", ", ", ">");
Type sc = cl.getGenericSuperclass();
if (sc != null)
{
System.out.print(" extends ");
printType(sc);
}
printTypes(cl.getGenericInterfaces(), " implements ", ", ", "");
System.out.println();
}
public static void printMethod(Method m)
{
String name = m.getName();
System.out.print(Modifier.toString(m.getModifiers()));
System.out.print(" ");
printTypes(m.getTypeParameters(), "<", ", ", "> ");
printType(m.getGenericReturnType());
System.out.print(" ");
System.out.print(name);
System.out.print("(");
printTypes(m.getGenericParameterTypes(), "", ", ", "");
System.out.println(")");
}
public static void printTypes(Type[] types, String pre, String sep, String suf)
{
if (types.length > 0) System.out.print(pre);
for (int i = 0; i < types.length; i++)
{
if (i > 0) System.out.print(sep);
printType(types[i]);
}
if (types.length > 0) System.out.print(suf);
}
public static void printType(Type type)
{
if (type instanceof Class)
{
Class t = (Class) type;
System.out.print(t.getName());
}//下面的是泛型类型
else if (type instanceof TypeVariable)
{
TypeVariable t = (TypeVariable) type;
System.out.print(t.getName());
printTypes(t.getBounds(), " extends ", " & ", "");
}
else if (type instanceof WildcardType)
{
WildcardType t = (WildcardType) type;
System.out.print("?");
printTypes(t.getLowerBounds(), " extends ", " & ", "");
printTypes(t.getUpperBounds(), " super ", " & ", "");
}
else if (type instanceof ParameterizedType)
{
ParameterizedType t = (ParameterizedType) type;
Type owner = t.getOwnerType();
if (owner != null) { printType(owner); System.out.print("."); }
printType(t.getRawType());
printTypes(t.getActualTypeArguments(), "<", ", ", ">");
}
else if (type instanceof GenericArrayType)
{
GenericArrayType t = (GenericArrayType) type;
System.out.print("");
printType(t.getGenericComponentType());
System.out.print("[]");
}
}
}
分享到:
相关推荐
在提供的"java反射实例代码"中,应该包含了如何使用上述方法的实际示例,这些示例有助于加深对Java反射机制的理解。通过阅读和运行这些代码,开发者可以更直观地学习如何在程序运行时动态地操作类、方法和字段,从而...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够在运行时创建和访问这些类的对象。在Java中,反射提供了对类对象的元数据(metadata)的访问,使得我们可以...
标题"Java反射实例源码"表明我们将探讨如何通过源代码来实现和理解Java反射。这个实例可能包含了如何动态地创建对象、调用方法、访问字段和执行构造器的示例。 描述中提到的博客文章"菜鸟学编程(九)——Java反射...
在标题和描述中提到的"java反射实例"是一个简单的入门程序,旨在演示如何使用反射来操作JavaBean的get和set方法。 首先,让我们理解JavaBean。JavaBean是一种符合特定规范的Java类,通常具有公有的getter和setter...
以下是对"Java反射实例"的详细解释: 1. **获取Class对象** 要使用反射,首先需要获取到对应的`Class`对象。这可以通过以下三种方式实现: - 使用`Class.forName()`方法,传入类的全名(包括包名)。 - 对象的`...
以下将详细介绍Java反射的8个关键实例。 1. 获取Class对象 要使用反射,首先需要获取到目标类的Class对象。这可以通过以下几种方式实现: - 使用`Class.forName()`方法,如`Class<?> clazz = Class.forName("全...
java 反射 的 实例介绍 个人笔记
很好的几个反射的例子,看后就明白什么是反射了,反射机制怎么用了
关于Java反射的实例,我们可以创建一个简单的例子。假设我们有一个接口`Service`和两个实现类`ServiceImpl1`、`ServiceImpl2`。在不使用反射的情况下,我们通常会通过new关键字创建服务对象。而通过反射,可以在运行...
三、Java反射实例 1. 创建对象:通过`Class.newInstance()`创建默认构造器的对象,或`Constructor.newInstance()`创建指定构造器的对象。 ```java Class<?> clazz = Class.forName("com.example.MyClass"); MyClass ...
本实例将深入探讨Java反射的应用及其重要性。 一、什么是Java反射 Java反射机制允许我们动态地获取类的信息,并在运行时创建和调用对象的方法。这种能力使得Java具有高度的灵活性和动态性,特别是在处理跨版本兼容...
在本“Java反射经典实例”中,我们将深入探讨这个主题,了解如何利用反射来访问和修改私有属性以及调用私有方法。 1. **反射的概念与用途** - 反射机制是在运行时分析类的能力,它允许我们获取类的信息(如类名、...
### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...
### Java反射机制简介 Java反射机制是Java编程语言的一个强大特性,它允许程序在运行时检查自身,并且能够“看”到类的信息(字段、方法等),甚至可以在运行时调用这些方法或修改这些字段的值。这为开发带来了很大...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
Java 反射机制详解 Java 反射机制是 Java 语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。这种能力使得 Java 应用程序更加灵活,能够在运行时发现和修改自身...