這篇文章主要介紹了Java 建立動態類別和檢視方法清單資訊的實例的相關資料,需要的朋友可以參考下
Java 建立動態類別和檢視方法清單資訊的實例
Sample code :
import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; public class ProxyTest { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class); System.out.println(clazzProxy); System.out.println("------constructor method list ------"); Constructor[] constructors = clazzProxy.getConstructors(); for(Constructor constructor:constructors){ StringBuilder sb = new StringBuilder(constructor.getName()); sb.append("("); Type[] parameterTypes = constructor.getParameterTypes(); for(Type parameterType:parameterTypes){ sb.append(parameterType.toString()+","); } if(parameterTypes.length>0){ sb.deleteCharAt(sb.length()-1); } sb.append(")"); System.out.println(sb.toString()); } System.out.println("------constructor method list ------\n\n"); System.out.println("------ method list ------"); Method[] methods = clazzProxy.getMethods(); for(Method method:methods){ StringBuilder sb2 = new StringBuilder(method.getName()); sb2.append("("); Type[] parameterTypes = method.getParameterTypes(); for(Type parameterType:parameterTypes){ sb2.append(parameterType.toString()+","); } if(parameterTypes.length>0){ sb2.deleteCharAt(sb2.length()-1); } sb2.append(")"); System.out.println(sb2.toString()); } System.out.println("------ method list ------"); Constructor proxyConstructor = clazzProxy.getConstructor(InvocationHandler.class); class MyInvocationHandler implements InvocationHandler{ ArrayList target = new ArrayList(); public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object obj = method.invoke(target, args); return obj; } } MyInvocationHandler mih = new MyInvocationHandler(); Collection collectionProxy = (Collection) proxyConstructor.newInstance(mih); collectionProxy.add("zhuang"); collectionProxy.add("alex"); System.out.println("collectionProxy size:"+collectionProxy.size()); Collection collectionProxy2 = (Collection)Proxy.newProxyInstance(Collection.class.getClassLoader(),new Class[] {Collection.class},new InvocationHandler(){ ArrayList target = new ArrayList(); public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object obj = method.invoke(target, args); return obj; } }); collectionProxy2.add("one"); collectionProxy2.add("two"); collectionProxy2.add("three"); System.out.println("collectionProxy2 size:"+collectionProxy2.size()); }
執行結果:
class $Proxy0 ------constructor method list ------ $Proxy0(interface Java.lang.reflect.InvocationHandler) ------constructor method list ------ ------ method list ------ add(class java.lang.Object) hashCode() equals(class java.lang.Object) clear() toString() contains(class java.lang.Object) isEmpty() addAll(interface java.util.Collection) iterator() size() toArray(class [Ljava.lang.Object;) toArray() remove(class java.lang.Object) containsAll(interface java.util.Collection) removeAll(interface java.util.Collection) retainAll(interface java.util.Collection) isProxyClass(class java.lang.Class) getProxyClass(class java.lang.ClassLoader,class [Ljava.lang.Class;) newProxyInstance(class java.lang.ClassLoader,class [Ljava.lang.Class;,interface java.lang.reflect.InvocationHandler) getInvocationHandler(class java.lang.Object) wait() wait(long,int) wait(long) getClass() notify() notifyAll() ------ method list ------ collectionProxy size:2 collectionProxy2 size:3
以上是Java 建立動態類別的實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver Mac版
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。