Macro | Package: net.jlinker | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version

## def-java-class

Arguments: name supers statics fields slots &rest options

This macro defines a Lisp class that represents a Java class. Once a Lisp class is defined to represent a Java class, remote references to instances of the Java class will be instances of the corresponding Lisp class. As a result, Lisp methods may be defined.

If the name is a string or symbol, it is the name of the Java class and the corresponding symbol is the name of the Lisp class. If the name is a list, the first element is a symbol for the name of the Lisp class and the second element is a string or symbol that identifies a Java class. The name may also be a list of three or more elements; in this case, the first element is the name of the Lisp class, the second element is the name of the base Java class or interface, and the remaining elements are the names of derived Java classes. The derived Java classes must all inherit from the base Java class or interface. Any instances of the derived or base Java classes will be mapped to the Lisp class.

The second argument is a list of Lisp superclasses. This list will be augmented by adding the class `net.jlinker::java-class` at the end.

The third and fourth arguments are lists of static and class fields in the Java class. Each item is of the form

    (name [:accessor aname] [:reader rname] [:writer wname])

where name is again like the class name - a single string or symbol or a list of two. If the accessor, reader and writer components are omitted, the Lisp name of the field is defined as an accessor to the Java field. If any of the accessor, reader and writer components are specified, then those are the only accessors defined for the field.

The fifth argument is additional Lisp slots that are added to the class with no inspection of any kind. The final optional arguments are appended to the class definition.

### Examples

    (def-java-class (gcal "java.util.GregorianCalendar") ()
        (((gcal-friday "FRIDAY") :reader gcal-friday)
         ((gcal-ad     "AD")     :reader gcal-ad))
        ()
        ())

This form defines a Lisp class `gcal` that will be used to represent any remote references to instances of the Java class `java.util.GregorianCalendar`. The Lisp functions gcal-friday and gcal-ad (both of zero arguments) are accessors for the static fields FRIDAY and AD in the Java class.

    (defclass application-buffer () ((source :initform "Lisp")))

    (def-java-class (string-buffer "java.lang.StringBuffer")
    (application-buffer)
        ()
        ()
        ((source :initform "Java")))

This form defines a Lisp class `string-buffer` that will be used to represent any remote references to instances of the Java class `java.lang.StringBuffer`. The slot named source does not exist in the Java object, but is present on every remote reference to a Java object of that class. This example also shows how a remote reference may inherit from other Lisp classes.

See jlinker.htm for more information on the jLinker facility.

Copyright (c) 1998-2019, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 8.2 page.
Created 2012.5.30.

|  | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version