[ https://issues.apache.org/jira/browse/COMMONSRDF-7?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15615097#comment-15615097 ]
ASF GitHub Bot commented on COMMONSRDF-7: ----------------------------------------- Github user stain commented on a diff in the pull request: https://github.com/apache/incubator-commonsrdf/pull/26#discussion_r85510434 --- Diff: api/src/main/java/org/apache/commons/rdf/api/Quad.java --- @@ -17,16 +17,30 @@ */ package org.apache.commons.rdf.api; +import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Set; /** * A Quad is a statement in a * <a href= "http://www.w3.org/TR/rdf11-concepts/#section-dataset" >RDF-1.1 * Dataset</a>, as defined by - * <a href= "https://www.w3.org/TR/2014/NOTE-rdf11-datasets-20140225/" >RDF-1.1 + * <a href= "https://www.w3.org/TR/2014/NOTE-rdf11-datasets-20140225/#quad-semantics" >RDF-1.1 * Concepts and Abstract Syntax</a>, a W3C Working Group Note published on 25 * February 2014. + * <p> + * A {@link Quad} object in Commons RDF is considered <em>immutable</em>, that + * is, over it's life time it will have consistent behaviour for its + * {@link #equals(Object)} and {@link #hashCode()}, and the instances returned + * from {@link #getGraphName()}, {@link #getSubject()}, {@link #getPredicate()} + * and {@link #getObject()} will have consistent {@link Object#equals(Object)} + * behaviour. + * <p> + * Thus, a {@link Quad} is thread-safe and can be safely used in collections --- End diff -- Documenting `Quad` as immutable would indeed prevent any `setSubject()` bean unless you made them write-once - stringently throwing `IllegalStateException` until all of them were set. You could however make such a Java bean from `QuadLike` which don't have immutability restriction, and then have a `.build()` method or similar that return the immutable `Quad`. > Document that RDFTerm, Triple and Quad are immutable > ---------------------------------------------------- > > Key: COMMONSRDF-7 > URL: https://issues.apache.org/jira/browse/COMMONSRDF-7 > Project: Apache Commons RDF > Issue Type: Improvement > Components: api > Reporter: Stian Soiland-Reyes (old) > Assignee: Stian Soiland-Reyes > Labels: discussion, immutable > Fix For: 0.3.0 > > > From https://github.com/commons-rdf/commons-rdf/issues/57 > ansell: > {quote} > As mentioned in #45, should we add a contract requirement that all RDFTerm > instances (and Triple?) be implemented as immutable objects? > https://github.com/commons-rdf/commons-rdf/issues/45 > {quote} > stain: > {quote} > +1, if we say SHOULD. But only the exposed RDFTerm++ methods need to be > immutable - so this should probably go into each of their descriptions. So if > I have a getDatabaseThingie() method that can be mutable. > {quote} > ansell: > {quote} > The value of stating that the objects must be immutable is decreased if it > only applies to the results of the API methods. A useful goal would be to > ensure that the entire object is immutable to give a guarantee about > threadsafety, but that may be too much for all implementations to support. > Just stating that the results of the visible API methods are immutable > doesn't help much. It is also not likely to apply to the methods that return > Optional, as to enable serialisation, the actual field may not be an Optional > itself in most cases. > {quote} -- This message was sent by Atlassian JIRA (v6.3.4#6332)