Re: Generics question
Jochen Theodorou <[email protected]>
| Newsgroups | gmane.comp.lang.groovy.user |
|---|---|
| Message-ID | <[email protected]> |
hi,
Basically you want to use an AST transform to bypass the type system? I
don't have enough data, but I wonder if you cannot solve the problem
without this.
I mean... why does Mutable extend Immutable? How about...
interface Entity {}
class Mutable implement Entity [}
class Immutable implements Entity {}
if you use sealed, then those two classes can be designated as the only
implementations as well. Though I assume that is not what you intend.
Then you should be able to do /I have tested nothing):
List<? extends Entity> myOtherThings = []
myOtherThings << new Immutable()
myOtherThings << new Mutable()
List<Immutale> myThings = []
myThings << new Immutable()
// myThings << new Mutable() forbidden
List<Mutable> myMutables = []
// myMutables << new Immutable() forbiddden
myMutables << new Mutable()
On 27.08.23 14:59, Saravanan Palanichamy wrote:
> Hello folks
>
> I am building an AST transformation that will allow me to define a
> concept of mutable and immutable objects. Java lets me hold mutable
> objects in immutable object lists (as per the code below). But my DSL
> also wants to allow immutable objects to be held in mutable lists. The
> meaning it is conveying is that adding to mutable lists will clone the
> immutable object and not affect the original ( I use the << operator to
> denote this. It denotes that the object is being streamed into the list
> and will not affect the object if list contents are modified) . What is
> the best way to achieve this? I dont see a type checking extension that
> will catch this missing "method" and let me override it.
>
> I dont want to create an extension function, because this could be a
> model I want to follow for several classes and not just Blah. Which is
> why I want to use the AST route to solve this problem. Any pointers will
> be very helpful.
>
> Assume that I can convert immutable to mutable behind the scenes. Also
> assume that 100s of classes will follow this model of mutability
>
> static class Blah {
> static class Immutable {
> String getProperty1() { "PROP1" }
> }
> static class Mutable extends Immutable {
> void setProperty1(String value) {
> }
> }
> }
> void fn() {
> // This works
> List<Blah.Immutable> myOtherThings = []
> myOtherThings << new Blah.Immutable()
> myOtherThings << new Blah.Mutable()
>
> // This does not (I want an AST that will make this work)
> List<Blah.Mutable> myThings = []
> myThings << new Blah.Immutable()
>
> // This works
> myThings << new Blah.Mutable()
> }
>
>
> regards
> Saravanan