From 4b747726b93a9f6bf76d6518792fc77e0d5c2fc9 Mon Sep 17 00:00:00 2001 From: Cleverson Santos Date: Sat, 3 Jun 2017 20:32:43 -0300 Subject: [PATCH 1/5] Different Types of Bean Injection in Spring code --- .../ditypes/ConfigurationContext.java | 20 ++++++++++++ .../main/java/com/baeldung/ditypes/Guest.java | 20 ++++++++++++ .../main/java/com/baeldung/ditypes/Host.java | 20 ++++++++++++ .../java/com/baeldung/ditypes/Runner.java | 24 ++++++++++++++ .../constructor/PodcastConstructor.java | 28 +++++++++++++++++ .../baeldung/ditypes/inner/PodcastField.java | 25 +++++++++++++++ .../ditypes/setter/PodcastSetter.java | 31 +++++++++++++++++++ 7 files changed, 168 insertions(+) create mode 100644 spring-core/src/main/java/com/baeldung/ditypes/ConfigurationContext.java create mode 100644 spring-core/src/main/java/com/baeldung/ditypes/Guest.java create mode 100644 spring-core/src/main/java/com/baeldung/ditypes/Host.java create mode 100644 spring-core/src/main/java/com/baeldung/ditypes/Runner.java create mode 100644 spring-core/src/main/java/com/baeldung/ditypes/constructor/PodcastConstructor.java create mode 100644 spring-core/src/main/java/com/baeldung/ditypes/inner/PodcastField.java create mode 100644 spring-core/src/main/java/com/baeldung/ditypes/setter/PodcastSetter.java diff --git a/spring-core/src/main/java/com/baeldung/ditypes/ConfigurationContext.java b/spring-core/src/main/java/com/baeldung/ditypes/ConfigurationContext.java new file mode 100644 index 000000000000..9dfdb44b3964 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/ditypes/ConfigurationContext.java @@ -0,0 +1,20 @@ +package com.baeldung.ditypes; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.baeldung.ditypes") +public class ConfigurationContext { + + @Bean + public Host host(){ + return new Host("Jovem Nerd"); + } + + @Bean + public Guest guest(){ + return new Guest("Azaghal"); + } +} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/Guest.java b/spring-core/src/main/java/com/baeldung/ditypes/Guest.java new file mode 100644 index 000000000000..25fe69391241 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/ditypes/Guest.java @@ -0,0 +1,20 @@ +package com.baeldung.ditypes; + +import lombok.Data; + +@Data +public class Guest { + + private String name; + + public Guest(final String name){ + this.name = name; + } + + // standard setters and getters + + @Override + public String toString() { + return String.format("Guest: %s", this.name); + } +} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/Host.java b/spring-core/src/main/java/com/baeldung/ditypes/Host.java new file mode 100644 index 000000000000..2f213037fe57 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/ditypes/Host.java @@ -0,0 +1,20 @@ +package com.baeldung.ditypes; + +import lombok.Data; + +@Data +public class Host { + + private String name; + + public Host(final String name){ + this.name = name; + } + + // standard setters and getters + + @Override + public String toString() { + return String.format("Host: %s", this.name); + } +} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/Runner.java b/spring-core/src/main/java/com/baeldung/ditypes/Runner.java new file mode 100644 index 000000000000..813322695ee7 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/ditypes/Runner.java @@ -0,0 +1,24 @@ +package com.baeldung.ditypes; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.ditypes.constructor.PodcastConstructor; +import com.baeldung.ditypes.inner.PodcastField; +import com.baeldung.ditypes.setter.PodcastSetter; + +public class Runner { + + public static void main(String[] args) { + ApplicationContext context = new AnnotationConfigApplicationContext(ConfigurationContext.class); + + PodcastConstructor podcastConstructor = context.getBean(PodcastConstructor.class); + podcastConstructor.info(); + + PodcastField podcastField = context.getBean(PodcastField.class); + podcastField.info(); + + PodcastSetter podcastSetter = context.getBean(PodcastSetter.class); + podcastSetter.info(); + } +} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/constructor/PodcastConstructor.java b/spring-core/src/main/java/com/baeldung/ditypes/constructor/PodcastConstructor.java new file mode 100644 index 000000000000..00dc3a287086 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/ditypes/constructor/PodcastConstructor.java @@ -0,0 +1,28 @@ +package com.baeldung.ditypes.constructor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.baeldung.ditypes.Guest; +import com.baeldung.ditypes.Host; + +@Component +public class PodcastConstructor { + + private String name; + private Host host; + private Guest guest; + + @Autowired + public PodcastConstructor(final Host host, final Guest guest){ + this.name = "Constructor Injection"; + this.host = host; + this.guest = guest; + } + + // standard setters and getters + + public void info(){ + System.out.println(String.format("Name: %s, %s, %s", this.name, this.host, this.guest)); + } +} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/inner/PodcastField.java b/spring-core/src/main/java/com/baeldung/ditypes/inner/PodcastField.java new file mode 100644 index 000000000000..8d6c250a238b --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/ditypes/inner/PodcastField.java @@ -0,0 +1,25 @@ +package com.baeldung.ditypes.inner; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.baeldung.ditypes.Guest; +import com.baeldung.ditypes.Host; + +@Component +public class PodcastField { + + private String name = "Field Injection"; + + @Autowired + private Host host; + + @Autowired + private Guest guest; + + public void info(){ + System.out.println(String.format("Name: %s, %s, %s", this.name, this.host, this.guest)); + } + + // standard setters and getters +} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/setter/PodcastSetter.java b/spring-core/src/main/java/com/baeldung/ditypes/setter/PodcastSetter.java new file mode 100644 index 000000000000..91f8e0f86c92 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/ditypes/setter/PodcastSetter.java @@ -0,0 +1,31 @@ +package com.baeldung.ditypes.setter; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.baeldung.ditypes.Guest; +import com.baeldung.ditypes.Host; + +@Component +public class PodcastSetter { + + private String name = "Setter Injection"; + private Host host; + private Guest guest; + + public void info(){ + System.out.println(String.format("Name: %s, %s, %s", this.name, this.host, this.guest)); + } + + @Autowired + public void setHost(Host host) { + this.host = host; + } + + @Autowired + public void setGuest(Guest guest) { + this.guest = guest; + } + + // standard setters and getters +} From 64c6c5529b0f0f9fb9eb033ae61361d8521a13eb Mon Sep 17 00:00:00 2001 From: Cleverson Santos Date: Wed, 5 Jul 2017 15:33:08 -0300 Subject: [PATCH 2/5] Dataclasses in Kotlin --- .../java/com/baeldung/dataclass/Movie.java | 88 +++++++++++++++++++ .../kotlin/com/baeldung/dataclass/Movie.kt | 3 + .../kotlin/com/baeldung/dataclass/Sandbox.kt | 26 ++++++ 3 files changed, 117 insertions(+) create mode 100644 kotlin/src/main/java/com/baeldung/dataclass/Movie.java create mode 100644 kotlin/src/main/kotlin/com/baeldung/dataclass/Movie.kt create mode 100644 kotlin/src/main/kotlin/com/baeldung/dataclass/Sandbox.kt diff --git a/kotlin/src/main/java/com/baeldung/dataclass/Movie.java b/kotlin/src/main/java/com/baeldung/dataclass/Movie.java new file mode 100644 index 000000000000..7eac98fe2aa6 --- /dev/null +++ b/kotlin/src/main/java/com/baeldung/dataclass/Movie.java @@ -0,0 +1,88 @@ +package com.baeldung.dataclass; + +public class Movie { + + private String name; + private String studio; + private float rating; + + public Movie(String name, String studio, float rating) { + this.name = name; + this.studio = studio; + this.rating = rating; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getStudio() { + return studio; + } + + public void setStudio(String studio) { + this.studio = studio; + } + + public float getRating() { + return rating; + } + + public void setRating(float rating) { + this.rating = rating; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + Float.floatToIntBits(rating); + result = prime * result + ((studio == null) ? 0 : studio.hashCode()); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + + if (obj == null) + return false; + + if (getClass() != obj.getClass()) + return false; + + Movie other = (Movie) obj; + + if (name == null) { + if (other.name != null) + return false; + + } else if (!name.equals(other.name)) + return false; + + if (Float.floatToIntBits(rating) != Float.floatToIntBits(other.rating)) + return false; + + if (studio == null) { + if (other.studio != null) + return false; + + } else if (!studio.equals(other.studio)) + return false; + + return true; + } + + @Override + public String toString() { + return "Movie [name=" + name + ", studio=" + studio + ", rating=" + rating + "]"; + } +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/com/baeldung/dataclass/Movie.kt b/kotlin/src/main/kotlin/com/baeldung/dataclass/Movie.kt new file mode 100644 index 000000000000..c0c15b251640 --- /dev/null +++ b/kotlin/src/main/kotlin/com/baeldung/dataclass/Movie.kt @@ -0,0 +1,3 @@ +package com.baeldung.dataclass + +data class Movie(val name: String, val studio: String, var rating: Float) \ No newline at end of file diff --git a/kotlin/src/main/kotlin/com/baeldung/dataclass/Sandbox.kt b/kotlin/src/main/kotlin/com/baeldung/dataclass/Sandbox.kt new file mode 100644 index 000000000000..d47909bf29e1 --- /dev/null +++ b/kotlin/src/main/kotlin/com/baeldung/dataclass/Sandbox.kt @@ -0,0 +1,26 @@ +package com.baeldung.dataclass + +fun main(args: Array) { + + val movie = Movie("Whiplash", "Sony Pictures", 8.5F) + + println(movie.name) //Whiplash + println(movie.studio) //Sony Pictures + println(movie.rating) //8.5 + + movie.rating = 9F + + println(movie.toString()) //Movie(name=Whiplash, studio=Sony Pictures, rating=9.0) + + val betterRating = movie.copy(rating = 9.5F) + println(betterRating.toString()) //Movie(name=Whiplash, studio=Sony Pictures, rating=9.5) + + movie.component1() //name + movie.component2() //studio + movie.component3() //rating + + val(name, studio, rating) = movie + + fun getMovieInfo() = movie + val(namef, studiof, ratingf) = getMovieInfo() +} \ No newline at end of file From 989b4e320a5a76578b6b9b2d12a40af00a94303a Mon Sep 17 00:00:00 2001 From: Cleverson Santos Date: Wed, 5 Jul 2017 15:37:59 -0300 Subject: [PATCH 3/5] Revert "Different Types of Bean Injection in Spring code" This reverts commit 4b747726b93a9f6bf76d6518792fc77e0d5c2fc9. --- .../ditypes/ConfigurationContext.java | 20 ------------ .../main/java/com/baeldung/ditypes/Guest.java | 20 ------------ .../main/java/com/baeldung/ditypes/Host.java | 20 ------------ .../java/com/baeldung/ditypes/Runner.java | 24 -------------- .../constructor/PodcastConstructor.java | 28 ----------------- .../baeldung/ditypes/inner/PodcastField.java | 25 --------------- .../ditypes/setter/PodcastSetter.java | 31 ------------------- 7 files changed, 168 deletions(-) delete mode 100644 spring-core/src/main/java/com/baeldung/ditypes/ConfigurationContext.java delete mode 100644 spring-core/src/main/java/com/baeldung/ditypes/Guest.java delete mode 100644 spring-core/src/main/java/com/baeldung/ditypes/Host.java delete mode 100644 spring-core/src/main/java/com/baeldung/ditypes/Runner.java delete mode 100644 spring-core/src/main/java/com/baeldung/ditypes/constructor/PodcastConstructor.java delete mode 100644 spring-core/src/main/java/com/baeldung/ditypes/inner/PodcastField.java delete mode 100644 spring-core/src/main/java/com/baeldung/ditypes/setter/PodcastSetter.java diff --git a/spring-core/src/main/java/com/baeldung/ditypes/ConfigurationContext.java b/spring-core/src/main/java/com/baeldung/ditypes/ConfigurationContext.java deleted file mode 100644 index 9dfdb44b3964..000000000000 --- a/spring-core/src/main/java/com/baeldung/ditypes/ConfigurationContext.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.ditypes; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan("com.baeldung.ditypes") -public class ConfigurationContext { - - @Bean - public Host host(){ - return new Host("Jovem Nerd"); - } - - @Bean - public Guest guest(){ - return new Guest("Azaghal"); - } -} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/Guest.java b/spring-core/src/main/java/com/baeldung/ditypes/Guest.java deleted file mode 100644 index 25fe69391241..000000000000 --- a/spring-core/src/main/java/com/baeldung/ditypes/Guest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.ditypes; - -import lombok.Data; - -@Data -public class Guest { - - private String name; - - public Guest(final String name){ - this.name = name; - } - - // standard setters and getters - - @Override - public String toString() { - return String.format("Guest: %s", this.name); - } -} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/Host.java b/spring-core/src/main/java/com/baeldung/ditypes/Host.java deleted file mode 100644 index 2f213037fe57..000000000000 --- a/spring-core/src/main/java/com/baeldung/ditypes/Host.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.ditypes; - -import lombok.Data; - -@Data -public class Host { - - private String name; - - public Host(final String name){ - this.name = name; - } - - // standard setters and getters - - @Override - public String toString() { - return String.format("Host: %s", this.name); - } -} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/Runner.java b/spring-core/src/main/java/com/baeldung/ditypes/Runner.java deleted file mode 100644 index 813322695ee7..000000000000 --- a/spring-core/src/main/java/com/baeldung/ditypes/Runner.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.ditypes; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -import com.baeldung.ditypes.constructor.PodcastConstructor; -import com.baeldung.ditypes.inner.PodcastField; -import com.baeldung.ditypes.setter.PodcastSetter; - -public class Runner { - - public static void main(String[] args) { - ApplicationContext context = new AnnotationConfigApplicationContext(ConfigurationContext.class); - - PodcastConstructor podcastConstructor = context.getBean(PodcastConstructor.class); - podcastConstructor.info(); - - PodcastField podcastField = context.getBean(PodcastField.class); - podcastField.info(); - - PodcastSetter podcastSetter = context.getBean(PodcastSetter.class); - podcastSetter.info(); - } -} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/constructor/PodcastConstructor.java b/spring-core/src/main/java/com/baeldung/ditypes/constructor/PodcastConstructor.java deleted file mode 100644 index 00dc3a287086..000000000000 --- a/spring-core/src/main/java/com/baeldung/ditypes/constructor/PodcastConstructor.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.ditypes.constructor; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.baeldung.ditypes.Guest; -import com.baeldung.ditypes.Host; - -@Component -public class PodcastConstructor { - - private String name; - private Host host; - private Guest guest; - - @Autowired - public PodcastConstructor(final Host host, final Guest guest){ - this.name = "Constructor Injection"; - this.host = host; - this.guest = guest; - } - - // standard setters and getters - - public void info(){ - System.out.println(String.format("Name: %s, %s, %s", this.name, this.host, this.guest)); - } -} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/inner/PodcastField.java b/spring-core/src/main/java/com/baeldung/ditypes/inner/PodcastField.java deleted file mode 100644 index 8d6c250a238b..000000000000 --- a/spring-core/src/main/java/com/baeldung/ditypes/inner/PodcastField.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.ditypes.inner; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.baeldung.ditypes.Guest; -import com.baeldung.ditypes.Host; - -@Component -public class PodcastField { - - private String name = "Field Injection"; - - @Autowired - private Host host; - - @Autowired - private Guest guest; - - public void info(){ - System.out.println(String.format("Name: %s, %s, %s", this.name, this.host, this.guest)); - } - - // standard setters and getters -} diff --git a/spring-core/src/main/java/com/baeldung/ditypes/setter/PodcastSetter.java b/spring-core/src/main/java/com/baeldung/ditypes/setter/PodcastSetter.java deleted file mode 100644 index 91f8e0f86c92..000000000000 --- a/spring-core/src/main/java/com/baeldung/ditypes/setter/PodcastSetter.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.ditypes.setter; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.baeldung.ditypes.Guest; -import com.baeldung.ditypes.Host; - -@Component -public class PodcastSetter { - - private String name = "Setter Injection"; - private Host host; - private Guest guest; - - public void info(){ - System.out.println(String.format("Name: %s, %s, %s", this.name, this.host, this.guest)); - } - - @Autowired - public void setHost(Host host) { - this.host = host; - } - - @Autowired - public void setGuest(Guest guest) { - this.guest = guest; - } - - // standard setters and getters -} From 7f29a6b1525328172eb049b49ca8e3987f354315 Mon Sep 17 00:00:00 2001 From: Cleverson Santos Date: Wed, 26 Jul 2017 15:20:16 -0300 Subject: [PATCH 4/5] Destructuring Declarations in Kotlin --- .../destructuringdeclarations/Person.kt | 3 + .../destructuringdeclarations/Result.kt | 3 + .../destructuringdeclarations/Sandbox.kt | 55 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Person.kt create mode 100644 kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Result.kt create mode 100644 kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Sandbox.kt diff --git a/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Person.kt b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Person.kt new file mode 100644 index 000000000000..d3167ce03311 --- /dev/null +++ b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Person.kt @@ -0,0 +1,3 @@ +package com.baeldung.destructuringdeclarations + +data class Person(var id: Int, var name: String, var age: Int) \ No newline at end of file diff --git a/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Result.kt b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Result.kt new file mode 100644 index 000000000000..e3da9b46a453 --- /dev/null +++ b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Result.kt @@ -0,0 +1,3 @@ +package com.baeldung.destructuringdeclarations + +data class Result(val result: Int, val status: String) \ No newline at end of file diff --git a/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Sandbox.kt b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Sandbox.kt new file mode 100644 index 000000000000..87775f9378df --- /dev/null +++ b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Sandbox.kt @@ -0,0 +1,55 @@ +package com.baeldung.destructuringdeclarations + +import com.baeldung.destructuringdeclarations.Person +import com.baeldung.destructuringdeclarations.Result + +fun main(args: Array) { + + //2.1. Objects + val person = Person(1, "Jon Snow", 20) + val(id, name, age) = person + + println(id) //1 + println(name) //Jon Snow + println(age) //20 + + //The equivalent of line 10 +/* val id = person.component1(); + val name = person.component2(); + val age = person.component3();*/ + + //2.2. Functions + fun getPersonInfo() = Person(2, "Ned Stark", 45) + val(idf, namef, agef) = getPersonInfo() + + fun twoValuesReturn(): Result { + + // needed code + + return Result(1, "success") + } + + // Now, to use this function: + val (result, status) = twoValuesReturn() + + //2.3. Collections and For-loops + var map: HashMap = HashMap() + map.put(1, person) + + for((key, value) in map){ + println("Key: $key, Value: $value") + } + + //2.4. Underscore and Destructuring in Lambdas + val (_, status2) = twoValuesReturn() + + map.mapValues { entry -> "${entry.value}!" } + map.mapValues { (key, value) -> "$value!" } + + //A pair of parameters vs. a destructuring pair +/* { a -> ... } // one parameter + { a, b -> ... } // two parameters + { (a, b) -> ... } // a destructured pair + { (a, b), c -> ... } // a destructured pair and another parameter*/ + +} \ No newline at end of file From ea14c6352f89515c051e2551834611583affc6f2 Mon Sep 17 00:00:00 2001 From: Cleverson Santos Date: Thu, 27 Jul 2017 12:39:51 -0300 Subject: [PATCH 5/5] Corrections on Destructuring Declarations in Kotlin --- .../destructuringdeclarations/Result.kt | 3 --- .../destructuringdeclarations/Sandbox.kt | 21 +++++-------------- 2 files changed, 5 insertions(+), 19 deletions(-) delete mode 100644 kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Result.kt diff --git a/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Result.kt b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Result.kt deleted file mode 100644 index e3da9b46a453..000000000000 --- a/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Result.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.baeldung.destructuringdeclarations - -data class Result(val result: Int, val status: String) \ No newline at end of file diff --git a/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Sandbox.kt b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Sandbox.kt index 87775f9378df..a5018d93c8a4 100644 --- a/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Sandbox.kt +++ b/kotlin/src/main/kotlin/com/baeldung/destructuringdeclarations/Sandbox.kt @@ -1,11 +1,10 @@ package com.baeldung.destructuringdeclarations import com.baeldung.destructuringdeclarations.Person -import com.baeldung.destructuringdeclarations.Result fun main(args: Array) { - //2.1. Objects + //2.1. Objects val person = Person(1, "Jon Snow", 20) val(id, name, age) = person @@ -13,20 +12,15 @@ fun main(args: Array) { println(name) //Jon Snow println(age) //20 - //The equivalent of line 10 -/* val id = person.component1(); - val name = person.component2(); - val age = person.component3();*/ - //2.2. Functions fun getPersonInfo() = Person(2, "Ned Stark", 45) val(idf, namef, agef) = getPersonInfo() - fun twoValuesReturn(): Result { + fun twoValuesReturn(): Pair { // needed code - return Result(1, "success") + return Pair(1, "success") } // Now, to use this function: @@ -41,15 +35,10 @@ fun main(args: Array) { } //2.4. Underscore and Destructuring in Lambdas - val (_, status2) = twoValuesReturn() + val (_, name2, age2) = person + val (id3, name3) = person map.mapValues { entry -> "${entry.value}!" } map.mapValues { (key, value) -> "$value!" } - //A pair of parameters vs. a destructuring pair -/* { a -> ... } // one parameter - { a, b -> ... } // two parameters - { (a, b) -> ... } // a destructured pair - { (a, b), c -> ... } // a destructured pair and another parameter*/ - } \ No newline at end of file