Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Reflexionsmechanismus mit Array-Parametern in Java

Detaillierte Erläuterung des Reflexionsmechanismus mit Array-Parametern in Java

黄舟
黄舟Original
2017-10-12 10:10:421142Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zum Reflexionsmechanismus (einschließlich Array-Parametern) in Java vorgestellt. Ich hoffe, dass dieser Artikel jedem helfen kann, diesen Teil des Inhalts zu verstehen und zu beherrschen.

Ausführliche Erklärung des Reflexionsmechanismus in Java (einschließlich Array-Parameter)

Die Reflexion von Java hat mir schon immer sehr gut gefallen, da sich damit die Flexibilität des Programms erheblich erhöhen lässt, und gleichzeitig wurde auch die Vielseitigkeit stark verbessert. Ich möchte das Prinzip der Reflexion nicht groß vorstellen. Suchen Sie einfach im Internet und Sie werden viele davon finden. (Ich werde es nur im Anhang unten vorstellen)

Reflexion ist eine Schlüsseleigenschaft von Java, das als dynamische (oder quasi-dynamische) Sprache betrachtet wird. Dieser Mechanismus ermöglicht es dem Programm, zur Laufzeit die internen Informationen jeder Klasse mit einem bekannten Namen über die Reflection-APIs abzurufen, einschließlich ihrer Modifikatoren (z. B. öffentlich, statisch usw.), ihrer Superklasse (z. B. Objekt) und implementierten Schnittstellen (z. B Klonbar) und enthält alle Informationen zu Feldern und Methoden und kann den Inhalt von Feldern ändern oder Methoden zur Laufzeit aufrufen

Hier möchte ich sagen, dass wir, wenn wir auf der Grundlage von Zeichenfolgen tun, was wir wollen (einschließlich Dynamische Ausführung der Korrespondenzmethode, Generierung der entsprechenden Klasse. Wenn wir Daten übertragen, übergeben die meisten von ihnen Zeichenfolgen (HTTP, Socket) usw. Wenn wir diese Zeichenfolgen empfangen, führen wir die entsprechenden Aktionen basierend auf dem Inhalt dieser Zeichenfolgen aus. Das ist eine sehr gute Sache: Sie können Methoden remote aufrufen (der Client sendet eine bestimmte Zeichenfolge und lässt den Server die entsprechende Methode basierend auf der Reflexion ausführen). . . Tatsächlich habe ich auch an einem solchen Projekt gearbeitet. Der Client (nicht in Java geschrieben) verwendet Socket, um die Servermethode (in Java geschrieben) aufzurufen, und kann auch Parameter direkt übergeben, die auf der Reflexionstechnologie von Java basieren . Okay, lasst uns über den Rest sprechen. Das Folgende ist die grundlegendste Methodenüberlegung


/**
 * @(#)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);
    }
    
  }
}

, wie Sie sehen können Stellen Sie sich das gewünschte Ergebnis vor, indem Sie diese Zeichenfolgen in Daten umwandeln, die von anderen Stellen übergeben werden:)

Eine andere Methode verfügt über Array-Reflexion. Ich habe sie untersucht und festgestellt, dass es einen kleinen Unterschied gibt. Bitte lesen Sie alle sorgfältig durch


/**
 * @(#)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);
    }
    
  }
}

Okay, die Grundlagen sind so, egal wie komplex das Programm ist, es hat sich aus einer Grundlage entwickelt. Ich habe hier viel gelernt :)

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Reflexionsmechanismus mit Array-Parametern in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn