class Foo {
static java.util.Hashtable lookup;
private static interface HANDLER_FUNC_T {
public void handlerFunc();
}
static {
lookup = new java.util.Hashtable();
lookup.put("CONNECT", new HANDLER_FUNC_T() {
public void handlerFunc() {
System.out.println("CONNECT");
}
});
lookup.put("TERMINATE", new HANDLER_FUNC_T() {
public void handlerFunc() {
System.out.println("TERMINATE");
}
});
lookup.put("GET", new HANDLER_FUNC_T() {
public void handlerFunc() {
System.out.println("GET");
}
});
// etc.
}
public static void main(String[] argv) {
((HANDLER_FUNC_T) lookup.get(argv[0])).handlerFunc();
}
}
Dieses Codesegment leistet inhaltlich das Selbe wie das nachfolgende C Programm:
/* define a new type as a pointer to a void function, that returns a void */
typedef void (*HANDLER_FUNC_T) (void) ;
typedef LOOKUP_T struct
{
char *msgString ;
HANDLER_FUNC_T handlerFunc ;
} ;
static LOOKUP_T level0[] = {
{ "CONNECT", HandleConnect}, /* this should always be the 1st entry */
{ "TERMINATE", HandleTerminate},
{ "GET", HandleGet},
{ "PUT", HandlePut},
{ "ACTION", HandleAction},
{ NULL, NULL} /* this MUST be the last entry */
} ;
int ActionString( char *string)
{
int i, done = 0 ;
/* lets loop through the table */
while( level0[ i].msgString != NULL && done == 0) {
/* check match */
if( strcmp( string, level0[ i].msgString) == 0) {
done = 1 ; /* show done */
(level0[ i].handler_func)() ; /* call the handler method */
}
i++ ; /* point to next message */
}
return done
}