2021SC@SDUSC
Hippy项目源码分析第六周
layout/android/jni
scoped_java_ref.h
// Generic base class for ScopedJavaLocalRef and ScopedJavaGlobalRef. Useful
// for allowing functions to accept a reference without having to mandate
// whether it is a local or global type.
// ScopedJavaLocalRef和ScopedJavaGlobalRef的通用基类
// 用于无论是本地类型还是全局类型,允许函数接受引用而无需授权
template <typename T>
class JavaRef : public JavaRef<jobject> {
public:
JavaRef() {
}
explicit JavaRef(std::nullptr_t) : JavaRef<jobject>(nullptr) {
}
~JavaRef() {
}
T obj() const {
return static_cast<T>(JavaRef<jobject>::obj()); }
protected:
JavaRef(JNIEnv* env, T obj) : JavaRef<jobject>(env, obj) {
}
private:
// DISALLOW_COPY_AND_ASSIGN(JavaRef);
};
// Holds a local reference to a JNI method parameter.
// Method parameters should not be deleted, and so this class exists purely to
// wrap them as a JavaRef<T> in the JNI binding generator. Do not create
// instances manually.
// 保存对 JNI 方法参数的本地引用。
// 不应删除方法参数,
// 因此此类存在纯粹是为了将它们包装为 JNI 绑定生成器中的 JavaRef<T>。
// 不要手动创建实例。
template <typename T>
class JavaParamRef : public JavaRef<T> {
public:
// Assumes that |obj| is a parameter passed to a JNI method from Java.
// Does not assume ownership as parameters should not be deleted.
// 假设 |obj| 是从 Java 传递给 JNI 方法的参数。
// 不承担所有权,因为参数不应被删除。
JavaParamRef(JNIEnv* env, T obj) : JavaRef<T>(env, obj) {
}
// Allow nullptr to be converted to JavaParamRef. Some unit tests call JNI
// methods directly from C++ and pass null for objects which are not actually
// used by the implementation (e.g. the caller object); allow this to keep
// working.
// 允许将 nullptr 转换为 JavaParamRef。
// 一些单元测试直接从 C++ 调用 JNI 方法,
// 并为实现实际上没有使用的对象(例如调用者对象)传递 null;
// 允许它继续工作。
explicit JavaParamRef(std::nullptr_t) : JavaRef<T>(nullptr) {
}
~JavaParamRef() {
}
// TODO(torne): remove this cast once we're using JavaRef consistently.
// http://crbug.com/506850
operator T()