You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2016/04/24 21:57:26 UTC

[02/10] wicket git commit: Use better bounds for the parameter types.

Use better bounds for the parameter types.

Rework #flatMap() to actually return the new model, so the developer can return writeable model. The drawback is that now it is not lazy. It would be lazy if the signature is: #flatMap(WicketFunction<IModel<T>, IModel<R>> mapper)


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/70fa0136
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/70fa0136
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/70fa0136

Branch: refs/heads/master
Commit: 70fa0136ad6d58f1f8168b2e5937f7d1423381f7
Parents: 484132a
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Sun Apr 24 20:08:41 2016 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Sun Apr 24 20:08:41 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/wicket/model/IModel.java    | 25 +++++++-------------
 1 file changed, 9 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/70fa0136/wicket-core/src/main/java/org/apache/wicket/model/IModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/IModel.java b/wicket-core/src/main/java/org/apache/wicket/model/IModel.java
index 789d27a..eef15e1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/IModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/IModel.java
@@ -91,7 +91,7 @@ public interface IModel<T> extends IDetachable
 	 * @param predicate a predicate to be used for testing the contained object
 	 * @return a new IModel
 	 */
-	default IModel<T> filter(WicketFunction<T, Boolean> predicate) {
+	default IModel<T> filter(WicketFunction<? super T, Boolean> predicate) {
 		return (IModel<T>) () -> {
 			T object = IModel.this.getObject();
 			if (object != null && predicate.apply(object)) {
@@ -111,7 +111,7 @@ public interface IModel<T> extends IDetachable
 	 * @param mapper a mapper, to be applied to the contained object
 	 * @return a new IModel
 	 */
-	default <R> IModel<R> map(WicketFunction<T, R> mapper) {
+	default <R> IModel<R> map(WicketFunction<? super T, R> mapper) {
 		return (IModel<R>) () -> {
 			T object = IModel.this.getObject();
 			if (object == null) {
@@ -134,7 +134,7 @@ public interface IModel<T> extends IDetachable
 	 * @param other another model to be combined with this one
 	 * @return a new IModel
 	 */
-	default <R, U> IModel<R> mapWith(WicketBiFunction<T, U, R> combine, IModel<U> other) {
+	default <R, U> IModel<R> mapWith(WicketBiFunction<? super T, ? super U, R> combine, IModel<U> other) {
 		return (IModel<R>) () -> {
 			T t = IModel.this.getObject();
 			U u = other.getObject();
@@ -155,16 +155,9 @@ public interface IModel<T> extends IDetachable
 	 * @param mapper a mapper, to be applied to the contained object
 	 * @return a new IModel
 	 */
-	default <R> IModel<R> flatMap(WicketFunction<T, IModel<R>> mapper) {
-		return (IModel<R>) () -> {
-			T object = IModel.this.getObject();
-			if (object == null) {
-				return null;
-			}
-			else {
-				return mapper.apply(object).getObject();
-			}
-		};
+	default <R> IModel<R> flatMap(WicketFunction<? super T, IModel<R>> mapper) {
+		T object = IModel.this.getObject();
+		return mapper.apply(object);
 	}
 
 	/**
@@ -176,10 +169,10 @@ public interface IModel<T> extends IDetachable
 	 * to the contained model object.
 	 * @return a new IModel
 	 */
-	default <R> IModel<R> apply(IModel<WicketFunction<T, R>> mapper) {
+	default <R> IModel<R> apply(IModel<WicketFunction<? super T, R>> mapper) {
 		return (IModel<R>) () -> {
 			T object = IModel.this.getObject();
-			WicketFunction<T, R> f = mapper.getObject();
+			WicketFunction<? super T, R> f = mapper.getObject();
 			if (object == null || f == null) {
 				return null;
 			}
@@ -216,7 +209,7 @@ public interface IModel<T> extends IDetachable
 	 * @param other a supplier to be used as a default
 	 * @return a new IModel
 	 */
-	default IModel<T> orElseGet(WicketSupplier<T> other) {
+	default IModel<T> orElseGet(WicketSupplier<? extends T> other) {
 		return (IModel<T>) () -> {
 			T object = IModel.this.getObject();
 			if (object == null) {