java的反映机制提供了调用方法的方法.在非映射代码中,如果不实例化就无法调用(非静态)方法.映射机制提供了java.lang.reflect.Method.invoke()方法.如下示例:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Locale;
import static java.lang.System.out;
import static java.lang.System.err;
public class Deet<T> {
private boolean testDeet(Locale l) {
out.format("Locale = %s, ISO Language Code = %s%n",
l.getDisplayName(),l.getISO3Language());
return true;
}
private int testFoo(Locale l) {return 0;}
private boolean testBar() {return true;}
public static void main(String... args) {
if(args.length !=4) {
err.format("Usage:java Deet <classname> <language> <country> <variant>%n");
return;
}
try {
Class<?> c = Class.forName(args[0]);
Object t = c.newInstance();
Method[] allMethods = c.getDeclaredMethods();
for(Method m : allMethods) {
String mname = m.getName();
if(!mname.startsWith("test")
||(m.getGenericReturnType() != boolean.class)) {
continue;
}
Type[] pType = m.getGenericParameterTypes();
if((pType.length != 1)
|| Locale.class.isAssignableFrom(pType[0].getClass())) {
continue;
}
out.format("invoking %s()%n", mname);
try{
m.setAccessible(true);
Object o = m.invoke(t,new Locale(args[1],args[2],args[3]));
out.format("%s() return %b%n",mname,(Boolean) o);
}
catch(InvocationTargetException x) {
Throwable cause = x.getCause();
err.format("invocation of %s failed: %s %n",
mname,cause.getMessage());
}
}//for
}catch(ClassNotFoundException x) {
x.printStackTrace();
}catch(InstantiationException x) {
x.printStackTrace();
}catch(IllegalAccessException x) {
x.printStackTrace();
}
}
}
分享到:
相关推荐
其次,虽然内存映射能提高读写速度,但它并不适用于所有情况,比如对于小文件或频繁的随机访问,传统的I/O方法可能会更快。最后,如果不小心处理,内存映射可能导致数据一致性问题,因为操作系统可能会延迟写入磁盘...
这种方法将文件内容直接映射到进程的虚拟地址空间,使得程序可以像操作内存一样操作文件,无需传统的读写文件操作。这种技术的优点包括快速的数据交换、简化并发访问和内存管理。 描述中提到的“小型数据库”可能是...
3. **调用DLL函数**:在完成上述步骤后,你可以在C#代码中像调用普通方法一样调用DLL中的函数。例如: ```csharp int result = YourFunctionName(123, "Hello"); ``` 4. **异常处理**:由于调用非托管代码可能会...
内存映射文件将硬盘上的文件直接映射到进程的虚拟地址空间中,使得程序可以像访问内存一样访问文件内容,而无需通过传统的读写文件系统调用。这一过程由操作系统的内存管理器负责,它会根据需要将文件的部分内容加载...
2. **映射和取消映射**:提供方法如`map()`和`unmap()`,分别用于映射文件到内存和取消映射。 3. **数据访问**:提供`getPointer()`返回映射后的内存指针,以及可能的`size()`方法获取文件大小,使得可以像操作数组...
传统方法读写大文件时,需要频繁地调用`ReadFile`和`WriteFile`函数,每次操作可能涉及磁盘I/O,这是非常耗时的。而内存映射文件后,文件数据可以直接在内存中处理,减少了磁盘的访问次数,尤其是在处理大量数据时,...
SVM的核心在于它的决策边界不是直接在原始特征空间中构建,而是通过一种称为“核技巧”的方法在高维特征空间中找到最优分界面。这个过程涉及到“核函数”、“核函数映射”、“核函数程序”、“核映射”和“特征映射...
JNA可以直接映射Java方法到C函数,而SWIG则生成C接口代码,可以用于任何C/C++编译器。 4. **添加DLL引用**:在C#项目中,你需要添加对生成的DLL的引用。这可以通过“项目” -> “引用” -> “添加引用” -> “浏览...
最后,"combine_total.m"可能是将所有这些映射的结果组合在一起,生成一个综合的展示或分析,而"total.m"可能是整个程序的主入口,负责调用各个子函数。 总结来说,这个压缩包提供了研究和可视化一维帐篷映射和二维...
本资源提供的"LabWindows_CVI调用外部程序的六种方法源代码"详细介绍了如何在CVI环境中与外部应用程序进行交互。 首先,让我们逐一探讨这六种方法: 1. **系统调用函数(system())**:这是最基础的方法,通过调用...
这可能涉及到调用UPNPAPI提供的函数,如`IGDDiscover`来发现网络上的通用即插即用设备,如路由器。 2. **获取路由器控制URL**:找到UPNP设备后,需要获取其控制URL,这通常在设备的XML描述文件中。这个URL将用于...
你可以创建`MATLABEngine`实例,然后调用它的`eval`方法来执行MATLAB命令,或者调用`feval`方法来执行已编译的MATLAB函数。 例如,假设你有一个MATLAB函数名为`myFunction.m`,在Java中调用的代码可能如下: ```...
在Pascal语言中,虽然不像C++那样直接提供内存管理的函数,但可以通过系统调用来实现内存映射的操作。比如,可以使用`VirtualAlloc`和`VirtualFree`这样的API函数来映射和释放内存。Pascal中的`CreateFileMapping`和...
消息映射就是定义这个关联关系的代码结构,它告诉MFC:“当收到这样的消息时,你应该调用哪个成员函数来处理”。 在MFC中,消息映射通常位于每个C++类的头文件中,以`BEGIN_MESSAGE_MAP`、`END_MESSAGE_MAP`宏定义...
反过来,让一个EXE文件调用另一个EXE,可以使用以下方法: 1. **启动新进程**:使用`CreateProcess`或`ShellExecute`函数来启动另一个EXE。这些函数允许你传递命令行参数,以便被调用的EXE可以接收并处理它们。 2....
3. 映射文件:调用`mmap`函数,指定文件描述符、偏移量、大小、保护模式和映射类型。 4. 使用映射的内存:现在可以像操作普通内存一样操作这部分映射的文件。 5. 释放映射:当不再需要映射时,使用`munmap`函数解除...
在Java中调用DLL通常有两种方法:使用JNI(Java Native Interface)和JNA(Java Native Access)。JNI需要编写C/C++的本地代码来作为桥梁,而JNA则允许在不编写本地代码的情况下直接调用DLL中的函数。 1. JNI(Java...
3. **JNI头文件生成**:在Java端,使用Java Native Access (JNA) 或者 `javah` 工具生成JNI头文件,这个文件定义了C语言的函数原型,这些函数会映射到Java的原生方法。 4. **C/C++桥接代码**:根据生成的JNI头文件...
其次,**C#调用动态库**是另一种增强C#应用功能的方法。动态链接库(DLL)是包含可重用代码的文件,可以被多个应用程序共享。在C#中,可以使用DllImport特性来导入非托管DLL,比如系统级API函数或第三方库。这通常...
3. **数据类型映射**:由于PB和C的数据类型可能不同,你需要确保正确的映射。例如,PB的`String`对应C的`LPCTSTR`,`Long`对应`int`。 4. **调用DLL**:在PB的代码中,你可以像调用任何其他PB函数一样调用这些外部...