Comments (2)
Thank you so much for explaining it.
And it's easy to go around, we can create a case class that extends the trait.
case class Def1Container(toto : Option[String]) extends Def1
from chimney.
Yes: there is no non-controversial way to do it. trait
and abstract class
have no normal (non-abstract
) constructors, that were defined with the intent to construct a fully initialized object. To instantiate trait
we would have to:
- create an anonymous class
- find all abstract members of it
- check if their visibility would even allow us to implement them
- basically guess what would be their implementations
- put the implementations in the anonymous class, hoping that there are no
assert
or other runtime surprises - if all abstract members would be
val
s or nullarydef
s, perhaps that would be doable - if there would be any
def
which takes arguments, we would be pulling implementations out of thin air
So, it would be:
- rather hard to implement
- only possible for some special cases, which isn't very predictable
- feel even more magical, while one of the things we have to fight, is the argument that nobody understands where the transformation comes from and so it cannot be trusted
- quite error prone.
Perhaps if #192 would be implemented, than you could provide a function constructing such trait yourself and it would be non-ambiguous how it works. With features we have now we do not add support for case which would give users more troubles than benefits.
Of course the above is only about "open" trait
s. sealed trait
s are supported and any sane data model uses trait
s only as sealed trait
s, leaving non-sealed
for interfaces, services, etc.
from chimney.
Related Issues (20)
- Improve ReadTheDocs/MkDocs configuration
- Scary compiler error when providing Int const instead of Long HOT 3
- Compilation of partial transformation fails when there are fields named both `is{Name}` and `{name}` HOT 2
- Silent invalid behavior of `withFieldConst` when field name starts with "set" HOT 6
- [PartialTransformer] Field Option[Field].None to Proto3.Fields.Default
- ClassCastException thrown on Scala 3 when transforming sealed traits to Protobuf GeneratedEnum HOT 12
- Automatic Coproduct Rename from/to Protobuf GeneratedEnum HOT 8
- Can't transform coproduct - Java Enum to Sealed trait HOT 24
- Cannot transform Scala class to Java class HOT 5
- Chimney stabilization into 1.0.0
- Exclude macro generated code from WartRemover checks HOT 11
- Fix Overrides for Subtypes matching
- Support seamless transformation of protobuf oneof types HOT 3
- Compiler bugs: known, relevant and unresolved/undocumented
- Support transformation to and from Java primitives
- Test more Scala CLI snippets for output (printed results)
- Support runtime-defined enums
- Rewrite Patchers as a special case of multiple case classes mapping
- Refactor internals to NOT rely on RuntimeDataStore
- Chimney >= 0.8.0 can't transform case class with annotated parameter HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from chimney.