Current Page:
NeXtMidas User's Guide
![]() ![]() |
||||||||||||||
Using KeyObject
The For example: nM> res mystr "hello world" nM> res mystr.charAt(2) O: MYSTR.CHARAT(2) = l nM> res mystr.class O: MYSTR.CLASS = class java.lang.String Finding the KeysThe simplified look-up of the keys is done as follows (see State Diagram for details):
When looking for methods to access
public only the public methods
in a public superclass or interface will be accessable.
Implementing Keyable
The
Implementing Chainable
The
State DiagramThe following is the detailed state diagram for the key lookup performed byKeyObject .
START | v +---------------------+ | Check for null | +---------------------+ | do: check to see if | [obj is null] | the ojbect is |---------------> return null | null | +---------------------+ | | [obj is not null] v +---------------------+ | Check for Table | | or KeyVector | +---------------------+ | do: check to see if | [obj is Table, KeyVector] | the object is |----> Table/KeyVector Access | a Table or a | | KeyVector | +---------------------+ | | [not Table, KeyVector] v +---------------------+ | Check for Keyable | +---------------------+ | do: check to see if | [obj is Keyable] | the object is |-----------+ | a Keyable | | +---------------------+ v | +---------------------+ | | Try get/set | | +---------------------+ [not null] | | do: Call getKey(..) |----> return value | | or setKey(..) and | | | and check for null | [null] | | return value. |----+ | +---------------------+ | | [not Keyable] | v | +---------------------+ | | Check for Array | | +---------------------+ [obj is Array] | | |----> Array Access | +---------------------+ | | [not Array] | | | | +-------------------------------------+ v v +---------------------+ | Find Members to | | Access | +---------------------+ [member found] | do: findMembers(..) |----> Member Access +---------------------+ | | [no members found] v +---------------------+ | Check for Chainable | +---------------------+ [obj is Chainable] | |---------> return findAndInvoke(nextLink,...) +---------------------+ | | [not chainable] v +---------------------+ | Check for Indexed | +---------------------+ [key is index value] | |------+ +---------------------+ | | v | +---------------------+ | | Check get or set | | +---------------------+ | | | | +---------------------+ | | | | | | [args.length==0] | | +-----> return getIndexed(obj,key) | | | | [args.length==1] | +--------> return setIndexed(obj,key,args[0]) | | [key is not index value] v ERRORTable/KeyVector Access START | v +---------------------+ | Determine get or set| +---------------------+ | do: determine if the| | access is a get | [get] | (args.length==0 or |----> return getKey(key) | searchOrder=GET) | [set] | or a set. |----> return setKey(key,args[0]) +---------------------+Array Access START | v +---------------------+ | Check for "getsize" | +---------------------+ | do: check to see if | [getSize] | key is "size" |----> return Array.getSize(obj) | or "getsize" | +---------------------+ |[not getsize] v +---------------------+ | Check get or set | +---------------------+ [args.length==0] | |----> return getIndexed(obj,key) | | [args.length==1] | |---->return setIndexed(obj,key,args[0]) +---------------------+Member Access START | v +---------------------+ | Determine if it is | | a method or a field | +---------------------+ | do: Check member | | type. | +---------------------+ | | [field] +---------------------+ +----------->| Check get or set | | +---------------------+ [args.length==0] | | |----> return field.get(..) | | | [args.length==1] | | |----> return field.set(..) | +---------------------+ | | [method] +---------------------+ +----------->| Determine if it is | | an invoke then index| +---------------------+ | do: "Invoke then get|[invoke then get] | indexed" is when |----> getIndexed(..) | args.length==1, | | searchOrder=GET, |[normal] | and method matches |----> method.invoke(..) +---------------------+ |
||||||||||||||