이 글은 주로 Java의 반사 메커니즘(배열 매개변수 포함)에 대한 자세한 설명에 대한 관련 정보를 소개합니다. 이 부분을 이해하고 익히는 데 도움이 되기를 바랍니다. Java 메커니즘의 반사(배열 매개변수 포함)
Java의 반사는 제가 항상 매우 좋아했던 것입니다. 이를 통해 프로그램의 유연성이 크게 향상될 수 있고 다양성도 많이 향상되었기 때문입니다. 나는 성찰의 원리를 거창하게 소개하고 싶지는 않습니다. 인터넷에서 검색해 보면 많은 것을 찾을 수 있습니다. (아래 부록에서만 소개하겠습니다)
리플렉션은 동적(또는 준동적) 언어로 간주되는 Java의 핵심 속성입니다. 이 메커니즘을 사용하면 프로그램은 수정자(예: public, static 등), 슈퍼클래스(예: Object), 구현된 인터페이스(예: Cloneable), 필드와 메소드에 대한 모든 정보를 포함하고, 런타임에 필드의 내용을 변경하거나 메소드를 호출할 수 있습니다 여기서 제가 말씀드리고 싶은 것은 문자열에 따라 원하는 작업을 수행하면(동적으로 실행하는 것도 포함) 해당 메서드, 해당 클래스 생성), 데이터를 전송할 때 대부분 문자열(HTTP, 소켓) 등을 전송합니다. 이러한 문자열을 받으면 이러한 문자열의 내용을 기반으로 해당 작업을 수행합니다. 문제는 원격으로 메서드를 호출할 수 있다는 것입니다(클라이언트는 지정된 문자열을 보내고 서버가 리플렉션을 기반으로 해당 메서드를 실행하도록 합니다). . . 실제로 저도 그런 프로젝트를 진행한 적이 있습니다. 클라이언트(Java 언어로 작성되지 않음)는 소켓을 사용하여 서버(Java로 작성됨) 메소드를 호출하고 매개변수를 직접 전달할 수도 있습니다. 이는 모두 Java의 리플렉션 기술을 기반으로 구현됩니다. . 좋아, 나머지에 대해 이야기해보자. 기본 반사 방법은 다음과 같다./** * @(#)TestInt.java * * @author soda E-mail:sujun10@21cn.com * @version 1.0 * <br>Copyright (C), 2007 soda.C * <br>This program is protected by copyright laws. * <br>Date:2007.4 */ import java.lang.reflect.Method; public class TestInt { //测试方法 public String test(String name,int i) { System.out.println("name:" + name); System.out.println(i); return "反射成功!"; } public static void main(String[] args) { try { //获取class文件,可以Class.for("Test")获取,这样也可以根据字符串生成类啦 Class te = TestInt.class; Class[] cl = new Class[2]; //添加参数类型 cl[0] = String.class; cl[1] = int.class; System.out.println("11111111"); //根据public的方法,以及参数,参数是Class[]形式 Method method = te.getMethod("test", cl); System.out.println("222222222222"); //开始填充参数 Object[] params = new Object[2]; //params[0] = new String("soda"); params[0] = new String("soda"); params[1] = new Integer(23); System.out.println("22222222222"); //获取该class的实例 Object obj = te.newInstance(); //进行方法调用 Object result = method.invoke(obj, params); System.out.println("结果:" + result); } catch (Exception e) { System.out.println(e); } } }
원하는 결과를 넣으면 다른 곳에서 전달되는 데이터가 된다. )
/** * @(#)Test.java * * @author soda E-mail:sujun10@21cn.com * @version 1.0 * <br>Copyright (C), 2007 soda.C * <br>This program is protected by copyright laws. * <br>Program Name:FlashSyncServer * <br>Date:2007.1 */ import java.lang.reflect.Method; //这里我就不做什么解释了,和前面的几乎一样,大家也可以自己去查查api,Class类的api public class Test { public void test(double[] dou) { System.out.println(dou.length); System.out.println(dou[0]); } public static void main(String[] args) throws Exception { try { Class[] cl = new Class[1]; cl[0] = double[].class; System.out.println("cl[0]:" + cl[0]); Object[] in = new Object[1]; //注意这里,不是Double[],而是double[]。这里不能用对象数组 double[] db = new double[1]; db[0] = 100.0; in[0] = db; Class te = Test.class; Method method = te.getMethod("test", cl); Object obj = te.newInstance(); Object objs = method.invoke(obj, in); } catch (Exception e) { System.out.println(e); } } }
자 기본은 이렇습니다. 아무리 복잡한 프로그램이라도 기초부터 진화한 것입니다. 여기서 많이 배웠어요 :)
위 내용은 Java의 배열 매개변수를 포함하는 반사 메커니즘에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!