Printable
For an actual type parameter Person
this factory generates a class PrintablePerson that extends
class Person. PrintablePerson has a public print()
method that prints out for an object all the values of its public member
variables.
Factory/Java Source
The source can be found in the Factory/Java .zip-archive in factory/classes/examples/Printable.factory:
<param> <var> T </var> </param>
package test;
public class
<apply>
<const> "Printable" </const>
<method> concat </method>
<args>
<apply>
<class>
factory.Toolbox </class>
<method>
getRelativeName </method>
<args>
<var> T </var>
</args>
</apply>
</args>
</apply>
extends <var> T </var>
{
public void print() {
// iterate over attributes of T
<for> <var> I
</var>
<apply>
<var> T
</var>
<method>
getFields </method>
</apply>
<body>
System.out.println(
<literal>
<apply>
<var> I </var>
<method> getName </method>
</apply>
</literal>
+": "+
this.
<apply>
<var> I </var> <method>
getName </method>
</apply>
);
</body>
</for>
}
}
Test Program
The following unparameterized factory
can be found in factory/src/test/PrintableTest.factory in the
Factory/Java .zip-archive. It applies factory Printable to
class Person, instantiates an object
of the resulting class PrintablePerson, sets some of its
attributes to arbitrary values and uses its print() method.
package test;
class PrintableTest {
public static void main(String argv[]) {
<let> <var> T
</var>
<apply>
<factory> examples/Printable </factory>
<args>
<const> test.Person </const> </args>
</apply>
<body>
<var> T
</var> p = new <var> T </var>();
p.name = "Mr.
Z";
p.plz = 4711;
p.print();
</body> </let>
}
}
This factory can be compiled in the factory directory
with
java -classpath classes factory.Factory -javad src -classd classes src/test/PrintableTest
and run with
java -classpath classes test.PrintableTest