Rust 变量有不同的生存期,而它们应该具有相同的生存期

Rust 变量有不同的生存期,而它们应该具有相同的生存期,rust,Rust,为了学习生锈,我正在写一个包装JNI。我遇到了很多终生的问题,并勇敢地与编译器斗争以解决它们,但有了这个问题,我就放弃了。问题出在这里 现在,JNI是Java虚拟机的接口,因此每个Java对象都必须绑定到VM。为了做到这一点,我创建了“VM指针”类型的JavaVM,它主要只是指针的包装器和创建JavaEnv对象的接口,它们只是JNIEnv*的包装器,也是大多数JNI方法的更安全接口的提供者 为了声明JavaEnv对象绑定到VM,我执行了以下操作: pub结构JavaEnv, ... } 现在,

为了学习生锈,我正在写一个包装JNI。我遇到了很多终生的问题,并勇敢地与编译器斗争以解决它们,但有了这个问题,我就放弃了。问题出在这里

现在,JNI是Java虚拟机的接口,因此每个Java对象都必须绑定到VM。为了做到这一点,我创建了“VM指针”类型的JavaVM,它主要只是指针的包装器和创建JavaEnv对象的接口,它们只是JNIEnv*的包装器,也是大多数JNI方法的更安全接口的提供者

为了声明JavaEnv对象绑定到VM,我执行了以下操作:

pub结构JavaEnv,
...
}
现在,如果我理解正确,所有JavaEnv对象都将在生命周期内绑定到某个JavaVM对象,并且不会超过它,这正是我想要的

JavaEnv——是一个用于操作java对象(以及其他一些东西)的接口。现在,所有类型的JNI对象都实现了一个特性:

pub-trait-JObject{
环境:&'a JavaEnv{
env:&'a JavaEnv>PartialEq for JavaObject>PartialEq for JavaClass{
fn eq(自身和其他:&R)->bool{
self.get_env()是同一个对象(self,other)
}
}

impl>PartialEq for JavaClass,T2:'b+JObject我认为您的基本前提存在问题。请查看以下示例代码:


fn除了最后两个断言外,所有断言都是编译的吗?很难深入研究这一点,因为您只提供了部分实现(考虑到复杂性,这是可以理解的)。不确定这是否有帮助,但是:
get\u class()或者,你可以考虑注释如下:<代码> T1:'AA+JObjeC.I我认为JVM使用单模式,你可以从任何地方得到它,用<代码> GETJVM < /代码>或某物。粗略的Google似乎支持:@德尔南,是的,这是真的。@ ArtemGr,这就是为什么。我提供了一个代码链接:它没有那么大和复杂。
fn get_class(&'a self,_cap:&Capability)->JavaClass