Storing realm objects using Kotlin extensions
up vote
2
down vote
favorite
I am a Java Android Developer and I'm approaching Kotlin.
I have defined the following class:
open class Player : RealmObject() {
...
}
And I defined the following two extensions, one for the generic RealmObject class and one for the specific Player class:
fun RealmObject.store() {
Realm.getDefaultInstance().use { realm ->
realm.beginTransaction()
realm.copyToRealmOrUpdate(this)
realm.commitTransaction()
}
}
fun Player.store(){
this.loggedAt = Date()
(this as RealmObject).store()
}
What I want is if I call .store()
on any RealmObject
object, the RelamObject.store()
extension will be called BUT if i call .store()
on a Player
instance the extension that will be called will be Player.store()
.
(No problem for now)
I don't want to copy paste the same code, i love to write less reuse more.
So i need that internally the Player.store()
will call the generic RealmObject.store()
I got it. The code I wrote up there is actually working as expected :D
Is this the good way? Or there is some better way?
object-oriented android extension-methods kotlin
bumped to the homepage by Community♦ 8 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
add a comment |
up vote
2
down vote
favorite
I am a Java Android Developer and I'm approaching Kotlin.
I have defined the following class:
open class Player : RealmObject() {
...
}
And I defined the following two extensions, one for the generic RealmObject class and one for the specific Player class:
fun RealmObject.store() {
Realm.getDefaultInstance().use { realm ->
realm.beginTransaction()
realm.copyToRealmOrUpdate(this)
realm.commitTransaction()
}
}
fun Player.store(){
this.loggedAt = Date()
(this as RealmObject).store()
}
What I want is if I call .store()
on any RealmObject
object, the RelamObject.store()
extension will be called BUT if i call .store()
on a Player
instance the extension that will be called will be Player.store()
.
(No problem for now)
I don't want to copy paste the same code, i love to write less reuse more.
So i need that internally the Player.store()
will call the generic RealmObject.store()
I got it. The code I wrote up there is actually working as expected :D
Is this the good way? Or there is some better way?
object-oriented android extension-methods kotlin
bumped to the homepage by Community♦ 8 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I am a Java Android Developer and I'm approaching Kotlin.
I have defined the following class:
open class Player : RealmObject() {
...
}
And I defined the following two extensions, one for the generic RealmObject class and one for the specific Player class:
fun RealmObject.store() {
Realm.getDefaultInstance().use { realm ->
realm.beginTransaction()
realm.copyToRealmOrUpdate(this)
realm.commitTransaction()
}
}
fun Player.store(){
this.loggedAt = Date()
(this as RealmObject).store()
}
What I want is if I call .store()
on any RealmObject
object, the RelamObject.store()
extension will be called BUT if i call .store()
on a Player
instance the extension that will be called will be Player.store()
.
(No problem for now)
I don't want to copy paste the same code, i love to write less reuse more.
So i need that internally the Player.store()
will call the generic RealmObject.store()
I got it. The code I wrote up there is actually working as expected :D
Is this the good way? Or there is some better way?
object-oriented android extension-methods kotlin
I am a Java Android Developer and I'm approaching Kotlin.
I have defined the following class:
open class Player : RealmObject() {
...
}
And I defined the following two extensions, one for the generic RealmObject class and one for the specific Player class:
fun RealmObject.store() {
Realm.getDefaultInstance().use { realm ->
realm.beginTransaction()
realm.copyToRealmOrUpdate(this)
realm.commitTransaction()
}
}
fun Player.store(){
this.loggedAt = Date()
(this as RealmObject).store()
}
What I want is if I call .store()
on any RealmObject
object, the RelamObject.store()
extension will be called BUT if i call .store()
on a Player
instance the extension that will be called will be Player.store()
.
(No problem for now)
I don't want to copy paste the same code, i love to write less reuse more.
So i need that internally the Player.store()
will call the generic RealmObject.store()
I got it. The code I wrote up there is actually working as expected :D
Is this the good way? Or there is some better way?
object-oriented android extension-methods kotlin
object-oriented android extension-methods kotlin
edited Aug 3 '17 at 16:31
200_success
127k15148412
127k15148412
asked Aug 3 '17 at 16:18
Gianni Genovesi
111
111
bumped to the homepage by Community♦ 8 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
bumped to the homepage by Community♦ 8 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
It's not a direct answer to your technical question, which you seem to have answered.
I'm not sure that the Player.loggedAt
field should be set when store()
is called. We only see a very small fraction of your app, but maybe that could be set somewhere else more naturally. From the name, it seems maybe it should be set when the Player
is created, or recreated from the DB.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
It's not a direct answer to your technical question, which you seem to have answered.
I'm not sure that the Player.loggedAt
field should be set when store()
is called. We only see a very small fraction of your app, but maybe that could be set somewhere else more naturally. From the name, it seems maybe it should be set when the Player
is created, or recreated from the DB.
add a comment |
up vote
0
down vote
It's not a direct answer to your technical question, which you seem to have answered.
I'm not sure that the Player.loggedAt
field should be set when store()
is called. We only see a very small fraction of your app, but maybe that could be set somewhere else more naturally. From the name, it seems maybe it should be set when the Player
is created, or recreated from the DB.
add a comment |
up vote
0
down vote
up vote
0
down vote
It's not a direct answer to your technical question, which you seem to have answered.
I'm not sure that the Player.loggedAt
field should be set when store()
is called. We only see a very small fraction of your app, but maybe that could be set somewhere else more naturally. From the name, it seems maybe it should be set when the Player
is created, or recreated from the DB.
It's not a direct answer to your technical question, which you seem to have answered.
I'm not sure that the Player.loggedAt
field should be set when store()
is called. We only see a very small fraction of your app, but maybe that could be set somewhere else more naturally. From the name, it seems maybe it should be set when the Player
is created, or recreated from the DB.
answered Aug 8 '17 at 19:27
toto2
5,1771019
5,1771019
add a comment |
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f172004%2fstoring-realm-objects-using-kotlin-extensions%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown