Constructor annotation

Tom Schindl tom.schindl at bestsolution.at
Wed Oct 16 08:24:32 PDT 2013


One thing that just came to my mind is that maybe also need a way to
define the default value to be used, with a builder I could e.g. define
that the default for fields are different from their real native default.

class MyBuilder {
  private boolean a = true;
  private int x = -1;
  private Insets i = new Insets(10);
}

If we want to have a full replacement for builders the annotation must
have the possibility define this (in future).

public @interface NamedArgument {
  String value();
  String defaultValue();
  Class<Converter> converterClass();
}

If no converterClass is given we'd have to do our best to auto-convert
the String. I don't want to say that we should implement the default
value definition in FX8 but it would feel more natural with an
annotation per argument.

Tom

On 16.10.13 17:12, Tom Schindl wrote:
> To me the JavaBean solution with one annotation looks error prone, does
> anybody know why they did not use an annotation per field?
> 
> Tom
> 
> On 16.10.13 16:58, Stephen F Northover wrote:
>> +1 for base.  Should we not follow closely what Java Beans is doing for
>> consistency?  I realize that we can't have the reference.
>>
>> Steve
>>
>> On 2013-10-16 10:53 AM, Kevin Rushforth wrote:
>>> Not to mention Tom's point that it can't be in the fxml module without
>>> created unwanted (and circular) module dependencies. Seems like it
>>> needs to be in the "base" module then, right?
>>>
>>> -- Kevin
>>>
>>>
>>> Richard Bair wrote:
>>>> +1 this is my preference. It is useful for things other than FXML,
>>>> and should be considered part of our javafx.beans API.
>>>>
>>>>> On Oct 16, 2013, at 4:20 AM, Tom Schindl
>>>>> <tom.schindl at bestsolution.at> wrote:
>>>>>
>>>>>> On 16.10.13 11:22, Eva Krejcirova wrote:
>>>>>> Hi All,
>>>>>>
>>>>>> when we retired builders, we caused a problem for FXML which doesn't
>>>>>> have a way to create classes without default constructors. Back
>>>>>> then we
>>>>>> decided to use an annotation for this but never actually got to
>>>>>> implement it and we need to fix this for FX8. I am in the process of
>>>>>> adding this functionality to FXMLLoader but we need to decide how the
>>>>>> annotation will look like and I could use some help with this.
>>>>>>
>>>>>> We cannot use already existing ConstructorProperties for this, because
>>>>>> it's java.beans package and we don't want to create to dependency on
>>>>>> this package in JavaFX, so we need to introduce a new annotation.
>>>>>>
>>>>>> We have two options:
>>>>>>
>>>>>> 1. Annotate the whole constructor:
>>>>>> e.g.
>>>>>>    @ConstructorArguments({"a", "b", "list"})
>>>>>>    public ImmutableClass(int a, int b, Integer... list)
>>>>>>
>>>>>> 2. Annotate the arguments:
>>>>>> e.g.
>>>>>>    public ImmutableClass(@FXMLArgument("a") int a,
>>>>>> @FXMLArgument("b")int b, @FXMLArgument("list")Integer... list)
>>>>>>
>>>>>>
>>>>>> Which option do you like more and how should the annotation be named?
>>>>> Option 2, but does it really have to hold FXML in the annotation name?
>>>>> Where would you put the annotation? I think it should NOT be in the
>>>>> FXML-Package-Namespace because the core should NOT depend on FXML!
>>>>>
>>>>> I'd go with @Argument or simply @NamedArgument (@Named is already used
>>>>> by javax.inject)
>>>>>
>>>>> Tom
>>
> 



More information about the openjfx-dev mailing list