java - Java Lambda 的 ArrayIndexOutOfBoundsException
问题描述
我正在尝试将我的代码转换为 lambda 版本,并且在构建代码时出现java.lang.ArrayIndexOutOfBoundsException: 18异常。
这是工作代码:
private void run(){
Producer<String, String> producer = (Producer<String, String>) new KafkaProducer();
producer.send(null, new Callback() {
public void onCompletion(RecordMetadata metadata, Exception e) { }
});
}
此代码给出了错误:
private void run(){
Producer<String, String> producer = (Producer<String, String>) new KafkaProducer();
producer.send(null, (metadata,e) -> { });
}
这是错误消息:
java.lang.ArrayIndexOutOfBoundsException: 18
at aQute.lib.osgi.Clazz.parseClassFile(Clazz.java:412)
at aQute.lib.osgi.Clazz.parseClassFile(Clazz.java:333)
at aQute.lib.osgi.Clazz.parseClassFileWithCollector(Clazz.java:323)
at aQute.lib.osgi.Clazz.parseClassFile(Clazz.java:313)
at aQute.lib.osgi.Analyzer.analyzeJar(Analyzer.java:1646)
at aQute.lib.osgi.Analyzer.analyzeBundleClasspath(Analyzer.java:1534)
at aQute.lib.osgi.Analyzer.analyze(Analyzer.java:115)
at aQute.lib.osgi.Builder.analyze(Builder.java:296)
at aQute.lib.osgi.Analyzer.calcManifest(Analyzer.java:292)
at aQute.lib.osgi.Builder.build(Builder.java:68)
at org.apache.felix.bundleplugin.BundlePlugin.buildOSGiBundle(BundlePlugin.java:375)
at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:270)
at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:224)
at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:215)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:193)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
[ERROR] Error building bundle com.wso2telco:logging-extension:bundle:3.0.0 : Exception: 18
[ERROR] Error building bundle com.wso2telco:logging-extension:bundle:3.0.0 : Invalid class file: MessageSender$KafkaDataPublisher.class
[ERROR] Error(s) found in bundle configuration
请注意,为简化起见,大部分代码已被删除。
简化后的完整代码:(这是工作代码)
public class MessageSender {
ExecutorService executorService = null;
public MessageSender(ExecutorService executorService) {
this.executorService = executorService;
}
public void sendMessage(String transactionLog) {
Runnable worker = new KafkaDataPublisher();
executorService.execute(worker);
}
public static class KafkaDataPublisher implements Runnable {
@Override
public void run() {
Producer<String, String> producer = (Producer<String, String>) new KafkaProducer();
producer.send(null, new Callback() {
public void onCompletion(RecordMetadata metadata, Exception e) {}
});
}
}
}
版本:
爪哇 8
解决方案
你有没有试过这样:
private void run(){
Producer<String, String> producer = (Producer<String, String>) new KafkaProducer();
producer.send(null, (RecordMetadata metadata, Exception e) -> { });
}
推荐阅读
- testng - 如何在 Cypress 中添加测试用例分组
- github-actions - 我应该使用 MarketPlace 操作而不是普通的 bash `cp` 命令来复制文件吗?
- typescript - 在客户端和服务器之间共享类型
- python - 蟒蛇函数。如果键是今天的日期,则从字典中输出键列表
- python - 在两个 DataFrame 之间执行多个 Pandas 查找的最佳方法
- python - 如何在 TKinter 中打开一个新窗口,然后向其中添加按钮?
- string - 添加 str no_std 锈
- javascript - 使用 ReactJS 的两个组件之间的通信
- ios - 使用框架启动应用程序时出错 - Xcode
- c# - 无法分配给“ImpactReceiver”,因为它是“方法组”