[
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)