微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java Lambda 的 ArrayIndexOutOfBoundsException

如何解决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,(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>) new KafkaProducer();
          producer.send(null,new Callback() {
              public void onCompletion(RecordMetadata Metadata,Exception e) {}
        });
       }
    }

}

版本:

Java 8

解决方法

你有没有试过这样:

private void run(){
    Producer<String,String> producer = (Producer<String,String>) new KafkaProducer();
    producer.send(null,(RecordMetadata metadata,Exception e) -> { });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?