diff --git a/Makefile b/Makefile index cf9a76f..bf4a09a 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,9 @@ build_ext: python setup.py build_ext --inplace -f +html: + $(MAKE) -C docs html + tests: build_ext cd tests && javac org/jnius/HelloWorld.java cd tests && javac org/jnius/BasicsTest.java diff --git a/docs/source/api.rst b/docs/source/api.rst index bc01e9b..2fcee27 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -7,8 +7,8 @@ API This part of the documentation covers all the interfaces of Pyjnius. -Java* Objects -------------- +Reflection Classes +------------------ .. class:: JavaClass @@ -19,7 +19,7 @@ Java* Objects You need to define at minimun the :data:`__javaclass__` attribute, and set the :data:`__metaclass__` to :class:`MetaJavaClass`. - So the minimun class definition would look like:: + So the minimum class definition would look like:: from jnius import JavaClass, MetaJavaClass @@ -34,8 +34,8 @@ Java* Objects .. attribute:: __javaclass__ - Represent the Java class name, in the format org/lang/Class. (eg: - 'java/util/Stack') + Represent the Java class name, in the format 'org/lang/Class'. (eg: + 'java/util/Stack'), not 'org.lang.Class'. .. attribute:: __javaconstructor__ @@ -94,10 +94,12 @@ Java* Objects Signature: (Ljava/lang/Object;)I } + .. class:: JavaStaticMethod Reflection of a static Java method. + .. class:: JavaField Reflection of a Java field. @@ -116,3 +118,54 @@ Java* Objects The name associated to the method is automatically set from the declaration within the JavaClass itself. + +.. class:: JavaStaticField + + Reflection of a static Java field + + +.. class:: JavaMultipleMethod + + Reflection of a Java method that can be called from multiple signatures. + For example, the method `getBytes` in the `String` class can be called + from:: + + public byte[] getBytes(java.lang.String) + public byte[] getBytes(java.nio.charset.Charset) + public byte[] getBytes() + + Let's see how you could declare that method:: + + class System(JavaClass): + __javaclass__ = 'java/lang/String' + __metaclass__ = MetaJavaClass + + getBytes = JavaMultipleMethod([ + '(Ljava/lang/String;)[B', + '(Ljava/nio/charset/Charset;)[B', + '()[B']) + + Then, when you will try to access to this method, we'll take the best + method available according to the type of the arguments you're using. + Internally, we are calculating a "match" score for each available + signature, and take the best one. Without going into the details, the score + calculation look like: + + * a direct type match is +10 + * a indirect type match (like using a `float` for an `int` argument) is +5 + * object with unknown type (:class:`JavaObject`) is +1 + * otherwise, it's considered as an error case, and return -1 + + +Reflection functions +-------------------- + +.. function:: autoclass(name) + + Return a :class:`JavaClass` that represent the class passed from `name`. + The name must be written in the format: `a.b.c`, not `a/b/c`. + + >>> from jnius import autoclass + >>> autoclass('java.lang.System') + +