Small property support.
Ruslan
Ruslan.Lazukov at digia.com
Tue Mar 24 07:13:13 PDT 2009
Hello.
It was a joke :) but every joke have it's serious side. So i will answer
on serious side.
I will be happy to use your tine property support. But it creates more
problems than my proposal.
Without "property" keyword - it can be unclear why in one place
@Get @Set
private int i;
create both getter and setter, and in another only one of them. Java is
very good because it is readable.
This issue appear because in first class imported annotations are:
java.property.Set and java.property.Get
And in another class java.property.Set and some.other.package.Get
Same thing is with arrow (->) and point (.).
With arrow i can easily understand can some code throw exception
(because getter/setter can throw exceptions). And with point i can not.
With point you can not access getter and variable at the same place:
private property int i;
public void foo2() {
int j = this.i;
j = getI();
}
public void foo2() {
int j = this.i;
j = this->i;
}
So arrow should be in this proposal.
And at the end: it's much more harder to write getter function with
using of Java annotations right now. So for you proposal necessary to
change annotations too.
BR, Ruslan.
PS i would like to have any type of property support faster than in 5
years. 5 years - time before java 8 will be released... may be ;)
Michael Bien пишет:
> I would even start smaller, should I call it tiny property support? ;)
>
> @get @set
> private int i;
>
> would tell the compiler to generate getter setter and property change
> listener methods for the field 'i'. No additonal keywords and no
> arrow(->) syntax required.
>
> Writing the property 'i' in the bean would cause a compiler warning,
> reading would be fine. Calling setters would be the preferred way to
> modify properties from inside or outside the bean.
>
> I know Annotations are not intended to change the meaning of a field or
> its behaviour. But this is rather a shortcut to the bean pattern than
> the usual language change proposal.
>
> I see it rather as temporary and probably even as smallest possible
> property feature instead of a final solution. JDK8 could add real first
> class properties without conflicts with this proposal (again its just
> the bean pattern), you could even keep the Annotations it wouldn't hurt.
>
> no changes to javadoc, compiler etc.
>
> what do you think? Should I try to file a proposal or do you already
> spot show stoppers?
>
> best regards,
>
> Michael Bien
>
> Ruslan wrote:
>
>> Hello.
>>
>> David Goodenough wrote:
>>
>>
>>> On Wednesday 18 March 2009, Ruslan wrote:
>>>
>>>
>>>
>>>> Hello.
>>>>
>>>> Yes, i have read it.
>>>> But we are trying to fix different things:
>>>> - You are trying to get rid of strings in "Beans Binding of JPA Criteria
>>>> API"
>>>>
>>>>
>>>>
>>> As a matter of interest, how would I pass a property reference using
>>> your proposal?
>>>
>>>
>>>
>> My proposal have another goal. Goal is to have synthetic sugar like
>> for-each for property.
>> And in my case there is not property reference, so you can not pass it.
>>
>> Property references can be added at next release (5 years later ;) ).
>>
>>
>>
>>
>>>> - And my point is to make property code readable and get rid of
>>>> getters/setters when use Dependency Injection.
>>>>
>>>>
>>>>
>>> For simple getters and setters, my proposal does actually get rid of
>>> getters and setters, in that the Property object will do the work for you
>>> using the Field get and set (and some snake oil to handle
>>> PropertyChangeSupport).
>>>
>>>
>>>
>> Yes, that is true. And my proposal are not using Property or Field. It's
>> like macros for property get/set generation.
>>
>>
>>> David
>>>
>>>
>>>
>> PS my goal is to avoid situation like this:
>> private int i;
>>
>> public String getI() {
>> return Integer.toString(i);
>> }
>>
>> public void setI(long i) {
>> this.i = (int)i;
>> }
>>
>> What is the type of property 'i' ?
>>
>> private int i;
>>
>> public int getJ() {
>> return i;
>> }
>>
>> public void setI(int i) {
>> this.i = i;
>> }
>>
>> IS everyone see that there is not getter for 'i' - we have getter for
>> 'j'. But compiler will not fix this error, because it is a logical
>> error, not language.
>>
>>
>> Ruslan.
More information about the coin-dev
mailing list