1

首先道歉,我主要是一个做一些 Java 的 Perl 人。我读过一些文献,但无法得到这个给我我需要的签名:

    logger.debug("Entered addRelationships");
    boolean rval = true;
    for(int i=0;i<relationships.length;i++)
    {
        URI converted_uri ;
        try {
          converted_uri = new URI("relationships[i].datatype") ;
        } catch (URISyntaxException e) {
          logger.error("Error converting datatype", e);
          return rval = false ;
        }

        boolean r = addRelationship(context, relationships[i].subject,
                relationships[i].predicate, relationships[i].object,
                relationships[i].isLiteral, converted_uri);
        if(r==false)
        {
            rval = false;
        }
    }
    return rval;
}

产生的错误是:

addRelationship(org.fcrepo.server.Context,java.lang.String,java.lang.String,java.lang.String,boolean,java.lang.String) in org.fcrepo.server.management.DefaultManagement cannot be applied to (org.fcrepo.server.Context,java.lang.String,java.lang.String,java.lang.String,boolean,java.net.URI)

在我看来,converted_uri是这个结尾的 URI?数据类型在之前的版本中是一个字符串,所以不需要体操!

4

2 回答 2

3

只需删除 qoutes:

converted_uri = new URI(relationships[i].datatype) ;

当您使用引号时,就像在 perl 中一样,您正在处理字符串文字。如果要引用变量,则必须直接在代码中提及它。

于 2015-01-26T14:23:01.773 回答
1

虽然@AlexR 在您的代码中指出了另一个问题,但这并不是您在问题中发现的问题的原因。

您遇到了编译错误,并且 URI 语法中的错误只会在运行时出现,就像 @AlexR 识别的错误一样。

您遇到的问题是您试图将 aURI作为最后一个参数传递,但该方法addRelationship需要 aString作为最后一个参数。这就是错误所说的。

(错误的第一部分说明方法的签名实际上是什么,如您所见,它以 结尾java.lang.String,而错误的第二部分说明您尝试为该方法提供什么类型的数据,并且如您所见那个结尾java.net.URI

所以看起来 URI 并没有像你预期的那样改变;它仍然需要一个字符串。

解决方案是将您的代码更改为:

boolean rval = true;
for(int i = 0; i < relationships.length; i++)
{
    boolean r = addRelationship(context, relationships[i].subject,
            relationships[i].predicate, relationships[i].object,
            relationships[i].isLiteral, relationships[i].datatype);
    if (!r)
    {
        rval = false;
    }
}
return rval;
于 2015-01-26T14:27:36.370 回答