On Sat, Mar 22, 2014 at 4:41 PM, Tom Schindl
<tom.schi...@bestsolution.at> wrote:
> Ah i missed you passing them to the constructor.
>
> Still i don't see this as much an improvement because we still create a vast 
> amount of anon inner classes.

Sure, I just wanted to get the baseline for comparison right.

Tomas

>
> Tom
>
> Von meinem iPhone gesendet
>
>> Am 22.03.2014 um 16:23 schrieb Tom Schindl <tom.schi...@bestsolution.at>:
>>
>> Why not i expect the property to be fully initialize so this would be a 
>> breaking change in behavior.
>>
>> Tom
>>
>> Von meinem iPhone gesendet
>>
>>> Am 22.03.2014 um 14:54 schrieb Tomas Mikula <tomas.mik...@gmail.com>:
>>>
>>> On Fri, Mar 21, 2014 at 8:53 PM, Tom Schindl
>>> <tom.schi...@bestsolution.at> wrote:
>>>> Hi Richard,
>>>>
>>>> Coming back to this old thread and now that we are using lamdas all over
>>>> I guess we could take one more look into that.
>>>>
>>>> I've prototyped an initial version by introducing a new internal type
>>>> named InvalidatedSimpleObjectProperty (not the best name ever!) - see
>>>> code pasted below.
>>>>
>>>> And now one can write code like this:
>>>>
>>>>>   public final ObjectProperty<Rectangle2D> viewportProperty() {
>>>>>       if (viewport == null) {
>>>>>           viewport = new InvalidatedSimpleObjectProperty<>(this, 
>>>>> "viewport", (o) -> {
>>>>>             invalidateWidthHeight();
>>>>>               impl_markDirty(DirtyBits.NODE_VIEWPORT);
>>>>>               impl_geomChanged();
>>>>>           } );
>>>>>       }
>>>>>       return viewport;
>>>>>   }
>>>>
>>>> instead of
>>>>
>>>>>   public final ObjectProperty<Rectangle2D> viewportProperty() {
>>>>>       if (viewport == null) {
>>>>>           viewport = new ObjectPropertyBase<Rectangle2D>() {
>>>>>
>>>>>               @Override
>>>>>               protected void invalidated() {
>>>>>                   invalidateWidthHeight();
>>>>>                   impl_markDirty(DirtyBits.NODE_VIEWPORT);
>>>>>                   impl_geomChanged();
>>>>>               }
>>>>>
>>>>>               @Override
>>>>>               public Object getBean() {
>>>>>                   return ImageView.this;
>>>>>               }
>>>>>
>>>>>               @Override
>>>>>               public String getName() {
>>>>>                   return "viewport";
>>>>>               }
>>>>>           };
>>>>>       }
>>>>>       return viewport;
>>>>>   }
>>>
>>> Nice idea. Just to get the comparison to status quo more fair, you
>>> don't need to override getBean() and getName() methods:
>>>
>>> public final ObjectProperty<Rectangle2D> viewportProperty() {
>>>   if (viewport == null) {
>>>       viewport = new SimpleObjectProperty<Rectangle2D>(this, "viewport") {
>>>
>>>           @Override
>>>           protected void invalidated() {
>>>               invalidateWidthHeight();
>>>               impl_markDirty(DirtyBits.NODE_VIEWPORT);
>>>               impl_geomChanged();
>>>           }
>>>       };
>>>   }
>>>   return viewport;
>>> }
>>>
>>> Regards,
>>> Tomas
>>>
>>>>
>>>> Which allows us to get rid of most of the ObjectPropertyBase sublcasses.
>>>>
>>>> Tom
>>>>
>>>>
>>>>> package com.sun.javafx.property;
>>>>>
>>>>> import java.util.function.Consumer;
>>>>>
>>>>> import javafx.beans.property.SimpleObjectProperty;
>>>>>
>>>>> public final class InvalidatedSimpleObjectProperty<T> extends 
>>>>> SimpleObjectProperty<T> {
>>>>>     private final Consumer<InvalidatedSimpleObjectProperty<T>> 
>>>>> invalidationConsumer;
>>>>>
>>>>>   /**
>>>>>    * The constructor of {@code ObjectProperty}
>>>>>    *
>>>>>    * @param initialValue
>>>>>    *            the initial value of the wrapped value
>>>>>    * @param invalidationConsumer
>>>>>    *                          the consumer to be called when the bean is 
>>>>> invalidated
>>>>>    */
>>>>>   public InvalidatedSimpleObjectProperty(T initialValue, final 
>>>>> Consumer<InvalidatedSimpleObjectProperty<T>> invalidationConsumer) {
>>>>>       super(initialValue);
>>>>>       if( invalidationConsumer == null ) {
>>>>>             throw new IllegalArgumentException("Consumer can not be 
>>>>> null");
>>>>>       }
>>>>>       this.invalidationConsumer = invalidationConsumer;
>>>>>   }
>>>>>
>>>>>   /**
>>>>>    * The constructor of {@code ObjectProperty}
>>>>>    *
>>>>>    * @param bean
>>>>>    *            the bean of this {@code ObjectProperty}
>>>>>    * @param name
>>>>>    *            the name of this {@code ObjectProperty}
>>>>>    * @param invalidationConsumer
>>>>>    *                          the consumer to be called when the bean is 
>>>>> invalidated
>>>>>    */
>>>>>   public InvalidatedSimpleObjectProperty(Object bean, String name, final 
>>>>> Consumer<InvalidatedSimpleObjectProperty<T>> invalidationConsumer) {
>>>>>      super(bean, name);
>>>>>      if( invalidationConsumer == null ) {
>>>>>             throw new IllegalArgumentException("Consumer can not be 
>>>>> null");
>>>>>      }
>>>>>      this.invalidationConsumer = invalidationConsumer;
>>>>>   }
>>>>>
>>>>>   /**
>>>>>    * The constructor of {@code ObjectProperty}
>>>>>    *
>>>>>    * @param bean
>>>>>    *            the bean of this {@code ObjectProperty}
>>>>>    * @param name
>>>>>    *            the name of this {@code ObjectProperty}
>>>>>    * @param initialValue
>>>>>    *            the initial value of the wrapped value
>>>>>    * @param invalidationConsumer
>>>>>    *                          the consumer to be called when the bean is 
>>>>> invalidated
>>>>>    */
>>>>>   public InvalidatedSimpleObjectProperty(Object bean, String name, T 
>>>>> initialValue, final Consumer<InvalidatedSimpleObjectProperty<T>> 
>>>>> invalidationConsumer) {
>>>>>       super(bean,name,initialValue);
>>>>>       if( invalidationConsumer == null ) {
>>>>>             throw new IllegalArgumentException("Consumer can not be 
>>>>> null");
>>>>>       }
>>>>>       this.invalidationConsumer = invalidationConsumer;
>>>>>   }
>>>>>
>>>>>   @Override
>>>>>   protected void invalidated() {
>>>>>     invalidationConsumer.accept(this);
>>>>>   }
>>>>> }
>>>>
>>>>
>>>> On 22.01.13 10:30, Richard Bair wrote:
>>>>>> Is the Java8 plan still there if not should the current Simple*Property
>>>>>> subclasses who overload invalidated be changed to PropertyBase?
>>>>>
>>>>> It is unlikely that we'll be able to do anything major here in Java 8 
>>>>> just because we don't really have Lambda yet that we can play with, and 
>>>>> changing over every property is a big job. Unless we knew it would be a 
>>>>> major win. I would say, if you encounter a Simple* property that has been 
>>>>> subclassed, then we should fix it up as we go to be a PropertyBase* guy 
>>>>> instead.
>>>>

Reply via email to