Java8:无法获取 Optional.of(String) 返回类型的值



在使用OWLAPI 4.0 API的上下文中,以下代码行:ontologyIRI = IRI.create(o.getOntologyID().getOntologyIRI().toString());

返回以下字符串:"Optional.of(http://www.indytion.com/music/composition)".

我需要的是唯一的绳子";http://www.indytion.com/music/composition"。

我试图将ontologyIRI声明为Optional,并使用.get((方法、.orElse((等,但都无济于事。我仍然有返回的字符串,其中包括"optional.of(("部分。

我的问题是:如何获取内部字符串?

非常感谢你的帮助。

编辑:完整的代码方法

private void LoadOntology(String ontologyPath)
{
OWLOntologyManager man = OWLManager.createOWLOntologyManager();
OWLOntology o;
File ontologyFile = new File(ontologyPath);
Optional<IRI> ontologyIRI;
try {
o = man.loadOntologyFromOntologyDocument(ontologyFile);
ontologyIRI = Optional.of(IRI.create(String.valueOf(o.getOntologyID().getOntologyIRI()).toString()));
System.out.println("Ontology IRI is: " + ontologyIRI.get());
} catch (OWLOntologyCreationException e) {
e.printStackTrace();
}
}
The System.out.println() returns exactly this string:
"Ontology IRI = Optional.of(http://www.indytion.com/music/composition)"

使用.get((而不是toString((

//Returns 'Optional[example]'
Optional.of("example").toString();

//Returns 'example'
Optional.of("example").get();

简短回答:替换

Optional.of(IRI.create(String.valueOf(o.getOntologyID().getOntologyIRI()).toString()));

带有

o.getOntologyID().getOntologyIRI().get();

更长的答案:你做了很多来回的事情,这充其量是毫无意义的,在某些情况下是有害的:

无特殊顺序:

  • 其他人已经评论说IRI实例是不可变的,所以从现有实例创建新实例是没有意义的(如果无害的话(
  • 如果您不打算实际返回Optional,那么调用Optional.of()几乎总是一个坏主意
  • String.valueOf()用于获得某个值的字符串表示,通常对调试最有用,但不应依赖于它来完全往返于对象的所有内容(toString()也是如此

所以基本上你剩下的是:

  1. o.getOntologyID().getOntologyIRI()给你一个Optional<IRI>
  2. 你想要IRI
  3. Optional::get返回可选中包含的值(如果存在(,因此只需调用get()

然而,如果Optional为空(即没有基础值(,则get()将抛出NoSuchElementException。这可能是你想要的,也可能不是你想要的。为了解决这个问题,要么在调用get()之前调用isPresent()以检查值是否存在,要么使用多种其他访问器方法中的任何一种;内置检查";在某种程度上

最后,问题似乎不在于代码本身。问题就是这样解决的。但我不明白为什么它被解决了:

  1. I复制/粘贴(在同一文件中(";shouldAddObjectPropertyAssertions(("来自OWLAPI4实例的实例->此示例代码运行OK(但不像我那样使用getOntologyID((方法(
  2. 将SDK更改为另一个次要版本"1.8.0_61">
  3. 使用初始和所需的SDK"1.8.0_131"再次更改
  4. 使缓存无效并重新启动IDE

问题已解决。完全相同的代码:

ontologyIRI = o.getOntologyID().getOntologyIRI().get();
System.out.println("Ontology IRI is: " + ontologyIRI);

现在返回期望的字符串值:";http://www.indytion.com/music/composition"而不是";可选.of(http://www.indytion.com/music/composition)"不再

如果有人能解释为什么它被修复了,我会非常高兴。

再次感谢您的帮助。

相关内容

最新更新