001import gudusoft.gsqlparser.compiler.builtinFunction.TOracleBuiltFunction; 002 003import java.lang.reflect.Method; 004 005public class dynamicFunction { 006 public static void main(String args[]) throws Exception{ 007 // System.out.println("test dynamic function call"); 008 // 找到预定义的函数,传入参数进行调用 009 010// dynamicFunction obj = new dynamicFunction(); 011// 012// Class xxxClass = Class.forName("dynamicFunction"); 013// Method xxxMethod = xxxClass.getMethod("myPrint", new Class[]{}); 014// Method xxxMethod2 = xxxClass.getMethod("myPrint", new Class[]{String.class}); 015// 016// xxxMethod.invoke(obj); 017// xxxMethod2.invoke(obj,"ppp"); 018 019// Method xxxMethod = searchMethod("myPrint",new Class[]{String.class}, String.class); 020// if (xxxMethod != null) xxxMethod.invoke(obj,"hello word"); 021// Method xxxMethod2 = searchMethod("myPrint",new Class[]{}, String.class); 022// if (xxxMethod2 != null) xxxMethod2.invoke(obj); 023 024 TOracleBuiltFunction oracleBuiltFunction1 = TOracleBuiltFunction.getOracleBuiltFunctionInstance(); 025// TOracleBuiltFunction oracleBuiltFunction2 = TOracleBuiltFunction.getOracleBuiltFunctionInstance(); 026// System.out.println(oracleBuiltFunction1); 027// System.out.println(oracleBuiltFunction2); 028 029 Method xxxMethod = oracleBuiltFunction1.searchMethod("dbms_output","put_line",new Class[]{String.class}, void.class); 030 if (xxxMethod != null) { 031 xxxMethod.invoke(oracleBuiltFunction1,"hello word"); 032 }else{ 033 System.out.println("put_line function is not found"); 034 } 035 } 036 037 public String myPrint(){ 038 System.out.println("call myPrint with no argument"); 039 return "x"; 040 } 041 042 public String myPrint(String str){ 043 System.out.println("call myPrint: "+str); 044 return str; 045 } 046 047// public static Method searchMethod(String functionName, Class[] parameterTypes, Class<?> returnType){ 048// Method ret = null; 049// 050// Class xxxClass = null; 051// try { 052// xxxClass = Class.forName("dynamicFunction"); 053// } catch (ClassNotFoundException e) { 054// // throw new RuntimeException(e); 055// return null; 056// } 057// 058// Method[] allMethods = xxxClass.getDeclaredMethods(); 059// 060// for (Method m : allMethods) { 061// if (m.getName().equals(functionName)){ 062// if (returnType != m.getReturnType()){ 063// continue; 064// } 065// if (parameterTypes.length != m.getParameterTypes().length){ 066// continue; 067// } 068// 069// if ((parameterTypes.length == 0) && (m.getParameterTypes().length == 0)){ 070// System.out.println("Find function: "+m.getName()+" with no argument"); 071// ret = m; 072// break; 073// } 074// 075// int i=0; 076// while (i<parameterTypes.length){ 077// if (m.getParameterTypes()[i] != parameterTypes[i]){ 078// break; 079// } 080// i++; 081// } 082// 083// if (i == parameterTypes.length){ 084// System.out.println("Find function: "+m.getName()+" with "+ parameterTypes.length +" arguments"); 085// ret =m; 086// break; 087// } 088// } 089// } 090// return ret; 091// } 092 093 094 095 096}