Tag: reflection

Java序列化方法

可以序列化方法吗? 因为当我查看文档时,Method类不实现Serializable。 那么还有其他选择吗?

为什么带有varargs的Java方法被识别为瞬态?

我正在使用Java Reflection API,并观察到具有可变参数列表的方法变得短暂。 为什么这个以及transient关键字在这种情况下意味着什么? 来自Java词汇表, 瞬态 : Java编程语言中的关键字,指示字段不是对象的序列化forms的一部分。 当对象被序列化时,其瞬态字段的值不包括在串行表示中,而其非瞬态字段的值包括在内。 然而,这个定义没有说明方法。 有任何想法吗? import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class Dummy { public static void main(String[] args) { for(Method m : Dummy.class.getDeclaredMethods()){ System.out.println(m.getName() + ” –> “+Modifier.toString(m.getModifiers())); } } public static void foo(int… args){} } 输出: main –> public static foo –> public static transient

如何从孩子调用父私有方法?

public class A{ private int getC(){ return 0; } } public class B extends A{ public static void main(String args[]){ B = new B(); //here I need to invoke getC() } } 你能否告诉我是否有可能通过java中的reflection做一些事情?

newInstance()vs new

调用newInstance()是否会受到惩罚,或者下面的机制是否相同? newInstance()对新关键字*有多少开销? *:折扣newInstance()暗示使用reflection的事实。

确定方法是否在运行时覆盖另一个方法

我想知道是否有任何方法可以确定给定的java.lang.Method对象所代表的方法是否会覆盖另一个java.lang.Method对象所代表的另一个方法? 我正在研究Stronlgy类型的javascript ,我需要能够知道一个方法是否覆盖了另一个方法,以便能够将它们重命名为更短的名称。 在这种情况下,我正在谈论覆盖的扩展定义,由@Override注释支持,其中包括接口和抽象类方法的实现。 我对任何涉及直接reflection或使用任何已经执行此操作的库的解决方案感到满意。

使用构造函数参数从Class创建新实例

我的情况是我的Java类需要创建大量特定类型的对象。 我想给出作为参数创建的对象类的名称。 另外,我需要在构造函数中为创建的类赋一个参数。 我有类似的东西 class Compressor { Class ccos; public Compressor(Class ccos) { this.ccos = ccos; } public int getCompressedSize(byte[] array) { OutputStream os = new ByteArrayOutputStream(); // the following doesn’t work because ccos would need os as its constructor’s parameter OutputStream cos = (OutputStream) ccos.newInstance(); // .. } } 你有什么想法我可以解决这个问题吗? 编辑: 这是一个研究项目的一部分,我们需要评估具有多个不同输入的多个不同压缩机的性能。 Class ccos是来自Java标准库,Apache […]

用C ++反思

我一直在使用Java工作多年。 在那些年里,我已经广泛(或者可能只是经常)使用reflection,并发现它有用且令人愉快。 但是8个月前我改变了我的工作,现在Java只是一个记忆,而我正在接受C ++。 所以现在我想知道C ++中是否有任何reflection机制。 我读过有关RTTI的内容,但我觉得这绝不是Java(或其他语言)reflection的强大function。 我开始认为在C ++中无法做到这一点。 我错了吗?

如何以null为参数reflection调用方法?

我试图用Javareflection调用这个方法: public void setFoo(ArrayList foo) { this.foo = foo; } 问题是我想将null作为null传递,因此foo变为null。 但是,在以下方法中,它假定没有参数,并且我得到IllegalArgumentException ( wrong number of arguments ): method.invoke(new FooHolder(), null); // —————————–^ – I want null to be passed to the method… 这是如何完成的?

如何在java中创建一个保留方法参数注释的动态代理?

我目前正在尝试代理一些现有的JAX / RS资源,以便允许我使用Hibernate Validator的方法validation支持。 但是,当我代理我的类(当前使用cglib 2.2)时,FormParam注释不存在于代理类中的参数上,因此JAX / RS运行时(apache wink)不会填充参数。 这里有一些测试代码显示: import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; import java.lang.annotation.Annotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import javassist.util.proxy.ProxyFactory; public class ProxyTester { @Target( { PARAMETER }) @Retention(RUNTIME) public static @interface TestAnnotation { } public static interface IProxyMe { void […]

newInstance()的InstantiationException

当className为”java.awt.Rectangle”和”java.lang.String”等时,以下工作正常。但是对于”java.lang.Integer” , “java.lang.Double”给出了java.lang.InstantiationException ,它失败了classDefinition.newInstance() 。 Class classs = Class.forName(className); Object object = classs.newInstance(); 这是Wrapper类或其他类的问题吗? 编辑:这样做的方法 – 积分应该去Jigar。 Class integerDefinition = Class.forName(“java.lang.Integer”); Constructor intArgsConstructor = integerDefinition.getConstructor(new Class[] {int.class}); Object[] intArgs = new Object[] { new Integer(12) }; Object object = intArgsConstructor.newInstance(intArgs);