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