簡體   English   中英

使用 forEach 方法時 JAVA 中的 NoSuchMethodError

[英]NoSuchMethodError in JAVA when using forEach Method

我有以下代碼片段:

JSONArray processNodes = new JSONObject(customCon.geteOutput())
                        .getJSONArray("process-node");
processNodes.forEach(item -> {JSONObject node = (JSONObject) item;});

我在 pom.xml 中添加了依賴項:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160810</version>
</dependency>

但運行時它給出錯誤 java.lang.NoSuchMethodError:org.json.JSONArray.forEach(Ljava/util/function/Consumer;)

知道為什么我有這個錯誤嗎?

知道為什么我會遇到這個錯誤嗎?

您編譯的JSONArray版本與您在運行時使用的版本之間存在不匹配。 這會導致錯誤。

按照javadoc中為20160810的版本,在POM文件中,有一個forEach的方法org.json.JSONArray由定義Iterable接口。

但是,從異常中可以清楚地看出,您在運行時使用的JSONArray版本沒有該方法。

請注意,該方法在 Android 版本中不存在(請參閱https://developer.android.com/reference/org/json/JSONArray )並且不會在 Java 8 之前的版本中存在......因為 Java 7 Iterable沒有forEach方法( javadoc )。

檢查正確的導入語句。您的代碼看起來不錯。 我在 Eclipse 中快速檢查工作正常。

import org.json.JSONArray;
import org.json.JSONObject;

public class Test {

    public static void main(String[] args) {
          
                JSONObject jo =   new JSONObject(5);
                jo.put("red",new JSONArray(List.of(1,2,3,4,5)));
                jo.put("blue", "green");

         
          
          jo.getJSONArray("red").forEach(item -> {String var = item.toString();});

    }

}

這是因為在運行時,jar 是從 Spark 的 jar 文件夾中選取的,為了覆蓋它,在 spark 提交的 --jar 中指定 jar 並像這樣添加 conf:

--conf spark.driver.extraClassPath=json-20200518.jar 
--conf spark.executor.extraClassPath=json-20200518.jar

https://hadoopsters.com/2019/05/08/how-to-override-a-spark-dependency-in-client-or-cluster-mode/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM