特別な方法でジェネリックにしたいデコレーターがあります。
使用法:
new ExceptionHandler() {
public <T extends IrcEvent> void doIt( T msg, IrcBotProxy pircBotProxy ) throws Throwable {
plugin.onMessage( msg, pircBotProxy );
}
}.handle( msg, this.pircBotProxy );
特定のサブタイプ - を取得するT
から を推論したいと思います。.handle(...)
IrcEvMsg
そんなことがあるものか?ExceptionHandler
または、使用する型でパラメータ化する必要がありますか? (Java 7)
ハンドラーコード: (この方法ではコンパイルされません - 「例外ハンドラーは実装されていませんdoIt(...)
」と表示されます)
public abstract class ExceptionHandler {
public <T extends IrcEvent> void handle( /*IIrcPluginHook plugin,*/ T evt, IrcBotProxy pircBotProxy ) {
try {
this.doIt( evt, pircBotProxy );
}
catch( NullPointerException ex ) {
log.error( "Plugin misbehaved: " + ex, ex );
}
catch ( Throwable ex ) {
if( System.getProperty("bot.irc.plugins.noStackTraces") == null ) {
log.error("Plugin misbehaved: " + ex.getMessage(), ex);
} else {
log.error("Plugin misbehaved: " + ex);
if (ex.getCause() != null) {
log.error(" Cause: " + ex.getCause());
}
}
}
}
public abstract <T extends IrcEvent> void doIt( T event, IrcBotProxy pircBotProxy ) throws Throwable;
}// class