草庐IT

Reflection

全部标签

php - 如何检查它是否是魔术方法?

我试图在反射类中找到一个魔术方法的检查,但它不存在。也许php(我使用的是php5.3)有其他一些工具可以解决这个问题?像这样:classmyClass{publicfunction__call($method,$arguments){return'ismagic';}publicfunctionnotMagic(){return'notamagic';}}$reflection=newReflectionMethod('myClass','magic');if($reflection->isMagic()){/*dosomethingifismagic*/}

php - 在 php 中 Hook 函数调用

一点背景知识:在运行时,我希望能够检查当前调用的函数javadoc样式的文档,以确定其正式(类型化)声明。这将允许在调试和测试期间通过反射(有代价)进行运行时类型检查(对于简单和复杂类型),我会发现这非常有用。因此,在php中,我希望在任何其他函数即将被调用时调用用户定义的函数。也就是说,如果函数foo()被调用,我希望在之前立即调用我的callHookHandler()函数。一种解决方案是在所有用户定义的类中实现__call(),但这既笨拙又不支持在类外定义的函数,因此我正在寻找更好的解决方案。 最佳答案 这听起来有点有趣,所以我

java - 在运行时使用反射将文件添加到类路径的危险

最近我一直在寻找在运行时将jar文件动态加载到我的应用程序中的方法。我已经多次遇到过某个解决方案,它基本上是一个获取系统类加载器并使用反射访问其他protectedaddURL方法的“hack”,以便在运行时将其他文件添加到原始类路径。据推测,该解决方案工作得非常好,并且避免了在编写和使用自制的自定义类加载器时出现的问题。看起来像这样:URLClassLoadersysloader=(URLClassLoader)ClassLoader.getSystemClassLoader();Classsysclass=URLClassLoader.class;try{Methodmethod=

Java 方法似乎花费了很多我无法解释的时间

使用JProfiler,我在我的Java代码中发现了一个我无法理解的热点。JProfiler解释说这个方法平均需要150μs(674μs没有预热),不包括调用后代方法所花费的时间。150μs可能看起来并不多,但在这个应用程序中它加起来(并且我的用户体验过)而且看起来很多,与其他对我来说似乎比这个更复杂的方法相比。因此这对我很重要。privatebooleanassertReadAuthorizationForFields(Objectentity,Object[]state,String[]propertyNames){booleanchanged=false;finalListfie

Java 反射调用重载方法 Area.equals(Area)

如thisquestion中所述,java.awt.geom.Area的equals方法定义为publicbooleanequals(Areaother)而不是覆盖Object中的equals方法。这个问题涵盖了“为什么”,我对“如何强制Java使用最合适的equals方法”感兴趣。考虑这个例子:publicstaticvoidmain(String[]args){Classcls=Area.class;Areaa1=newArea(newRectangle2D.Double(1,2,3,4));Areaa2=newArea(newRectangle2D.Double(1,2,3,4)

java - sun.reflect 的来源在哪里?

在Eclipse中调试使用反射的Java代码时,有时我需要进入调用的方法或构造函数。但是java.lang.reflect.Method和java.lang.Class等反射类对sun.reflect.DelegatingConstructorAccessorImpl进行内部调用,sun.reflect.NativeConstructorAccessorImpl、sun.reflect.ReflectionFactory等。这些类不在JDK附带的src.zip中。这需要我将sun.reflect.*添加到调试器StepFilters。否则我将不得不在字节码View中多次按F5(Step

java - 方法在反射中有效,但在 Java 中的 "normal way"中无效

执行这段代码时出现异常:p7=newPKCS7(p7byte);...SignerInfosi=p7.getSignerInfos()[0];Stringname=si.getDigestAlgorithmId().getName();异常(exception)情况是:Exceptioninthread"main"java.lang.NoSuchMethodError:sun/security/pkcs/SignerInfo.getDigestAlgorithmId()Lsun/security/x509/AlgorithmId;atreflex.Reflex.testPKCS7(Re

java - 请纠正我这一点,这很令人困惑

如有不对请指正。我被教导说,每次加载一个类时,都会在堆内存中创建一个类对象,类名的引用保存在类区每个字段,如字符串、int,无论是什么,都作为对象存储,其引用在创建的类对象中给出同样适用于方法、构造函数等现在还有一个问题,是为每个对象存储所有这些东西,还是只创建一个对象来了解这些信息另外请告诉我这个Field类实际上有什么?喜欢例如classb{Strings="sdnla";}b类有两个对象,b1和b2,Field类对象有什么? 最佳答案 在正常情况下,每个类只有一个类对象。不是每个对象。如果Java为每个对象都创建了所有的结构,

java - PropertyDescriptor.getReadMethod() 试图找到 set 方法而不是 get 方法

我有一个类:publicabstractclassProduktextendsObjectPlusimplementsSerializable{staticintID=0;privateintid;publicProdukt(){super();id=ID++;}publicintgetId(){returnid;}//lotOFOTHERMETHODS}在其他类的其他地方,我尝试在对象上调用getId()方法以通过以下方式获取id字段值:IntegerfieldValue=(Integer)newPropertyDescriptor("Id",c).getReadMethod().i

java - 如何捕获类内部的 MethodNotFoundException 异常?

假设我们有一个名为DynamicClass的类:publicclassDynamicClass{publicvoidget(Stringinput){System.out.println(input);}}现在,想象一下DynamicClass的以下实例化:DynamicClassclazz=newDynamicClass();clazz.getName();clazz.getOther();当然,调用getName和getOther方法会抛出MethodNotFoundException异常。但是,我很好奇,有没有办法在DynamicClass类中捕获MethodNotFoundEx