-
Notifications
You must be signed in to change notification settings - Fork 256
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improvement: autoclass() when class not in boot classpath #534
Comments
I think you mean So, you'd want to do everything autoclass does, but using a class reference instead of the fqn of the class. Maybe autoclass could be refactored to do the name lookup part (https://github.com/kivy/pyjnius/blob/master/jnius/reflect.py#L220-L233), and delegate the reflection part to another function, that you could call with your class object directly if you wish so? |
"I'm trying to instantiate a class that I have a java.lang.Class reference to." Yes, your proposal may work - a variant of (1). Will give a try in due course. Thanks. |
Cool, autoclass is quite big, so splitting it a bit won't hurt. |
I have committed my WIP to https://github.com/cmacdonald/pyjnius/tree/reflect_class_issue534 This:
For cases where the returned object is not part of the boot classpath, convert_jobject_to_python() will have to be altered to get the actual Class object, rather than JNI's FindClass. I /think/ that this could be obtained from the jobject itself - i.e. instantiate it as a Object, call getClass() then reinstantiate it using that object. |
took the liberty to open #539 from it to review more easily. |
I have a slight problem: I'm trying to instantiate a class that is have a java.lang.Class reference to. This was provided by a ClassLoader accessing a classpath different from "boot time". Traceback attached below.
However, JNI's FindClass() only provides jclass for classes in the boot classpath, i.e. using
ClassLoader.getSystemClassLoader()
.I dont think we need FindClass(), as we already have access to the Class object. We just need to instantiate it from that Class object.
autoclass()
providing the Class object directly, i.e.Or being able to pass a ClassLoader to autoclass? Dont think this would work in the generic case.
Or detecting when a Class object is being instantiated into Python, add that to
jclass_register
Traceback.
The text was updated successfully, but these errors were encountered: