// Without reflectionFoofoo=newFoo();foo.PrintHello();// With reflectionSystem.Objectfoo2=System.Activator.CreateInstance(System.Type.GetType("complete.classpath.and.Foo"));System.Reflection.MethodInfomethod=foo2.GetType().GetMethod("PrintHello");method.Invoke(foo2,null);
Go
import"reflect"// Without reflectionf:=Foo{}f.Hello()// With reflectionfT:=reflect.TypeOf(Foo{})fV:=reflect.New(fT)m:=fV.MethodByName("Hello")ifm.IsValid(){m.Call(nil)}
Java
importjava.lang.reflect.Method;// Without reflectionFoofoo=newFoo();foo.hello();// With reflectiontry{// Alternatively: Object foo = Foo.class.newInstance();Objectfoo=Class.forName("complete.classpath.and.Foo").newInstance();Methodm=foo.getClass().getDeclaredMethod("hello",newClass<?>[0]);m.invoke(foo);}catch(Exceptione){// Catching ClassNotFoundException, NoSuchMethodException// InstantiationException, IllegalAccessException}
Perl
# Without reflectionmy$foo=Foo->new;$foo->hello;# orFoo->new->hello;# With reflectionmy$class="Foo"my$constructor="new";my$method="hello";my$f=$class->$constructor;$f->$method;# or$class->$constructor->$method;# with evaleval"new Foo->hello;";
PHP
// Without reflection$foo=newFoo();$foo->hello();// With reflection, using Reflections API$reflector=newReflectionClass('Foo');$foo=$reflector->newInstance();$hello=$reflector->getMethod('hello');$hello->invoke($foo);
Python
# Without reflectionobj=Foo()obj.hello()# With reflectionobj=globals()['Foo']()# globals() Return a dictionary representing the current global symbol table. getattr(obj,'hello')()# getattr(object, name) Return the value of the named attribute of object. # With evaleval('Foo().hello()')
R
# Without reflection, assuming foo() returns an S3-type object that has method "hello"obj<-foo()hello(obj)# With reflectionthe.class<-"foo"the.method<-"hello"obj<-do.call(the.class,list())do.call(the.method,alist(obj))
Ruby
# Without reflectionobj=Foo.newobj.hello# With reflectionclass_name="Foo"method_name=:helloobj=Object.const_get(class_name).newobj.sendmethod_name# With evaleval"Foo.new.hello"
^Brian Cantwell Smith, Procedural Reflection in Programming Languages, Department of Electrical Engineering and Computer Science, Massachusetts Institute of Technology, PhD dissertation, 1982.
Ira R. Forman, Nate Forman. Java Reflection in Action [Java反射实战] 1. Manning Publications Co. 2005年. ISBN 1-932394-18-4(英语).使用|accessdate=需要含有|url= (帮助)