PROPOSAL: Lightweight Properties (original) (raw)
Marek Kozieł develop4lasu at gmail.com
Thu Mar 5 09:25:07 PST 2009
- Previous message: PROPOSAL: Lightweight Properties
- Next message: PROPOSAL: Lightweight Properties
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2009/3/5 David Goodenough <david.goodenough at linkchoose.co.uk>
On Thursday 05 March 2009, Marek Kozieł wrote: > 2009/3/5 David Goodenough <david.goodenough at linkchoose.co.uk> > > > Rienier, > > > > Yes I know that Fields have Generics information available, but they are > > not used in the declaration of a Field object, and so the getter and > > setter to the value of the field are NOT typed, and thus can not be > > checked by the compiler/IDE. > > > > I do not have the knowledge to add this to the compiler, and the only > > documentation I have found for adding things to the compiler (as I > > have already mentioned) did not help - it only talked about adding > > operators to the compiler. The compiler is not exactly well documented > > or if it is, Google has been unable to furnish the right documents. > > > > The reason that it is needed is very simple. One of the big strengths > > of Java is that compilers and IDEs can do a really good job of detecting > > errors, and in the case of IDEs making suggestions as to what can come > > next. Using String field names in places like Bean Binding frameworks > > and API approaches to SQL and friends (like the JPA Criteria API) drives > > a coach and horses through that strength. For that reason, and the fact > > that this is a VERY simple suggestion, this proposal should be given > > serious consideration. > > > > Now if there people out there with the knowledge to help me get started > > in understanding what needs to be changed in Javac (I tried Remi Forax > > as he had already worked in this area, but he was too busy to help when > > I asked) I am more than happy to try to produce a working javac. But > > simply jumping into the source from scratch is unlikely to produce a good > > solution. > > > > So perhaps rather than spending our time throwing out reasons why this > > can not be done, lets try to work together to find a way in which is can > > be done. > > > > David > > > > On Thursday 05 March 2009, you wrote: > > > I think you'll need to spend some more time getting familiar with the > > > JLS. > > > > > > For example, Field objects DO have generics information. That's what > > > Field.getGenericType() is for. > > > > > > I -really- doubt you'll get anywhere with your proposal unless you do > > > both of the following: > > > > > > - impress everybody with an exceedingly complete proposal along with > > > a prototype implementation of javac. Which is going to take a lot more > > > working knowledge of the JLS and how javac parses source files than > > > you currently have. > > > > > > - either a grassroots campaign of many java programmers that > > > vindicates your insinuation that properties are so important, they > > > need to be added to java7, even with this bandaid solution, or > > > alternatively, convince a number of property evangelising people in > > > the java community to openly speak in favour of this proposal. > > > > > > I imagine that's going to cost you a week or 5 at the very least of > > > your time, including getting more familiar with the JLS. March is > > > going to be over by then. > > > > > > --Reinier Zwitserloot > > I do not see the problem you have. > > If you have 'static' name of field (only then compiler can check it) then > you can simply use field. Well no, because if you need to use an explicit getter or setter to do some extra processing or in the setter you want to fire a PropertyChangeEvent then the Field on its own is not enough.
The Field setter could be extended, but as it does not know the parent object (the think of which this is a Field) it can not look for a PropertyChangeSupport object. The Field set method does not try to fire PropertyChangeEvents, and does not provide to use an explicitly coded setter. That could be got around by passing the Field object into a Property constructor, rather than the field names, but again we do not have access to the parent object which makes searching for getters and setters and PropertyChangeSupport objects rather difficult. > > If u do not have that information (it's dynamic) then also compiler is > unable to determine it's type before execution. true > > That why I do not see why we need any other solution than linking 'Fields' > with fields to make it refactor friendly and easy to use. I do not see (maybe I did not understand FCM) how I could handle foo#bar#ali. In this case you need a Field array, not just a field. Additionally the FCM case only seems to handle the Foo#bar case, not the foo#bar case. That is not the end of the world - it would work in the examples I need, but it is less than my proposal covers. > > Am I wrong? Either I have missunderstood the FCM (which is quite possible) or it does not match what my proposal offers. David
So why not use Fields when it's needed.
And mix it with:
class YoursClass{
private final Container field = new Container();
}
where Container:
class final Container{
private Type element;
public Type get(){ return element;}
public void set(Type element){ /* validate / / evens before / this.element=element; / evens after */ }
}
Pesonaly I use Container mixed with validators.
-- Pozdrowionka. / Regards. Lasu aka Marek Kozieł
http://lasu2string.blogspot.com/
- Previous message: PROPOSAL: Lightweight Properties
- Next message: PROPOSAL: Lightweight Properties
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]