[英]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.