···143143 *
144144 * @param classname The class name, fully qualified, with namespaces
145145 * delimited by `/`.
146146+ * @param clazz The jclass object for the class in question, if known.
146147 */
147147- explicit MetaBase(const char *classname)
148148- : classname_(classname), clazz_(classname_) {}
148148+ explicit MetaBase(const char *classname, jni::jclass clazz = nullptr)
149149+ : classname_(classname), clazz_() {
150150+ if (clazz != nullptr) {
151151+ // The 0 makes it a global ref.
152152+ clazz_ = jni::Class{clazz, 0};
153153+ } else {
154154+ clazz_ = jni::Class{classname};
155155+ }
156156+ }
149157150158 private:
151159 const char *classname_;
···192200 *
193201 * @param classname The class name, fully qualified, with namespaces
194202 * delimited by `/`.
203203+ * @param clazz The jclass object for the class in question, if known.
195204 */
196196- explicit MetaBaseDroppable(const char *classname)
197197- : classname_(classname), clazz_(classname_) {}
205205+ explicit MetaBaseDroppable(const char *classname,
206206+ jni::jclass clazz = nullptr)
207207+ : classname_(classname), clazz_() {
208208+ if (clazz != nullptr) {
209209+ // The 0 makes it a global ref.
210210+ clazz_ = jni::Class{clazz, 0};
211211+ } else {
212212+ clazz_ = jni::Class{classname};
213213+ }
214214+ }
198215199216 /*!
200217 * Gets a reference to the class object, but is non-null only if it's still