在Java6中使用2个通用参数实现回调接口
错误消息是 错误:(66,22)错误:不兼容类型:匿名在Java6中使用2个通用参数实现回调接口,java,function,generics,interface,callback,Java,Function,Generics,Interface,Callback,错误消息是 错误:(66,22)错误:不兼容类型:匿名回调 无法转换为回调 Java 6不支持通用返回类型? 还是我遗漏了什么 ================================================================= 更新 我发现这些代码可以编译。但我不能确定哪一个是正确的 logger = MetricLogger.getInstance(app); // doesn't compile logger.write(new Callback<Lo
回调
无法转换为回调
Java 6不支持通用返回类型?还是我遗漏了什么 ================================================================= 更新 我发现这些代码可以编译。但我不能确定哪一个是正确的
logger = MetricLogger.getInstance(app);
// doesn't compile
logger.write(new Callback<LogFormat, Long>() {
@Override
public Long execute(LogFormat arg) {
return null;
}
});
//解决方案1
公共接口回调{
R执行(T参数)
}
新回调函数(){
@凌驾
公共长执行(LogFormat arg){…}
}
//解决方案2
公共接口回调{
R执行(T参数)
}
新回调函数(){
@凌驾
公共长执行(LogFormat arg){…}
}
Logger类上的write方法可能有如下签名:
void write(callbacklogger.write()方法似乎只接受回调。而且提供的代码似乎与提供的错误不匹配:Callback VSCallback@Mikey,你编译代码了吗?没有-我不知道MetricLogger是从哪里来的:请看Prims的回答我认为Prims的回答是正确的:正确的解决方案取决于使用情况。
logger = MetricLogger.getInstance(app);
// doesn't compile
logger.write(new Callback<LogFormat, Long>() {
@Override
public Long execute(LogFormat arg) {
return null;
}
});
// Solution 1
public interface Callback<T> {
<R> R execute(T arg)
}
new Callback<LogFormat>() {
@Override
public Long execute(LogFormat arg) { ... }
}
// Solution 2
public interface Callback {
<T, R> R execute(T arg)
}
new Callback<LogFormat>() {
@Override
public <LogFormat, Long> Long execute(LogFormat arg) { ... }
}