예제 #1
0
bool class_t::isAssignableFrom (class_t* other) {
  ___CBTPUSH;
  bool result;
  if (other == this) {
    result = true;
  } else if (other->superclass == NULL) {
    result = false;
  } else {
    result = isAssignableFrom (other->superclass);
  }
  ___CBTPOP;
  return result;
}
예제 #2
0
파일: object_cast.hpp 프로젝트: mauve/jni
template <typename Target> Target object_cast(const java::lang::Object &obj) {
  auto target_name = jni::class_name<Target>::name();
  auto target_cls = java::lang::Class::forName(target_name);
  auto source_cls = obj.getClass();

  if (!target_cls.isAssignableFrom(source_cls)) {
    // TODO: implement ClassCastException
    throw std::bad_cast("cannot cast " + source_cls.getName() +
                        " to " target_cls.getName());
  }

  global_ref<raw::object_ref> ref_copy{obj._ref};
  return Target{std::move(ref_copy)};
}