原来还有这么微妙的设计,感叹下!太经典了,难怪java如此优美解决思路

原来还有这么微妙的设计,感叹下!!太经典了,难怪java如此优美
http://blog.****.net/dengxu11/article/details/6750006

佩服啊,还有那个this 我靠,要是我写我肯定想不到这么写, 我肯定这么写,当然我这么写必然看上去很垃圾。

return functions->GetVersion(&funcions)

但是这么写多不好看 由于类型的关系

我们不能这么写return functions->GetVersion(funcions) 而非得加个'&',可是大牛们一个this

return functions->GetVersion(this)
多简洁,又看不出破绽,佩服佩服。

顺便散点分
http://blog.****.net/dengxu11/article/details/6750006


------解决方案--------------------
探讨

说了好多了。。functions的地址 就是this。。。别搬C++那套,噢。。类型是那个就一定要那个类型的。。。人家函数已经在库里面了,它只认地址。这么写头文件是然C++可以调用的很自然而已,!!记住JVM 是c编译的 不是c++!!

------解决方案--------------------
我很好奇为什么不直接

int version;
或者
typedef struct JNIEnv
{
int version;
}JNIEnv;

C C++都可以使用
当然, 可能由于代码被你改写或者简化了原因, 所以撇开了这段代码的大环境来评价这段代码可能会出现偏差
但是我确信, 只要提出具体需求, 绝对能写出更好的代码

就这段代码来说, 我并没有觉得他有什么精妙之处
它即没有效率的提升又给阅读带来了困难

而你自己提出换了是你肯定传递(JNIEnv*)&functions而非this
其实两个结果是一样的
结构体内只有一个元素, this指针的值自然就等于第一个元素的地址
地址相同, 转成形参类型再去解引用都是一样的了

它用this不用&functions, 确实避免了一次类型转换,看似高明, 但回过头来想想, 这是由于整段代码都是他写的, 是他设计成了GetVersion函数需要一个 JNIEnv*参数, 所以我依然相信, 只要给出具体需求, 绝对能写出更好的代码
------解决方案--------------------
最近用Java写程序,很不爽...性能还是有很大的差距,把一些东西放到内存里面(Singleton),居然还是达不到预定的性能...很郁闷的干活...

用JNI也不行,因为JNI本身就比较耗时间了(本身要求在1秒钟之内就要完成的,如果是几秒钟,就可以通过JNI调用C的代码而得到性能上的补偿)...

对了,我顺便来接的分的。