dcm*_*vva 3 c++ java generics java-native-interface
我正在使用JNI,我必须将一些泛型类型传递给C++.我坚持如何在C++方面处理这个问题
HashMap<String, Double[]> data1 ;
ArrayList<ArrayList<String>> disc ;
Run Code Online (Sandbox Code Playgroud)
我是JNI的新手,环顾四周但找不到多少帮助.有人可以帮助我如何为此编写JNI代码.任何对网上资料的提及也会非常有帮助.
简答:你做不到.
答案很长:类型擦除:http://download.oracle.com/javase/tutorial/java/generics/erasure.html
考虑一个参数化的实例ArrayList<Integer>.在编译时,编译器会检查您是否Integer在数组列表实例中放置了与其兼容的东西.
但是,也是在编译时(以及语法检查之后),编译器剥离了类型参数,渲染ArrayList<Integer>到Arraylist<?>等效ArrayList<Object>或简单ArrayList(如在JDK之前5次).
后一种形式是JNI所期望的(由于历史原因以及由于Java中实现泛型的方式...再次,键入擦除.)
记住,一个ArrayList<Integer>是a ArrayList.因此,您可以将ArrayList<Integer>JNI 传递给JNI ArrayList.相反的情况并不一定如此,因为您可能会从JNI中获得一些与您的参数化的通用算法不兼容的东西.
此时,您正在跨越类型化,参数化域(您的泛型)和无类型域(JNI)之间的障碍.你必须很好地封装那个障碍,你必须添加胶水代码和错误检查/错误处理代码来检测何时/如果事情不能很好地转换.
| 归档时间: |
|
| 查看次数: |
5167 次 |
| 最近记录: |