gpt4 book ai didi

Java 从方法 : Can't assign void value to java. lang.String 返回的类型不正确

转载 作者:行者123 更新时间:2023-12-01 11:21:56 25 4
gpt4 key购买 nike

我正在将记录导入到 Solr 数据库中,并使用 .bsh 脚本来预处理 URL 字段。该脚本工作正常,但记录没有 URL 字段的情况除外,然后它会抛出以下错误:

Error while trying to evaluate script: getURLs.bsh
java.lang.IllegalArgumentException: Error while trying to evaluate script: getURLs.bsh
at org.solrmarc.index.SolrIndexer.handleScript(SolrIndexer.java:1170)
at org.solrmarc.index.SolrIndexer.addFieldValueToMap(SolrIndexer.java:914)
at org.solrmarc.index.SolrIndexer.map(SolrIndexer.java:821)
at org.solrmarc.marc.MarcImporter.addToIndex(MarcImporter.java:398)
at org.solrmarc.marc.MarcImporter.importRecords(MarcImporter.java:312)
at org.solrmarc.marc.MarcImporter.handleAll(MarcImporter.java:605)
at org.solrmarc.marc.MarcImporter.main(MarcImporter.java:865)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.simontuffs.onejar.Boot.run(Boot.java:334)
at com.simontuffs.onejar.Boot.main(Boot.java:170)
Caused by: Incorrect type returned from method: getURLDOICan't assign void value to java.lang.String: Can't assign void value to java.lang.String: <at unknown location>

at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.BshMethod.invokeImpl(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at org.solrmarc.index.SolrIndexer.handleScript(SolrIndexer.java:1162)
... 12 more

我的脚本如下:

import org.marc4j.marc.Record;

public String getURLDOI(Record record) {
String url = indexer.getFirstFieldVal(record,"856u");
if (url != null) {
if (url.substring(0,7).equals("urn:doi")) {
String result = "http://hdl.handle.net/"+url.substring(9);
return result;
} else {
String result = url;
return result;
}
return null;
}
}

如何处理那些没有 URL 字段("856u")的记录?我尝试在方法开始时设置 result = null ,然后在最后返回结果(而不是 return null),但我仍然得到相同的结果错误。感谢您提供的任何提示或指示。

最佳答案

如果函数的返回类型是字符串,则必须返回一个字符串或引发异常。正如另一篇文章所说,您可以返回一个空字符串或其他一些特殊值,然后让调用代码处理它。

您的另一个问题是您提供的函数无法编译。我重写了它以摆脱依赖性,我得到:

public static String getURLDOI(String record) {
String url = record;
if (url != null) {
if (url.substring(0,7).equals("urn:doi")) {
String result = "http://hdl.handle.net/"+url.substring(9);
return result;
} else {
String result = url;
return result;
}
return "";
}
}

当我尝试编译时出现这些错误:

Main.java:18: error: unreachable statement
return "";
^
Main.java:20: error: missing return statement
}
^

按照我认为你的意图,我会像这样重写你的函数:

public static String getURLDOI(Record record) {

String url = indexer.getFirstFieldVal(record,"856u");

if (url == null)
return "";

if (url.substring(0,7).equals("urn:doi"))
return "http://hdl.handle.net/"+url.substring(9);

return url;

}

它比嵌套的 if 语句读起来好得多,你犯了一个错误!这很容易做到,这就是为什么你不应该嵌套它们。

关于Java 从方法 : Can't assign void value to java. lang.String 返回的类型不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31122376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com