Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免过多的空比较_Java_Nullpointerexception_Jena - Fatal编程技术网

Java 如何避免过多的空比较

Java 如何避免过多的空比较,java,nullpointerexception,jena,Java,Nullpointerexception,Jena,我正在与JENA framework一起工作,收集有关公共合同的信息并将其发布为RDF,我无法克服以下问题: 在创建新的RDF模型时,我为每个契约创建新的资源,然后使用JENA的addProperty(Property,RDFNode)或addProperty(Property,String)方法分配一组属性(我刮取的)。问题是,一些契约缺少一些属性,因此我得到了NullPointerException 使用 因为addProperty()方法的第二个参数差别很大,所以对于每个属性可能都不是最好

我正在与JENA framework一起工作,收集有关公共合同的信息并将其发布为RDF,我无法克服以下问题:
在创建新的RDF模型时,我为每个契约创建新的
资源
,然后使用JENA的
addProperty(Property,RDFNode)
addProperty(Property,String)
方法分配一组属性(我刮取的)。问题是,一些契约缺少一些属性,因此我得到了
NullPointerException

使用

因为
addProperty()
方法的第二个参数差别很大,所以对于每个属性可能都不是最好的方法 (它可以直接是
contract.getProperty()
,但有时也可以是
model.createLiteral(contract.getProperty())
model.createTypedLiteral(contract.getProperty()、XSDDataType.XSDInt)
等等),我无法创建自己的
myAddProperty()
方法 在这里,我将检查
null
并调用JENA的
addProperty()

您认为跳过所有空属性的最佳解决方案是什么?

非常感谢您的建议。

我对这些框架不太熟悉,但也许您可以将
资源子类化,并执行类似操作:

@overrides
public void addProperty(String key, String value)
{
   if (value != null) super.addProperty(key,value);
}

将空检查重构为单独的方法:

private void addProperty(final Resource resource, final String key, final String value) {
    if (value != null) {
        resource.addProperty(key, value);
    }
}
然后可以按如下方式使用此方法:

addProperty(resource, VOCABULARY.property, contract.getProperty());

资源变量是什么类型的类?你能从那个类继承并重写
addProperty()
方法吗?为什么不能调用“addProperty()”方法的“myAddProperty()”呢?@Marcelo资源变量是com.hp.hpl.jena.rdf.model.resource type,好主意,我会尝试ingerit并重写addProperty()。我很好奇,你为什么不能添加一个小的myAddProperty方法,无论是类中的private还是helper类中的静态方法?@Peter和JustinKSU你们可能是对的,我说我不能创建它是愚蠢的,我的意思是有太多不同的参数可以传递给原始的
addProperty()
,但实际上所有的
模型。createTypedLiteral()
stuff等返回字符串,因此我可以这样做。谢谢,我太傻了,抱歉,com.hp.hpl.jena.rdf.model.Resource实际上是一个接口,抱歉。该接口的实现是否至少可以拦截(例如方面)?该接口有很多方法,因此它相当长,我认为我可以创建
myAddProperty()
,实际上(如上所述),但感谢您的想法,它确实帮了我很多问题,为什么要使用
final
参数?@tom-这显然是一个颇有争议的做法!请看这里的辩论:就个人而言,我认为它提高了代码的可读性(和意图)。
addProperty(resource, VOCABULARY.property, contract.getProperty());