From 74f5698aa66196a38b7f0e79ce6e0bcd928ecd7e Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 11 Dec 2015 09:57:05 +0900 Subject: [PATCH 01/72] Primitive Type --- .../BJ8LF/Annotations/PrimitiveAnnTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Annotations/PrimitiveAnnTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Annotations/PrimitiveAnnTest.java b/src/main/java/tk/hadeslee/BJ8LF/Annotations/PrimitiveAnnTest.java new file mode 100644 index 0000000..24d5c49 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Annotations/PrimitiveAnnTest.java @@ -0,0 +1,28 @@ +package tk.hadeslee.BJ8LF.Annotations; + +/** + * Project: java8-examples + * FileName: PrimitiveAnnTest + * Date: 2015-12-11 + * Time: 오전 9:54 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public @interface PrimitiveAnnTest { + byte a(); + + short b(); + + int c(); + + long d(); + + float e(); + + double f(); + + boolean g(); + + char h(); +} From 49495f954c3adcf3328ca8907ab3fa8eac007c3b Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 11 Dec 2015 10:56:40 +0900 Subject: [PATCH 02/72] Manager TestCase --- ...ava8_examples___java8_examples_1_0_war.xml | 60 +++++++++---------- ...es___java8_examples_1_0_war__exploded_.xml | 60 +++++++++---------- .../BJ8LF/Annotations/ManagerTest.java | 23 +++++++ 3 files changed, 83 insertions(+), 60 deletions(-) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/Annotations/ManagerTest.java diff --git a/.idea/artifacts/Gradle___tk_dbcore_java8_examples___java8_examples_1_0_war.xml b/.idea/artifacts/Gradle___tk_dbcore_java8_examples___java8_examples_1_0_war.xml index 54fa970..9f3cb4c 100644 --- a/.idea/artifacts/Gradle___tk_dbcore_java8_examples___java8_examples_1_0_war.xml +++ b/.idea/artifacts/Gradle___tk_dbcore_java8_examples___java8_examples_1_0_war.xml @@ -12,36 +12,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/artifacts/Gradle___tk_dbcore_java8_examples___java8_examples_1_0_war__exploded_.xml b/.idea/artifacts/Gradle___tk_dbcore_java8_examples___java8_examples_1_0_war__exploded_.xml index 0db71c5..24bed51 100644 --- a/.idea/artifacts/Gradle___tk_dbcore_java8_examples___java8_examples_1_0_war__exploded_.xml +++ b/.idea/artifacts/Gradle___tk_dbcore_java8_examples___java8_examples_1_0_war__exploded_.xml @@ -12,36 +12,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/tk/hadeslee/BJ8LF/Annotations/ManagerTest.java b/src/test/java/tk/hadeslee/BJ8LF/Annotations/ManagerTest.java new file mode 100644 index 0000000..4eacb2c --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/Annotations/ManagerTest.java @@ -0,0 +1,23 @@ +package tk.hadeslee.BJ8LF.Annotations; + +import junit.framework.TestCase; + +/** + * Project: java8-examples + * FileName: ManagerTest + * Date: 2015-12-11 + * Time: 오전 10:56 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ManagerTest extends TestCase { + + public void testSetSalary() throws Exception { + + } + + public void testMain() throws Exception { + + } +} \ No newline at end of file From f30bb64ab9b089f3c3a501abfcd5a1dbed4bbbee Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sat, 12 Dec 2015 07:40:34 +0900 Subject: [PATCH 03/72] Restriction #4 --- .idea/sonarIssues.xml | 5 +++++ java8-examples.iml | 1 + .../tk/hadeslee/BJ8LF/Annotations/GoodOne.java | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Annotations/GoodOne.java diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index 5acaa25..1fa1a3a 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -28,6 +28,11 @@ + + + + + diff --git a/java8-examples.iml b/java8-examples.iml index 0be7c39..fab257c 100644 --- a/java8-examples.iml +++ b/java8-examples.iml @@ -64,6 +64,7 @@ + + + + + + diff --git a/src/main/java/tk/hadeslee/BJ8LF/Annotations/DefaultTest.java b/src/main/java/tk/hadeslee/BJ8LF/Annotations/DefaultTest.java new file mode 100644 index 0000000..fd5b6c7 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Annotations/DefaultTest.java @@ -0,0 +1,26 @@ +package tk.hadeslee.BJ8LF.Annotations; + +/** + * Project: java8-examples + * FileName: DefaultTest + * Date: 2015-12-12 + * Time: 오전 7:41 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public @interface DefaultTest { + double d() default 12.89; + + int num() default 12; + + int[] x() default {1, 2}; + + String s() default "Hello"; + + String[] s2() default {"abc", "xyz"}; + + Class c() default Exception.class; + + Class[] c2() default {Exception.class, java.io.IOException.class}; +} From 7d62e6f0a3f5d88624c214118f454fce7093d9d0 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sun, 13 Dec 2015 00:28:46 +0900 Subject: [PATCH 05/72] String type --- .idea/sonarIssues.xml | 5 +++++ .../hadeslee/BJ8LF/Annotations/NameTest.java | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/Annotations/NameTest.java diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index 4814f37..6efe393 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -263,6 +263,11 @@ + + + + + diff --git a/src/test/java/tk/hadeslee/BJ8LF/Annotations/NameTest.java b/src/test/java/tk/hadeslee/BJ8LF/Annotations/NameTest.java new file mode 100644 index 0000000..d607e28 --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/Annotations/NameTest.java @@ -0,0 +1,19 @@ +package tk.hadeslee.BJ8LF.Annotations; + +/** + * Project: java8-examples + * FileName: NameTest + * Date: 2015-12-13 + * Time: 오전 12:26 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ + +@Name(first = "John", last = "Jacobs") +public class NameTest { + @Name(first = "Wally", last = "Inman") + public void aMethod() { + + } +} From d42101ad79979c6ea8dde46ad8d1d09298f1555c Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 14 Dec 2015 09:04:59 +0900 Subject: [PATCH 06/72] Class Type --- .../BJ8LF/Annotations/DefaultException.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Annotations/DefaultException.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Annotations/DefaultException.java b/src/main/java/tk/hadeslee/BJ8LF/Annotations/DefaultException.java new file mode 100644 index 0000000..f74f1b9 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Annotations/DefaultException.java @@ -0,0 +1,20 @@ +package tk.hadeslee.BJ8LF.Annotations; + +/** + * Project: java8-examples + * FileName: DefaultException + * Date: 2015-12-14 + * Time: 오전 9:04 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class DefaultException extends java.lang.Throwable { + public DefaultException() { + + } + + public DefaultException(String msg) { + super(msg); + } +} From 1259fb3ef3b319300f0dbe403b5bdbae73cf5dda Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 14 Dec 2015 09:06:51 +0900 Subject: [PATCH 07/72] Class Type --- .../hadeslee/BJ8LF/Annotations/TestCase.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Annotations/TestCase.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Annotations/TestCase.java b/src/main/java/tk/hadeslee/BJ8LF/Annotations/TestCase.java new file mode 100644 index 0000000..ede8772 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Annotations/TestCase.java @@ -0,0 +1,21 @@ +package tk.hadeslee.BJ8LF.Annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Project: java8-examples + * FileName: TestCase + * Date: 2015-12-14 + * Time: 오전 9:05 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface TestCase { + Class willThrow() default DefaultException.class; +} From 8bd75309bcddd94d3ace504e73646c07949446e6 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 14 Dec 2015 09:09:29 +0900 Subject: [PATCH 08/72] A test Case That Uses the TestCase Annotations --- .../BJ8LF/Annotations/PolicyTestCases.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Annotations/PolicyTestCases.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Annotations/PolicyTestCases.java b/src/main/java/tk/hadeslee/BJ8LF/Annotations/PolicyTestCases.java new file mode 100644 index 0000000..f7d0cc7 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Annotations/PolicyTestCases.java @@ -0,0 +1,27 @@ +package tk.hadeslee.BJ8LF.Annotations; + +import java.io.IOException; + +/** + * Project: java8-examples + * FileName: PolicyTestCases + * Date: 2015-12-14 + * Time: 오전 9:07 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class PolicyTestCases { + //Must throw IOExceptionn + @TestCase(willThrow = IOException.class) + public static void testCase1() { + // Code goes here + } + + // We are not expecting any exception + + @TestCase() + public static void testCase2() { + //Code goes here + } +} From 2cdfdbd147333f5a548bd1184f3eda0850c91410 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 14 Dec 2015 09:19:07 +0900 Subject: [PATCH 09/72] An Annotation Type Using Other Annotation Types as Data Type of Its Elements --- .../BJ8LF/Annotations/Description.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Annotations/Description.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Annotations/Description.java b/src/main/java/tk/hadeslee/BJ8LF/Annotations/Description.java new file mode 100644 index 0000000..fd13683 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Annotations/Description.java @@ -0,0 +1,19 @@ +package tk.hadeslee.BJ8LF.Annotations; + +/** + * Project: java8-examples + * FileName: Description + * Date: 2015-12-14 + * Time: 오전 9:17 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public @interface Description { + Name name(); + + Version version(); + + String comments() default ""; + +} From 4e16eaa4bc3dc3fc6c82e09523be1dd68c4edcfc Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 14 Dec 2015 09:48:16 +0900 Subject: [PATCH 10/72] An Annotation Type Using Other Annotation Types as Data Type of Its Elements --- .../tk/hadeslee/BJ8LF/Annotations/Test.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Annotations/Test.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Annotations/Test.java b/src/main/java/tk/hadeslee/BJ8LF/Annotations/Test.java new file mode 100644 index 0000000..3f0c31c --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Annotations/Test.java @@ -0,0 +1,18 @@ +package tk.hadeslee.BJ8LF.Annotations; + +/** + * Project: java8-examples + * FileName: Test + * Date: 2015-12-14 + * Time: 오전 9:46 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +@Description(name = @Name(first = "John", last = "Jacobs"), + version = @Version(major = 1, minor = 2), + comments = "Just a test class" +) +public class Test { + //Code goes here +} From b7ceb340c5a8545f374aedca0589aa49fced08bc Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 15 Dec 2015 09:04:49 +0900 Subject: [PATCH 11/72] Todo Annotation Type with String[] as Its Sole Element --- .../java/tk/hadeslee/BJ8LF/Annotations/ToDo.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Annotations/ToDo.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Annotations/ToDo.java b/src/main/java/tk/hadeslee/BJ8LF/Annotations/ToDo.java new file mode 100644 index 0000000..af424c0 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Annotations/ToDo.java @@ -0,0 +1,16 @@ +package tk.hadeslee.BJ8LF.Annotations; + +/** + * Project: java8-examples + * FileName: ToDo + * Date: 2015-12-15 + * Time: 오전 9:03 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public @interface ToDo { + String[] items(); +} + + From e87df03f37c23e3cd7a4f05b4c61ddaa4d8ea3c3 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 15 Dec 2015 09:25:32 +0900 Subject: [PATCH 12/72] An Example of a Top-Level Class --- .../hadeslee/BJ8LF/innerclasses/TopLevel.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerclasses/TopLevel.java diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/TopLevel.java b/src/test/java/tk/hadeslee/BJ8LF/innerclasses/TopLevel.java new file mode 100644 index 0000000..43afbde --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerclasses/TopLevel.java @@ -0,0 +1,22 @@ +package tk.hadeslee.BJ8LF.innerclasses; + +/** + * Project: java8-examples + * FileName: TopLevel + * Date: 2015-12-15 + * Time: 오전 9:24 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class TopLevel { + private int value = 101; + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } +} From 665b239f651972805b268b622a90285ab3ddf89e Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 15 Dec 2015 09:26:27 +0900 Subject: [PATCH 13/72] An Example of a Top-Level Class --- .../tk/hadeslee/BJ8LF/innerclasses/Outer.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerclasses/Outer.java diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Outer.java b/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Outer.java new file mode 100644 index 0000000..0df96bd --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Outer.java @@ -0,0 +1,16 @@ +package tk.hadeslee.BJ8LF.innerclasses; + +/** + * Project: java8-examples + * FileName: Outer + * Date: 2015-12-15 + * Time: 오전 9:25 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class Outer { + public class Inner { + + } +} From 4c8a286930e721b653554715068889dcff631271 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 15 Dec 2015 09:29:15 +0900 Subject: [PATCH 14/72] Tire Is a Member Inner Class of the Car Class --- .../tk/hadeslee/BJ8LF/innerclasses/Car.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java b/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java new file mode 100644 index 0000000..04b1f3c --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java @@ -0,0 +1,26 @@ +package tk.hadeslee.BJ8LF.innerclasses; + +/** + * Project: java8-examples + * FileName: Car + * Date: 2015-12-15 + * Time: 오전 9:26 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class Car { + //A member variable for the Car class + private int year; + + //A member inner class named Tire + public class Tire { + //A member variable for the Tire class + private double radius; + + //Constructor for the Tire class + public Tire(double radius) { + this.radius = radius; + } + } +} From ada21cd9bae4344092dbe99ba6161a8f2084dd0b Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 15 Dec 2015 09:34:08 +0900 Subject: [PATCH 15/72] Tire Is a Member Inner Class of the Car Class --- .../java/tk/hadeslee/BJ8LF/innerclasses/Car.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java b/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java index 04b1f3c..6cbf4ca 100644 --- a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java +++ b/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java @@ -15,6 +15,7 @@ public class Car { //A member inner class named Tire public class Tire { + //A member variable for the Tire class private double radius; @@ -22,5 +23,20 @@ public class Tire { public Tire(double radius) { this.radius = radius; } + + //A member method for the Tire class + public double getRadius() { + return radius; + } + }//member inner class declaration ends here + + //A constructor for the Car class + public Car(int year) { + this.year = year; + } + + //A member method for the Car class + public int getYear() { + return year; } } From 690645046c0a42faf57a1d5e3f1d5be838a1e36b Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 16 Dec 2015 00:37:02 +0900 Subject: [PATCH 16/72] Types of Inner Classes --- .idea/sonarIssues.xml | 10 ++++++++++ .../java/tk/hadeslee/BJ8LF/innerraclasses}/Car.java | 2 +- .../java/tk/hadeslee/BJ8LF/innerraclasses}/Outer.java | 2 +- .../tk/hadeslee/BJ8LF/innerraclasses}/TopLevel.java | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) rename src/{test/java/tk/hadeslee/BJ8LF/innerclasses => main/java/tk/hadeslee/BJ8LF/innerraclasses}/Car.java (95%) rename src/{test/java/tk/hadeslee/BJ8LF/innerclasses => main/java/tk/hadeslee/BJ8LF/innerraclasses}/Outer.java (85%) rename src/{test/java/tk/hadeslee/BJ8LF/innerclasses => main/java/tk/hadeslee/BJ8LF/innerraclasses}/TopLevel.java (90%) diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index 6efe393..607ba33 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -43,6 +43,11 @@ + + + + + @@ -243,6 +248,11 @@ + + + + + diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Car.java similarity index 95% rename from src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java rename to src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Car.java index 6cbf4ca..fb1307b 100644 --- a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Car.java +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Car.java @@ -1,4 +1,4 @@ -package tk.hadeslee.BJ8LF.innerclasses; +package tk.hadeslee.BJ8LF.innerraclasses; /** * Project: java8-examples diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Outer.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java similarity index 85% rename from src/test/java/tk/hadeslee/BJ8LF/innerclasses/Outer.java rename to src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java index 0df96bd..e7cc5ae 100644 --- a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/Outer.java +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java @@ -1,4 +1,4 @@ -package tk.hadeslee.BJ8LF.innerclasses; +package tk.hadeslee.BJ8LF.innerraclasses; /** * Project: java8-examples diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/TopLevel.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TopLevel.java similarity index 90% rename from src/test/java/tk/hadeslee/BJ8LF/innerclasses/TopLevel.java rename to src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TopLevel.java index 43afbde..02048ae 100644 --- a/src/test/java/tk/hadeslee/BJ8LF/innerclasses/TopLevel.java +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TopLevel.java @@ -1,4 +1,4 @@ -package tk.hadeslee.BJ8LF.innerclasses; +package tk.hadeslee.BJ8LF.innerraclasses; /** * Project: java8-examples From 60dd6679073deed3b95e8ad8085be5bccda631ad Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 16 Dec 2015 00:48:33 +0900 Subject: [PATCH 17/72] Local Inner Classes --- .idea/sonarIssues.xml | 10 +++++ .../BJ8LF/innerraclasses/TitleList.java | 43 +++++++++++++++++++ .../BJ8LF/innerraclasses/TitleListTest.java | 31 +++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TitleList.java create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerraclasses/TitleListTest.java diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index 607ba33..c5960f0 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -48,6 +48,11 @@ + + + + + @@ -278,6 +283,11 @@ + + + + + diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TitleList.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TitleList.java new file mode 100644 index 0000000..a8fa85d --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TitleList.java @@ -0,0 +1,43 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * Project: java8-examples + * FileName: TitleList + * Date: 2015-12-16 + * Time: 오전 12:38 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class TitleList { + private ArrayList titleList = new ArrayList<>(); + + public void addTitle(String titile) { + titleList.add(titile); + } + + public void removeTitle(String titile) { + titleList.remove(titile); + } + + public Iterator titleIterator() { + class TitleIterator implements Iterator { + int count = 0; + + @Override + public boolean hasNext() { + return (count < titleList.size()); + } + + @Override + public String next() { + return titleList.get(count++); + } + } + TitleIterator titleIterator = new TitleIterator(); + return titleIterator; + } +} diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/TitleListTest.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/TitleListTest.java new file mode 100644 index 0000000..29e8492 --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/TitleListTest.java @@ -0,0 +1,31 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +import junit.framework.TestCase; +import org.junit.Test; + +/** + * Project: java8-examples + * FileName: TitleListTest + * Date: 2015-12-16 + * Time: 오전 12:47 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class TitleListTest extends TestCase { + + @Test + public void testAddTitle() throws Exception { + + } + + @Test + public void testRemoveTitle() throws Exception { + + } + + @Test + public void testTitleIterator() throws Exception { + + } +} \ No newline at end of file From af4febabf24e9ce1fbccc985ae8384395c0891f3 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Thu, 17 Dec 2015 09:51:42 +0900 Subject: [PATCH 18/72] shows how to use the titileIterator() method of the titleList class --- .../BJ8LF/innerraclasses/TitleListTest.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/TitleListTest.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/TitleListTest.java index 29e8492..d7527b5 100644 --- a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/TitleListTest.java +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/TitleListTest.java @@ -1,7 +1,8 @@ package tk.hadeslee.BJ8LF.innerraclasses; import junit.framework.TestCase; -import org.junit.Test; + +import java.util.Iterator; /** * Project: java8-examples @@ -14,18 +15,19 @@ */ public class TitleListTest extends TestCase { - @Test - public void testAddTitle() throws Exception { - - } + public static void main(String[] args) { + TitleList tl = new TitleList(); - @Test - public void testRemoveTitle() throws Exception { - - } + //Add two titles + tl.addTitle("Beginning Java 8"); + tl.addTitle("Scripting in Java"); - @Test - public void testTitleIterator() throws Exception { + //Get the iterator + Iterator iterator = tl.titleIterator(); + //Ptint all titles using the iterator + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } } } \ No newline at end of file From 8ed42719e0a3ec823855c18e4573873c6f14f77c Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 18 Dec 2015 09:28:32 +0900 Subject: [PATCH 19/72] someTopLeveClass is a top-level class --- .../BJ8LF/innerraclasses/SomeTopLeveClass.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/SomeTopLeveClass.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/SomeTopLeveClass.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/SomeTopLeveClass.java new file mode 100644 index 0000000..5deec28 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/SomeTopLeveClass.java @@ -0,0 +1,18 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: SomeTopLeveClass + * Date: 2015-12-18 + * Time: 오전 9:21 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class SomeTopLeveClass { + public void someMethod() { + class SomeLovalInnerClass { + + } + } +} From 0defc4d2f616fcf8b93734393be178d25627893c Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 18 Dec 2015 09:31:21 +0900 Subject: [PATCH 20/72] Declaring a top-level class, Which Is Used as the Superclass for a Local Class --- .../BJ8LF/innerraclasses/RandomInteger.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/RandomInteger.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/RandomInteger.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/RandomInteger.java new file mode 100644 index 0000000..1c94b88 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/RandomInteger.java @@ -0,0 +1,22 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +import java.util.Random; + +/** + * Project: java8-examples + * FileName: RandomInteger + * Date: 2015-12-18 + * Time: 오전 9:29 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class RandomInteger { + + protected Random rand = new Random(); + + public int getValue() { + return rand.nextInt(); + + } +} From 4dde7285f17927860145f813ab5d8b5b53561ddf Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 18 Dec 2015 10:05:16 +0900 Subject: [PATCH 21/72] The RandomInteger class contains a getValue() method --- .../BJ8LF/innerraclasses/RandomLocal.java | 26 ++++++++++++++++ .../BJ8LF/innerraclasses/LocalInnerTest.java | 30 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/RandomLocal.java create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerraclasses/LocalInnerTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/RandomLocal.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/RandomLocal.java new file mode 100644 index 0000000..89deaf2 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/RandomLocal.java @@ -0,0 +1,26 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: RandomLocal + * Date: 2015-12-18 + * Time: 오전 9:51 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class RandomLocal { + public RandomInteger getRandomInteger() { + class RandomIntegerLocal extends RandomInteger { + @Override + public int getValue() { + long n1 = rand.nextInt(); + long n2 = rand.nextInt(); + + int value = (int) ((n1 + n2) / 2); + return value; + } + } + return new RandomIntegerLocal(); + } +} diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/LocalInnerTest.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/LocalInnerTest.java new file mode 100644 index 0000000..564b799 --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/LocalInnerTest.java @@ -0,0 +1,30 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +import junit.framework.TestCase; + +/** + * Project: java8-examples + * FileName: LocalInnerTest + * Date: 2015-12-18 + * Time: 오전 9:57 + * Author: Hades Lee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class LocalInnerTest extends TestCase { + public static void main(String[] args) { + RandomInteger rTop = new RandomInteger(); + System.out.println("Random integers using Top-level class:"); + System.out.println(rTop.getValue()); + System.out.println(rTop.getValue()); + System.out.println(rTop.getValue()); + + RandomLocal local = new RandomLocal(); + RandomInteger rLocal = local.getRandomInteger(); + System.out.println("\nRandom integer using local inner class:"); + System.out.println(rLocal.getValue()); + System.out.println(rLocal.getValue()); + System.out.println(rLocal.getValue()); + } + +} \ No newline at end of file From 4badc61f46047c6350f2593a607ff67acbaac091 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sat, 19 Dec 2015 06:06:10 +0900 Subject: [PATCH 22/72] An Anonymous Class Example --- .idea/sonarIssues.xml | 5 +++++ .../BJ8LF/innerraclasses/HelloAnonymous.java | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/HelloAnonymous.java diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index c5960f0..c650967 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -48,6 +48,11 @@ + + + + + diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/HelloAnonymous.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/HelloAnonymous.java new file mode 100644 index 0000000..8ef6795 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/HelloAnonymous.java @@ -0,0 +1,22 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: HelloAnonymous + * Date: 2015-12-19 + * Time: 오전 6:03 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class HelloAnonymous { + public static void main(String[] args) { + new Object() { + //An instance initializer + { + System.out.println("Hello from an anonymous class"); + + } + }; //A semi-colon is necessary to end the statement + } +} From d03fb1d295d52b96da142c7024ba8dbd3fd2c703 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sun, 20 Dec 2015 00:25:07 +0900 Subject: [PATCH 23/72] The TitleList class Rewritten Using an Anonymous Class as TitleListWithInnerClass --- .idea/sonarIssues.xml | 5 +++ .../titleListWithInnerClass.java | 43 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/titleListWithInnerClass.java diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index c650967..fb00e75 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -58,6 +58,11 @@ + + + + + diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/titleListWithInnerClass.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/titleListWithInnerClass.java new file mode 100644 index 0000000..2d22830 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/titleListWithInnerClass.java @@ -0,0 +1,43 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * Project: java8-examples + * FileName: titleListWithInnerClass + * Date: 2015-12-20 + * Time: 오전 12:19 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class titleListWithInnerClass { + private ArrayList titleList = new ArrayList<>(); + + public void addTitle(String title) { + titleList.add(title); + } + + public void removeTitle(String title) { + titleList.remove(title); + } + + public Iterator titleIterator() { + //An anonymous class + Iterator iterator = new Iterator() { + int count = 0; + + @Override + public boolean hasNext() { + return (count < titleList.size()); + } + + @Override + public String next() { + return titleList.get(count++); + } + };//Anonymous inner class end here + return iterator; + } +} From 762dd120f9e6b6021f9f882f406d43a841bb2b80 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 21 Dec 2015 10:46:58 +0900 Subject: [PATCH 24/72] Anoymous inner class that inherits the RandomInteger class --- .../innerraclasses/titleListWithInnerClass.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/titleListWithInnerClass.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/titleListWithInnerClass.java index 2d22830..813e040 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/titleListWithInnerClass.java +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/titleListWithInnerClass.java @@ -40,4 +40,19 @@ public String next() { };//Anonymous inner class end here return iterator; } + + public RandomInteger getRandomInteger() { + //Anoymous inner class that inherits the RandomInteger class + return new RandomInteger() { + public int getValue() { + //Get two random integers and return + //the average ignoring the faction part + long n1 = rand.nextInt(); + long n2 = rand.nextInt(); + + int value = (int) ((n1 + n2) / 2); + return value; + } + }; + } } From 311cbbd24ac0bd426a46f26c515f1ee78300de87 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 22 Dec 2015 09:04:42 +0900 Subject: [PATCH 25/72] A static member class is not an inner class --- .../tk/hadeslee/BJ8LF/innerraclasses/A.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/A.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/A.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/A.java new file mode 100644 index 0000000..d41cb6d --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/A.java @@ -0,0 +1,17 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: A + * Date: 2015-12-22 + * Time: 오전 9:03 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class A { + //Static member class + public static class B { + //Body for class B goes here + } +} From ea25f934e5e7a6040171d0decd70e96c8a44c917 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 22 Dec 2015 09:10:01 +0900 Subject: [PATCH 26/72] A static member class is not an inner class --- .../innerraclasses/ComputerAccessory.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ComputerAccessory.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ComputerAccessory.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ComputerAccessory.java new file mode 100644 index 0000000..89e0c5a --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ComputerAccessory.java @@ -0,0 +1,37 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: ComputerAccessory + * Date: 2015-12-22 + * Time: 오전 9:05 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ComputerAccessory { + //Static member class - Monitor + public static class Monitor { + private int size; + + public Monitor(int size) { + this.size = size; + } + + public String toString() { + return "Monitor - size:" + this.size + " inch"; + } + } + + public static class keyboard { + private int key; + + public keyboard(int key) { + this.key = key; + } + + public String toString() { + return "keyboard - Keys:" + this.key; + } + } +} From 79fcf66cbbc9fef7fcdbd04c1af59744c3900847 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 22 Dec 2015 09:25:01 +0900 Subject: [PATCH 27/72] A static member class is not an inner class --- .../innerraclasses/ComputerAccessoryTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerraclasses/ComputerAccessoryTest.java diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/ComputerAccessoryTest.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/ComputerAccessoryTest.java new file mode 100644 index 0000000..c1ea972 --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/ComputerAccessoryTest.java @@ -0,0 +1,31 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: ComputerAccessoryTest + * Date: 2015-12-22 + * Time: 오전 9:10 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ + +public class ComputerAccessoryTest { + + public static void main(String[] args) { + //Create two monitors + ComputerAccessory.Monitor m17 = new ComputerAccessory.Monitor(17); + ComputerAccessory.Monitor m19 = new ComputerAccessory.Monitor(19); + + //Create two Keyboard + ComputerAccessory.keyboard k122 = new ComputerAccessory.keyboard(122); + ComputerAccessory.keyboard k142 = new ComputerAccessory.keyboard(142); + + System.out.println(m17); + System.out.println(m19); + + System.out.println(k122); + System.out.println(k142); + } + +} \ No newline at end of file From 14f9379d3035e09c413a003dd36f4fa5a27912bf Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 23 Dec 2015 09:16:52 +0900 Subject: [PATCH 28/72] Creating Objects of a Member Inner class --- .../BJ8LF/innerraclasses/CarTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerraclasses/CarTest.java diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/CarTest.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/CarTest.java new file mode 100644 index 0000000..458b6ac --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/CarTest.java @@ -0,0 +1,25 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: CarTest + * Date: 2015-12-23 + * Time: 오전 9:11 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class CarTest { + public static void main(String[] args) { + //Create an instance of Car with year as 2015 + Car c = new Car(2015); + + //Create a Tire for that car of 9.0 inch radius + Car.Tire t = c.new Tire(9.0); + + System.out.println("Car's year:" + c.getYear()); + System.out.println("Car's tire radius:" + t.getRadius()); + } + + +} \ No newline at end of file From 3fe59306d5f6c848b65f820dcdc9dd4134103a89 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 23 Dec 2015 09:22:34 +0900 Subject: [PATCH 29/72] Accessing Enclosing Class members --- .../tk/hadeslee/BJ8LF/innerraclasses/Outer.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java index e7cc5ae..3c88ad4 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java @@ -10,7 +10,22 @@ * To change this template use File | Settings | File Templates. */ public class Outer { + private int value = 1116; + + //Inner class starts here public class Inner { + public void printValue() { + System.out.println("Inner: Value =" + value); + } //Inner class ends here + } + + //Instance method for the Outer class + public void printValue() { + System.out.println("outer : Value =" + value); + } + //Another instance method for the Outer class + public void setValue(int newValue) { + this.value = newValue; } } From 78216d414eb567ee65b1baa9beff4056a13dd5a9 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 23 Dec 2015 09:34:47 +0900 Subject: [PATCH 30/72] Accessing Enclosing Class members --- .../hadeslee/BJ8LF/innerraclasses/Outer.java | 4 +-- .../BJ8LF/innerraclasses/OuterTest.java | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerraclasses/OuterTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java index 3c88ad4..6aef100 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Outer.java @@ -15,13 +15,13 @@ public class Outer { //Inner class starts here public class Inner { public void printValue() { - System.out.println("Inner: Value =" + value); + System.out.println("Inner: Value = " + value); } //Inner class ends here } //Instance method for the Outer class public void printValue() { - System.out.println("outer : Value =" + value); + System.out.println("outer : Value = " + value); } //Another instance method for the Outer class diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/OuterTest.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/OuterTest.java new file mode 100644 index 0000000..cc7f3f2 --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/OuterTest.java @@ -0,0 +1,28 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: OuterTest + * Date: 2015-12-23 + * Time: 오전 9:26 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class OuterTest { + public static void main(String[] args) { + Outer out = new Outer(); + Outer.Inner in = out.new Inner(); + + //Print the value + out.printValue(); + in.printValue(); + + //Set a new value + out.setValue(828); + + //Print the value + out.printValue(); + in.printValue(); + } +} \ No newline at end of file From 5fdb344904017e7d8319556a97ecb12d872cb0e7 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 23 Dec 2015 09:57:20 +0900 Subject: [PATCH 31/72] Use of the keyword this Qualidied with the Class Name --- .../BJ8LF/innerraclasses/QualifiedThis.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/QualifiedThis.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/QualifiedThis.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/QualifiedThis.java new file mode 100644 index 0000000..a8774ec --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/QualifiedThis.java @@ -0,0 +1,46 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: QualifiedThis + * Date: 2015-12-23 + * Time: 오전 9:48 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class QualifiedThis { + //Instance variable - value + + private int value = 828; + + public void printValue() { + //Print value using simple name of instance variavle + System.out.println("value = " + value); + + //Print value using keyword this + System.out.println("this.value = " + this.value); + + //Print value using keyword this qualified with the class name + System.out.println("QualifiedThis.this.value= " + QualifiedThis.this.value); + } + + public void printHiddenValue() { + //Declare a local variable value, which hides the value instance variable + int value = 131; + + //Print value using simple name, which refers to the local variable - 131 + System.out.println("value = " + value); + + //Print value using keyword this, which refers to the instance + ///variable value with value 828 + System.out.println("this.value= " + this.value); + + //Print value using keyword this qualidied with the class name, + //which refers to instance variable value as 828 + System.out.println("QualifedThis.this.value= " + QualifiedThis.this.value); + + } + + +} From ed94fade4cb4eef5ba6580aa513ce1dc704de522 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 23 Dec 2015 10:08:17 +0900 Subject: [PATCH 32/72] Use of the keyword this Qualidied with the Class Name --- .../innerraclasses/QualifiedThisTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerraclasses/QualifiedThisTest.java diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/QualifiedThisTest.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/QualifiedThisTest.java new file mode 100644 index 0000000..6b426a2 --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/QualifiedThisTest.java @@ -0,0 +1,22 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: QualifiedThisTest + * Date: 2015-12-23 + * Time: 오전 10:06 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class QualifiedThisTest { + public static void main(String[] args) { + QualifiedThis qt = new QualifiedThis(); + System.out.println("printValue():"); + qt.printValue(); + + System.out.println("\nprintHiddenValue():"); + qt.printHiddenValue(); + } + +} \ No newline at end of file From 3feff944406bb8d57d62250eff0bd1b2a472d46f Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 23 Dec 2015 10:51:50 +0900 Subject: [PATCH 33/72] Use of the keyword this Qualidied with the Class Name --- .idea/findbugs-idea.xml | 1 + .../BJ8LF/innerraclasses/TopLevelOuter.java | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TopLevelOuter.java diff --git a/.idea/findbugs-idea.xml b/.idea/findbugs-idea.xml index cc8b77f..e12923b 100644 --- a/.idea/findbugs-idea.xml +++ b/.idea/findbugs-idea.xml @@ -26,6 +26,7 @@ + diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TopLevelOuter.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TopLevelOuter.java new file mode 100644 index 0000000..3d29c46 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/TopLevelOuter.java @@ -0,0 +1,31 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: TopLevelOuter + * Date: 2015-12-23 + * Time: 오전 10:45 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class TopLevelOuter { + private int v1 = 100; + + //Here, only v1 is in scope + public class InnerLevelOne { + private int v2 = 200; + + //Here, only v1 and v2 are in socpe + public class InnerLevelTwo { + private int v3 = 300; + + //Here, only v1,v2 and v3 in scope + public class InnerLevelThree { + private int v4 = 400; + + //Here, all v1, v2, v3 and v4 are in scopr + } + } + } +} From 18eac73bd93cd93ba7ed9f620427fcd4a91de052 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 23 Dec 2015 10:58:07 +0900 Subject: [PATCH 34/72] Use of the keyword this Qualidied with the Class Name --- .../BJ8LF/innerraclasses/ModifiedOuter2.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2.java new file mode 100644 index 0000000..6cee165 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2.java @@ -0,0 +1,40 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: ModifiedOuter2 + * Date: 2015-12-23 + * Time: 오전 10:52 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ModifiedOuter2 { + //Instance variable for ModifiedOuter2 class + private int value = 1116; + + //Inner class start here + public class Inner { + //Instance variable for Inner class + private int value = 1720; + + public void printValue() { + System.out.println("\nInner - printValue()..."); + System.out.println("Inner: Value = " + value); + //System.out.println("Outer: Value = " + ModifiedOuter2.value); + } + } //Inner class ends here + + //Instance method for ModifiedOuter2 class + public void printValue() { + System.out.println("\nOuter = printValue()..."); + System.out.println("Outer: Value = " + value); + } + + //Anther instance method for the ModifiedOuter2 class + public void setValue(int newValue) { + System.out.println("\nSetting Outer's value to " + newValue); + this.value = newValue; + } + +} From b03ef7857670808b8a908ad73c5c1b19d9be3388 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 23 Dec 2015 11:01:02 +0900 Subject: [PATCH 35/72] Use of the keyword this Qualidied with the Class Name --- .../BJ8LF/innerraclasses/ModifiedOuter2.java | 2 +- .../innerraclasses/ModifiedOuter2Test.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2Test.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2.java index 6cee165..72b7601 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2.java +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2.java @@ -21,7 +21,7 @@ public class Inner { public void printValue() { System.out.println("\nInner - printValue()..."); System.out.println("Inner: Value = " + value); - //System.out.println("Outer: Value = " + ModifiedOuter2.value); + System.out.println("Outer: Value = " + ModifiedOuter2.this.value); } } //Inner class ends here diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2Test.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2Test.java new file mode 100644 index 0000000..5c1c41c --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/ModifiedOuter2Test.java @@ -0,0 +1,29 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: ModifiedOuter2Test + * Date: 2015-12-23 + * Time: 오전 10:58 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ModifiedOuter2Test { + public static void main(String[] args) { + ModifiedOuter2 out = new ModifiedOuter2(); + ModifiedOuter2.Inner in = out.new Inner(); + + //Print the value + out.printValue(); + in.printValue(); + + //Set a new value + out.setValue(828); + + //print the value + out.printValue(); + in.printValue(); + } + +} \ No newline at end of file From cba49cb9a8c57bfcfbd1f51749394326976e61d3 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Thu, 24 Dec 2015 09:55:07 +0900 Subject: [PATCH 36/72] Generated Class Files for Inner Classes --- .../BJ8LF/innerraclasses/InnerClassFile.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/InnerClassFile.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/InnerClassFile.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/InnerClassFile.java new file mode 100644 index 0000000..cd05482 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/InnerClassFile.java @@ -0,0 +1,51 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: InnerClassFile + * Date: 2015-12-24 + * Time: 오전 9:51 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class InnerClassFile { + public class MemberInnerClass { + + } + + public static class StaticInnerClass { + + } + + public void testMethod1() { + //A local class + class LocalInnerClass { + //A local class + class LocalInnerClass2 { + + } + } + //A local class + class AnotherLocalInnerClass { + + } + + //Anonymous Inner class + new Object() { + + }; + } + + public void testMethod2() { + //A local class. Its name is the same as a local class in testMethod1() method + class AnotherLocalInnerClass { + + } + + //Another local class + class TestLocalClass { + + } + } +} From 286fccea21257c63ccc708897891f3c6a3ae355a Mon Sep 17 00:00:00 2001 From: hadesyi Date: Thu, 24 Dec 2015 10:36:49 +0900 Subject: [PATCH 37/72] A callable interface to Implement a callback mechanism --- .idea/findbugs-idea.xml | 2 +- .../tk/hadeslee/BJ8LF/innerraclasses/Callable.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Callable.java diff --git a/.idea/findbugs-idea.xml b/.idea/findbugs-idea.xml index e12923b..1d997b2 100644 --- a/.idea/findbugs-idea.xml +++ b/.idea/findbugs-idea.xml @@ -26,7 +26,7 @@ - + diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Callable.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Callable.java new file mode 100644 index 0000000..b5db1ac --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/Callable.java @@ -0,0 +1,14 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: Callable + * Date: 2015-12-24 + * Time: 오전 10:35 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public interface Callable { + void call(); +} From c0391cb7a8b33d118b46430298389a6d79244c7c Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 25 Dec 2015 04:48:32 +0900 Subject: [PATCH 38/72] Accessing Local Variables Inside localclasses --- .idea/sonarIssues.xml | 5 +++ .../AccessingLocalVariables.java | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/innerraclasses/AccessingLocalVariables.java diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index fb00e75..585759f 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -48,6 +48,11 @@ + + + + + diff --git a/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/AccessingLocalVariables.java b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/AccessingLocalVariables.java new file mode 100644 index 0000000..ac467a0 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/innerraclasses/AccessingLocalVariables.java @@ -0,0 +1,31 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +/** + * Project: java8-examples + * FileName: AccessingLocalVariables + * Date: 2015-12-25 + * Time: 오전 4:44 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class AccessingLocalVariables { + public static void main(String[] args) { + int x = 100; + final int y = 200; + + class LocalInner { + void print() { + //Accessing the local varibale x is fine as + //it is effectively final. + System.out.println("x = " + x); + + //The local variable y is effectively final as + //it has been declared final. + System.out.println("y = " + y); + } + } + LocalInner li = new LocalInner(); + li.print(); + } +} From da1bbd6dfa2600a05056793331b44f48070ac241 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sat, 26 Dec 2015 01:18:02 +0900 Subject: [PATCH 39/72] reflecting on a class --- .idea/sonarIssues.xml | 5 ++ .../tk/hadeslee/BJ8LF/reflection/person.java | 57 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/person.java diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index 585759f..fe13892 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -68,6 +68,11 @@ + + + + + diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/person.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/person.java new file mode 100644 index 0000000..3a84a6a --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/person.java @@ -0,0 +1,57 @@ +package tk.hadeslee.BJ8LF.reflection; + +import java.io.Serializable; + +/** + * Project: java8-examples + * FileName: person + * Date: 2015-12-25 + * Time: 오전 4:57 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class person implements Cloneable, Serializable { + private int id = -1; + private String name = "Unknown"; + + public person() { + } + + public person(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Object clone(){ + try { + return super.clone(); + }catch (CloneNotSupportedException e) { + throw new RuntimeException(e.getMessage()); + } + } + + @Override + public String toString() { + return "person{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } +} From 3c3f9be10b880ea33f0b8f17e25c63f0baa173b9 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sat, 26 Dec 2015 23:59:08 +0900 Subject: [PATCH 40/72] reflecting on a class --- .idea/sonarIssues.xml | 5 + .../BJ8LF/reflection/ClassReflection.java | 100 ++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/ClassReflection.java diff --git a/.idea/sonarIssues.xml b/.idea/sonarIssues.xml index fe13892..a13510a 100644 --- a/.idea/sonarIssues.xml +++ b/.idea/sonarIssues.xml @@ -68,6 +68,11 @@ + + + + + diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/ClassReflection.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/ClassReflection.java new file mode 100644 index 0000000..0483df8 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/ClassReflection.java @@ -0,0 +1,100 @@ +package tk.hadeslee.BJ8LF.reflection; + +import tk.hadeslee.Lambda_Expressions.String_Compararors_Filters.Person; + +import java.lang.reflect.Modifier; +import java.lang.reflect.TypeVariable; + +/** + * Project: java8-examples + * FileName: ClassReflection + * Date: 2015-12-26 + * Time: 오전 1:30 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ClassReflection { + public static void main(String[] args) { + String classDesciption = getClassDescription(Person.class); + System.out.println(classDesciption); + } + + private static String getClassDescription(Class c) { + StringBuilder classDesc = new StringBuilder(); + + int modfierBits = 0; + + String keyword = ""; + + if (c.isPrimitive()) { + + } else if (c.isInterface()) { + modfierBits = c.getModifiers() & Modifier.interfaceModifiers(); + + if (c.isAnnotation()) { + keyword = "@interface"; + } else { + keyword = "interface"; + } + } else if (c.isEnum()) { + modfierBits = c.getModifiers() & Modifier.classModifiers(); + keyword = "enum"; + } else { + modfierBits = c.getModifiers() & Modifier.classModifiers(); + keyword = "class"; + } + String modifiers = Modifier.toString(modfierBits); + + classDesc.append(modifiers); + classDesc.append(" " + keyword); + + String simpleName = c.getSimpleName(); + classDesc.append(" " + simpleName); + + String genericParms = getGenericTypeParams(c); + classDesc.append(genericParms); + + Class superClass = c.getSuperclass(); + if (superClass != null) { + String superClassSimpleName = superClass.getSimpleName(); + classDesc.append(" extends " + superClassSimpleName); + } + + String interfaces = ClassReflection.getClassDescription(c); + if (interfaces != null) { + classDesc.append(" implements " + interfaces); + } + return classDesc.toString(); + } + + public static String getClassInterfaces(Class c) { + Class[] interfaces = c.getInterfaces(); + String interfacesList = null; + if (interfaces.length > 0) { + String[] interfaceNames = new String[interfaces.length]; + for (int i = 0; i < interfaces.length; i++) { + interfaceNames[i] = interfaces[i].getSimpleName(); + } + interfacesList = String.join(", ", interfaceNames); + } + return interfacesList; + } + + private static String getGenericTypeParams(Class c) { + StringBuilder sb = new StringBuilder(); + TypeVariable[] typeParms = c.getTypeParameters(); + + if (typeParms.length > 0) { + String[] paramNames = new String[typeParms.length]; + for (int i = 0; i < typeParms.length; i++) { + paramNames[i] = typeParms[i].getTypeName(); + } + sb.append('<'); + String parmsList = String.join(",", paramNames); + sb.append(parmsList); + sb.append('>'); + } + return sb.toString(); + } +} From 69dafe27c986807a6c2ebb20e302cdaed6108b11 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sun, 27 Dec 2015 00:27:49 +0900 Subject: [PATCH 41/72] reflecting on a class --- .../BJ8LF/reflection/FieldReflection.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/FieldReflection.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldReflection.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldReflection.java new file mode 100644 index 0000000..67f8de7 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldReflection.java @@ -0,0 +1,66 @@ +package tk.hadeslee.BJ8LF.reflection; + + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; + + + +/** + * Project: java8-examples + * FileName: FieldReflection + * Date: 2015-12-27 + * Time: 오전 12:00 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class FieldReflection { + public static void main(String[] args) { + Class c = Person.class; + + ArrayList fieldsDesciption = getDeclaredfieldsList(c); + + System.out.println("Declareds Fields for " + c.getName()); + for (String desc : fieldsDesciption) { + System.out.println(desc); + } + + fieldsDesciption = getFieldsList(c); + + System.out.println("\nAccessible Fields for " + c.getName()); + for (String desc : fieldsDesciption) { + System.out.println(desc); + } + } + + private static ArrayList getDeclaredfieldsList(Class c) { + Field[] fields = c.getDeclaredFields(); + ArrayList fieldsList = getFieldsDesciption(fields); + return fieldsList; + } + + private static ArrayList getFieldsList(Class c) { + Field[] fields = c.getFields(); + ArrayList fieldsList = getFieldsDesciption(fields); + return fieldsList; + } + + public static ArrayList getFieldsDesciption(Field[] fields) { + ArrayList fieldList = new ArrayList<>(); + for (Field f : fields) { + int mod = f.getModifiers() & Modifier.fieldModifiers(); + String modifiers = Modifier.toString(mod); + + Class type = f.getType(); + String typeName = type.getTypeName(); + + String fieldName = f.getName(); + + fieldList.add(modifiers + " " + typeName + " " + fieldName); + } + return fieldList; + } + +} From 7bb1b5db590b90d88c07642155b56e8be3457e87 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 28 Dec 2015 10:42:25 +0900 Subject: [PATCH 42/72] A callable interface to Implement a callback mechanism --- .../BJ8LF/reflection/FieldReflection.java | 2 + .../BJ8LF/innerraclasses/CallbackTest.java | 48 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/test/java/tk/hadeslee/BJ8LF/innerraclasses/CallbackTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldReflection.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldReflection.java index 67f8de7..01066e4 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldReflection.java +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldReflection.java @@ -1,6 +1,8 @@ package tk.hadeslee.BJ8LF.reflection; +import tk.hadeslee.Lambda_Expressions.String_Compararors_Filters.Person; + import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; diff --git a/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/CallbackTest.java b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/CallbackTest.java new file mode 100644 index 0000000..b8c4007 --- /dev/null +++ b/src/test/java/tk/hadeslee/BJ8LF/innerraclasses/CallbackTest.java @@ -0,0 +1,48 @@ +package tk.hadeslee.BJ8LF.innerraclasses; + +import java.util.ArrayList; + +/** + * Project: java8-examples + * FileName: CallbackTest + * Date: 2015-12-24 + * Time: 오전 10:37 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class CallbackTest { + //To hold all registered Callback objects + private ArrayList callableList = new ArrayList<>(); + + public static void main(String[] args) { + CallbackTest cbt = new CallbackTest(); + + //Create three callable object and register them + Callable c1 = cbt.generateCallable(1); + } + + private void callback() { + int count = this.callableList.size(); + + for (int i = 0; i < count; i++) { + Callable c = this.callableList.get(i); + c.call(); + } + } + + + public void register(Callable c) { + this.callableList.add(c); + } + + private Callable generateCallable(int no) { + Callable c = new Callable() { + public void call() { + System.out.println("Called #" + no); + } + }; + return c; + } + +} \ No newline at end of file From 82dd2e50e599bee54283e6e49f1f9140adc835c1 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 28 Dec 2015 10:46:04 +0900 Subject: [PATCH 43/72] A Utility Class to get Information for an Executable --- .../BJ8LF/reflection/ExecutableUtil.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/ExecutableUtil.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/ExecutableUtil.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/ExecutableUtil.java new file mode 100644 index 0000000..455452d --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/ExecutableUtil.java @@ -0,0 +1,67 @@ +package tk.hadeslee.BJ8LF.reflection; + +import java.lang.reflect.*; +import java.util.ArrayList; + +/** + * Project: java8-examples + * FileName: ExecutableUtil + * Date: 2015-12-28 + * Time: 오전 10:43 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ExecutableUtil { + public static ArrayList getParameters(Executable exec) { + Parameter[] parms = exec.getParameters(); + ArrayList parmList = new ArrayList<>(); + for (int i = 0; i < parms.length; i++) { +// Get modifiers, type, and name of teh parameter + int mod = parms[i].getModifiers() & Modifier.parameterModifiers(); + String modifiers = Modifier.toString(mod); + String parmType = parms[i].getType().getSimpleName(); + String parmName = parms[i].getName(); + String temp = modifiers + " " + parmType + " " + parmName; +// Trim it as it may have leading spaces when modifiers are absent + parmList.add(temp.trim()); + } + return parmList; + } + + public static ArrayList getExceptionList(Executable exec) { + ArrayList exceptionList = new ArrayList<>(); + for (Class c : exec.getExceptionTypes()) { + exceptionList.add(c.getSimpleName()); + } + return exceptionList; + } + + public static String getThrowsClause(Executable exec) { + ArrayList exceptionList = getExceptionList(exec); + String exceptions = ExecutableUtil.arrayListToString(exceptionList, ","); + String throwsClause = ""; + if (exceptionList.size() > 0) { + throwsClause = "throws " + exceptions; + } + return throwsClause; + } + + public static String getModifiers(Executable exec) { +// Get the modifiers for the class + int mod = exec.getModifiers(); + if (exec instanceof Method) { + mod = mod & Modifier.methodModifiers(); + } else if (exec instanceof Constructor) { + mod = mod & Modifier.constructorModifiers(); + } + return Modifier.toString(mod); + } + + public static String arrayListToString(ArrayList list, String saparator) { + String[] tempArray = new String[list.size()]; + tempArray = list.toArray(tempArray); + String str = String.join(saparator, tempArray); + return str; + } +} From 6f36204310b0b24f2bc8eede1f3caed517729d85 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 29 Dec 2015 11:39:36 +0900 Subject: [PATCH 44/72] Reflecting on Methods of a Class --- .../BJ8LF/reflection/MethodReflection.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/MethodReflection.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/MethodReflection.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/MethodReflection.java new file mode 100644 index 0000000..14175b2 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/MethodReflection.java @@ -0,0 +1,70 @@ +package tk.hadeslee.BJ8LF.reflection; + +import tk.hadeslee.Lambda_Expressions.String_Compararors_Filters.Person; + +import java.lang.reflect.Method; +import java.util.ArrayList; + +/** + * Project: java8-examples + * FileName: MethodReflection + * Date: 2015-12-29 + * Time: 오전 11:34 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class MethodReflection { + public static void main(String[] args) { + Class c = Person.class; +// Get the declared methods + ArrayList methodsDesciption = getDeclaredMethodsList(c); + System.out.println("Declared Methods for " + c.getName()); + for (String desc : methodsDesciption) { + System.out.println(desc); + } + + /* Uncomment the following code to print all methods in the Person class +// Get the accessible public methods +methodsDesciption = getMethodsList(c); +System.out.println("\nMethods for " + c.getName()); +for (String desc : methodsDesciption) { +System.out.println(desc); +} +*/ + } + + public static ArrayList getMethodsList(Class c) { + Method[] methods = c.getMethods(); + ArrayList methodsList = getMethodsDesciption(methods); + return methodsList; + } + + public static ArrayList getDeclaredMethodsList(Class c) { + Method[] methods = c.getDeclaredMethods(); + ArrayList methodsList = getMethodsDesciption(methods); + return methodsList; + } + + public static ArrayList getMethodsDesciption(Method[] methods) { + ArrayList methodList = new ArrayList<>(); + for (Method m : methods) { + String modifiers = ExecutableUtil.getModifiers(m); + // Get the method return type + Class returnType = m.getReturnType(); + String returnTypeName = returnType.getSimpleName(); + // Get the name of the method + String methodName = m.getName(); + // Get the parameters of the method + ArrayList paramsList = ExecutableUtil.getParameters(m); + String params = ExecutableUtil.arrayListToString(paramsList, ","); + // Get the Exceptions thrown by method + String throwsClause = ExecutableUtil.getThrowsClause(m); + + + methodList.add(modifiers + " " + returnTypeName + " " + + methodName + "(" + params + ") " + throwsClause); + } + return methodList; + } +} From e92870fe303dbee9e580aa62ac18a16fa3c5bb4b Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 30 Dec 2015 09:34:24 +0900 Subject: [PATCH 45/72] Reflecting on Constructors of a Class --- .../reflection/ConstructorReflection.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java new file mode 100644 index 0000000..6e239a3 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java @@ -0,0 +1,46 @@ +package tk.hadeslee.BJ8LF.reflection; + +import tk.hadeslee.Lambda_Expressions.String_Compararors_Filters.Person; + +import java.lang.reflect.Constructor; +import java.util.ArrayList; + +/** + * Project: java8-examples + * FileName: ConstructorReflection + * Date: 2015-12-30 + * Time: 오전 9:33 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ConstructorReflection { + public static void main(String[] args) { + Class c = Person.class; +// Get the declared constructors + System.out.println("Constructors for " + c.getName()); + Constructor[] constructors = c.getConstructors(); + ArrayList constructDescList = getConstructorsDesciption(constructors); + for (String desc : constructDescList) { + System.out.println(desc); + } + } + + public static ArrayList getConstructorsDesciption(Constructor[] constructors) { + ArrayList constructorList = new ArrayList<>(); + for (Constructor constructor : constructors) { + String modifiers = ExecutableUtil.getModifiers(constructor); + // Get the name of the constructor + String constructorName = constructor.getName(); +// Get the parameters of the constructor + ArrayList paramsList = + ExecutableUtil.getParameters(constructor); + String params = ExecutableUtil.arrayListToString(paramsList, ","); +// Get the Exceptions thrown by the constructor + String throwsClause = ExecutableUtil.getThrowsClause(constructor); + constructorList.add(modifiers + " " + constructorName + + "(" + params + ") " + throwsClause); + } + return constructorList; + } +} \ No newline at end of file From 24e602cc191a74f48043952ddf80efb8d853d2ae Mon Sep 17 00:00:00 2001 From: hadesyi Date: Thu, 31 Dec 2015 01:47:53 +0900 Subject: [PATCH 46/72] Reflecting on Constructors of a Class --- .../tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java index 6e239a3..2ceb913 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java @@ -17,7 +17,7 @@ public class ConstructorReflection { public static void main(String[] args) { Class c = Person.class; -// Get the declared constructors + // Get the declared constructors System.out.println("Constructors for " + c.getName()); Constructor[] constructors = c.getConstructors(); ArrayList constructDescList = getConstructorsDesciption(constructors); @@ -32,11 +32,11 @@ public static ArrayList getConstructorsDesciption(Constructor[] construc String modifiers = ExecutableUtil.getModifiers(constructor); // Get the name of the constructor String constructorName = constructor.getName(); -// Get the parameters of the constructor + // Get the parameters of the constructor ArrayList paramsList = ExecutableUtil.getParameters(constructor); String params = ExecutableUtil.arrayListToString(paramsList, ","); -// Get the Exceptions thrown by the constructor + // Get the Exceptions thrown by the constructor String throwsClause = ExecutableUtil.getThrowsClause(constructor); constructorList.add(modifiers + " " + constructorName + "(" + params + ") " + throwsClause); From 19ef5ee5f674cf0df90e6a52ae375dbe055002e0 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Thu, 31 Dec 2015 01:49:06 +0900 Subject: [PATCH 47/72] Reflecting on Constructors of a Class --- .../java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java index 2ceb913..caa8c6b 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/ConstructorReflection.java @@ -30,6 +30,7 @@ public static ArrayList getConstructorsDesciption(Constructor[] construc ArrayList constructorList = new ArrayList<>(); for (Constructor constructor : constructors) { String modifiers = ExecutableUtil.getModifiers(constructor); + // Get the name of the constructor String constructorName = constructor.getName(); // Get the parameters of the constructor From 71a07d5714b84e0adbd09decf164b58820f11e90 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 1 Jan 2016 00:40:42 +0900 Subject: [PATCH 48/72] Creating an Object Using newInstance( ) Method of a Class Object --- .../BJ8LF/reflection/NewInstanceTest.java | 25 ++++++++ .../tk/hadeslee/BJ8LF/reflection/person.java | 57 ------------------- 2 files changed, 25 insertions(+), 57 deletions(-) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/NewInstanceTest.java delete mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/person.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/NewInstanceTest.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/NewInstanceTest.java new file mode 100644 index 0000000..2481d44 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/NewInstanceTest.java @@ -0,0 +1,25 @@ +package tk.hadeslee.BJ8LF.reflection; + +import tk.hadeslee.Lambda_Expressions.String_Compararors_Filters.Person; + +/** + * Project: java8-examples + * FileName: NewInstanceTest + * Date: 2016-01-01 + * Time: 오전 12:40 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class NewInstanceTest { + public static void main(String[] args) throws InstantiationException { + Class personClass = Person.class; + try { +// Create new instance of Person class + Person p = personClass.newInstance(); + System.out.println(p); + } catch (InstantiationException | IllegalAccessException e) { + System.out.println(e.getMessage()); + } + } +} diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/person.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/person.java deleted file mode 100644 index 3a84a6a..0000000 --- a/src/main/java/tk/hadeslee/BJ8LF/reflection/person.java +++ /dev/null @@ -1,57 +0,0 @@ -package tk.hadeslee.BJ8LF.reflection; - -import java.io.Serializable; - -/** - * Project: java8-examples - * FileName: person - * Date: 2015-12-25 - * Time: 오전 4:57 - * Author: Hadeslee - * Note: - * To change this template use File | Settings | File Templates. - */ -public class person implements Cloneable, Serializable { - private int id = -1; - private String name = "Unknown"; - - public person() { - } - - public person(int id, String name) { - this.id = id; - this.name = name; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Object clone(){ - try { - return super.clone(); - }catch (CloneNotSupportedException e) { - throw new RuntimeException(e.getMessage()); - } - } - - @Override - public String toString() { - return "person{" + - "id=" + id + - ", name='" + name + '\'' + - '}'; - } -} From 931a50f7ab6ca7fceb29fd2366e354867e518f1a Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sat, 2 Jan 2016 01:16:41 +0900 Subject: [PATCH 49/72] Creating an Object Using newInstance( ) Method of a Class Object --- .../reflection/InvokeConstructorTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeConstructorTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeConstructorTest.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeConstructorTest.java new file mode 100644 index 0000000..9b1facd --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeConstructorTest.java @@ -0,0 +1,34 @@ +package tk.hadeslee.BJ8LF.reflection; + +import tk.hadeslee.Lambda_Expressions.String_Compararors_Filters.Person; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +/** + * Project: java8-examples + * FileName: InvokeConstructorTest + * Date: 2016-01-01 + * Time: 오전 12:41 + * Author: Hadeslee + * Note: + * To change this template use File | Settings | File Templates. + */ +public class InvokeConstructorTest { + public static void main(String[] args) { + Class personClass = Person.class; + + try { +// Get the constructor "Person(int, String)" + Constructor cons = + personClass.getConstructor(int.class, String.class); +// Invoke the constructor with values for id and name + Person chris = cons.newInstance(1994, "Chris"); + System.out.println(chris); + } catch (NoSuchMethodException | SecurityException | + InstantiationException | IllegalAccessException | + IllegalArgumentException | InvocationTargetException e) { + System.out.println(e.getMessage()); + } + } +} From 53d3b6f39ab01965a13e68c249452c70dc0d137d Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sun, 3 Jan 2016 02:48:14 +0900 Subject: [PATCH 50/72] A Person Class Used to Demonstrate Reflection --- .idea/gradle.xml | 5 ++ .../tk/hadeslee/BJ8LF/reflection/Person.java | 49 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/Person.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index eddea76..0c7815f 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,11 @@ diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/Person.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/Person.java new file mode 100644 index 0000000..ee54cdd --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/Person.java @@ -0,0 +1,49 @@ +package tk.hadeslee.BJ8LF.reflection; + +import java.io.Serializable; + +/** + * Project: java8-examples + * FileName: Person + * Date: 2016-01-03 + * Time: 오전 2:47 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class Person implements Cloneable, Serializable { + private int id = -1; + private String name = "Unknown"; + + public Person() { + } + + public Person(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e.getMessage()); + } + } + + public String toString() { + return "Person: id=" + this.id + ", name=" + this.name; + } +} From ddcc4be1dd1e1c2ab4a63972cdbead682d1c4dc0 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 4 Jan 2016 09:05:25 +0900 Subject: [PATCH 51/72] Invoking a Method on an Object Reference Using Reflection --- .idea/gradle.xml | 5 --- .../BJ8LF/reflection/InvokeMethodTest.java | 35 +++++++++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 0c7815f..eddea76 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,11 +12,6 @@ diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java new file mode 100644 index 0000000..4776c4f --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java @@ -0,0 +1,35 @@ +package tk.hadeslee.BJ8LF.reflection; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * Project: java8-examples + * FileName: InvokeMethodTest + * Date: 2016-01-04 + * Time: 오전 9:03 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class InvokeMethodTest { + public static void main(String[] args) { + Class personClass = Person.class; + try { +// Create an object of Person class + Person p = personClass.newInstance(); + System.out.println(p); +// Get the reference of teh setName() method + Method setName = personClass.getMethod("setName", String.class); +// Invoke the setName() method on p passing +// a new value for name as "Ann" + setName.invoke(p, "Ann"); + System.out.println(p); + } catch (InstantiationException | IllegalAccessException | + NoSuchMethodException | SecurityException | + IllegalArgumentException | InvocationTargetException e) { + System.out.println(e.getMessage()); + } + } +} + From e608a5d288c7bb6f914656dbf287e06e41ecb5bd Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 5 Jan 2016 08:34:21 +0900 Subject: [PATCH 52/72] Invoking a Method on an Object Reference Using Reflection --- .../tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java index 4776c4f..4d7f815 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/InvokeMethodTest.java @@ -16,13 +16,13 @@ public class InvokeMethodTest { public static void main(String[] args) { Class personClass = Person.class; try { -// Create an object of Person class + // Create an object of Person class Person p = personClass.newInstance(); System.out.println(p); -// Get the reference of teh setName() method + // Get the reference of teh setName() method Method setName = personClass.getMethod("setName", String.class); -// Invoke the setName() method on p passing -// a new value for name as "Ann" + // Invoke the setName() method on p passing + // a new value for name as "Ann" setName.invoke(p, "Ann"); System.out.println(p); } catch (InstantiationException | IllegalAccessException | From d14aac0768f02d9e89ac4ab17fc0da30853af51e Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 6 Jan 2016 08:44:08 +0900 Subject: [PATCH 53/72] A PublicPerson Class with a Public Name Field --- .../BJ8LF/reflection/PublicPerson.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/PublicPerson.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/PublicPerson.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/PublicPerson.java new file mode 100644 index 0000000..a7b0e1a --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/PublicPerson.java @@ -0,0 +1,26 @@ +package tk.hadeslee.BJ8LF.reflection; + +/** + * Project: java8-examples + * FileName: PublicPerson + * Date: 2016-01-06 + * Time: 오전 8:42 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class PublicPerson { + private int id = -1; + public String name = "Unknown"; + + public PublicPerson() { + } + + @Override + public String toString() { + return "PublicPerson{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } +} From 8de3cccff27baca31926429cae1860025beef6ba Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 6 Jan 2016 08:47:14 +0900 Subject: [PATCH 54/72] Accessing Fields Using Reflection --- .../BJ8LF/reflection/FieldAccessTest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/FieldAccessTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldAccessTest.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldAccessTest.java new file mode 100644 index 0000000..d5eec66 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/FieldAccessTest.java @@ -0,0 +1,36 @@ +package tk.hadeslee.BJ8LF.reflection; + +import java.lang.reflect.Field; + +/** + * Project: java8-examples + * FileName: FieldAccessTest + * Date: 2016-01-06 + * Time: 오전 8:46 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class FieldAccessTest { + public static void main(String[] args) { + Class ppClass = PublicPerson.class; + try { + // Create an object of PublicPerson class + PublicPerson p = ppClass.newInstance(); + // Get the reference of name field + Field name = ppClass.getField("name"); + // Get the current value of name field + String nameValue = (String) name.get(p); + System.out.println("Current name is " + nameValue); + // Set the value of name to Ann + name.set(p, "Ann"); + // Get the new value of name field + nameValue = (String) name.get(p); + System.out.println("New name is " + nameValue); + } catch (InstantiationException | IllegalAccessException | + NoSuchFieldException | SecurityException | + IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + } +} From a9414494c04582fe467a22b8b28d6d31d1a8faf8 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Thu, 7 Jan 2016 09:14:02 +0900 Subject: [PATCH 55/72] Accessing Normally Inaccessible Class Member Using Reflection --- .../BJ8LF/reflection/AccessPrivateField.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/AccessPrivateField.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/AccessPrivateField.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/AccessPrivateField.java new file mode 100644 index 0000000..aa59ab0 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/AccessPrivateField.java @@ -0,0 +1,39 @@ +package tk.hadeslee.BJ8LF.reflection; + +import java.lang.reflect.Field; + +/** + * Project: java8-examples + * FileName: AccessPrivateField + * Date: 2016-01-07 + * Time: 오전 9:11 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class AccessPrivateField { + public static void main(String[] args) { + Class personClass = Person.class; + try { + // Create an object of the Person class + Person p = personClass.newInstance(); + // Get the reference to name field + Field nameField = personClass.getDeclaredField("name"); + // Make the private name field accessible + nameField.setAccessible(true); + // Get the current value of name field + String nameValue = (String) nameField.get(p); + System.out.println("Current name is " + nameValue); + // Set a new value for name + nameField.set(p, "Sherry"); + // Read the new value of name + nameValue = (String) nameField.get(p); + System.out.println("New name is " + nameValue); + } catch (InstantiationException | IllegalAccessException | + NoSuchFieldException | SecurityException | + IllegalArgumentException e + ) { + System.out.println(e.getMessage()); + } + } +} From 00b2a70b878a810a9e05a219b5ce9d078346fb1a Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 8 Jan 2016 09:42:43 +0900 Subject: [PATCH 56/72] Checking for Reflect Permission in a Program --- .../reflection/ReflectPermissionTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/ReflectPermissionTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/ReflectPermissionTest.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/ReflectPermissionTest.java new file mode 100644 index 0000000..bf84bac --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/ReflectPermissionTest.java @@ -0,0 +1,26 @@ +package tk.hadeslee.BJ8LF.reflection; + +import java.lang.reflect.ReflectPermission; + +/** + * Project: java8-examples + * FileName: ReflectPermissionTest + * Date: 2016-01-08 + * Time: 오전 9:42 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ReflectPermissionTest { + public static void main(String[] args) { + try { + // Create a permission object + ReflectPermission rp = new ReflectPermission("suppressAccessChecks"); + // check for permission + rp.checkGuard(null); + System.out.println("Reflect permission is granted"); + } catch (SecurityException e) { + System.out.println("Reflect permission is not granted"); + } + } +} From 079bd648d5ee84c3f0a295d34535be5813cf1dd8 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sat, 9 Jan 2016 01:13:27 +0900 Subject: [PATCH 57/72] Reflecting on Arrays --- .idea/gradle.xml | 5 +++ java8-examples.iml | 11 +++++- .../hadeslee/BJ8LF/Annotations/GoodOne.java | 2 +- .../BJ8LF/reflection/ArrayReflection.java | 35 +++++++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/reflection/ArrayReflection.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index eddea76..0c7815f 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,11 @@ diff --git a/java8-examples.iml b/java8-examples.iml index fab257c..829f09a 100644 --- a/java8-examples.iml +++ b/java8-examples.iml @@ -64,7 +64,16 @@ - + + + + + + + + + + diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/ExpandingArray.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/ExpandingArray.java new file mode 100644 index 0000000..83d2345 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/ExpandingArray.java @@ -0,0 +1,42 @@ +package tk.hadeslee.BJ8LF.reflection; + +import java.lang.reflect.Array; +import java.util.Arrays; + +/** + * Project: java8-examples + * FileName: ExpandingArray + * Date: 2016-01-11 + * Time: 오전 9:48 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ExpandingArray { + public static void main(String[] args) { +// Create an array of length 2 + int[] ids = {101, 102}; + System.out.println("Old array length: " + ids.length); + System.out.println("Old array elements:" + Arrays.toString(ids)); +// Expand the array by 1 + ids = (int[]) expandBy(ids, 1); + // Set the third element to 103 + ids[2] = 103; // This is newly added element + System.out.println("New array length: " + ids.length); + System.out.println("New array elements:" + Arrays.toString(ids)); + } + + public static Object expandBy(Object oldArray, int increment) { + Object newArray = null; +// Get the length of old array using reflection + int oldLength = Array.getLength(oldArray); + int newLength = oldLength + increment; +// Get the class of the old array + Class c = oldArray.getClass(); +// Create a new array of the new length + newArray = Array.newInstance(c.getComponentType(), newLength); +// Copy the old array elements to new array + System.arraycopy(oldArray, 0, newArray, 0, oldLength); + return newArray; + } +} From 9b725d665a0440f31ff2c5bd3cb40a60ab87f4b8 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 11 Jan 2016 10:03:44 +0900 Subject: [PATCH 60/72] Expanding an Array Using Reflection --- .../tk/hadeslee/BJ8LF/reflection/ExpandingArray.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/tk/hadeslee/BJ8LF/reflection/ExpandingArray.java b/src/main/java/tk/hadeslee/BJ8LF/reflection/ExpandingArray.java index 83d2345..3a362fb 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/reflection/ExpandingArray.java +++ b/src/main/java/tk/hadeslee/BJ8LF/reflection/ExpandingArray.java @@ -14,11 +14,11 @@ */ public class ExpandingArray { public static void main(String[] args) { -// Create an array of length 2 + // Create an array of length 2 int[] ids = {101, 102}; System.out.println("Old array length: " + ids.length); System.out.println("Old array elements:" + Arrays.toString(ids)); -// Expand the array by 1 + // Expand the array by 1 ids = (int[]) expandBy(ids, 1); // Set the third element to 103 ids[2] = 103; // This is newly added element @@ -28,14 +28,14 @@ public static void main(String[] args) { public static Object expandBy(Object oldArray, int increment) { Object newArray = null; -// Get the length of old array using reflection + // Get the length of old array using reflection int oldLength = Array.getLength(oldArray); int newLength = oldLength + increment; -// Get the class of the old array + // Get the class of the old array Class c = oldArray.getClass(); -// Create a new array of the new length + // Create a new array of the new length newArray = Array.newInstance(c.getComponentType(), newLength); -// Copy the old array elements to new array + // Copy the old array elements to new array System.arraycopy(oldArray, 0, newArray, 0, oldLength); return newArray; } From e711bc5c4ac2243b2cacf7d0e6f64956778ddcad Mon Sep 17 00:00:00 2001 From: hadesyi Date: Tue, 12 Jan 2016 10:09:03 +0900 Subject: [PATCH 61/72] Expanding an Array Using Reflection --- .../BJ8LF/Generics/ObjectWrapper.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Generics/ObjectWrapper.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Generics/ObjectWrapper.java b/src/main/java/tk/hadeslee/BJ8LF/Generics/ObjectWrapper.java new file mode 100644 index 0000000..4f01827 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Generics/ObjectWrapper.java @@ -0,0 +1,26 @@ +package tk.hadeslee.BJ8LF.Generics; + +/** + * Project: java8-examples + * FileName: ObjectWrapper + * Date: 2016-01-12 + * Time: 오전 10:07 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class ObjectWrapper { + private Object ref; + + public ObjectWrapper(Object ref) { + this.ref = ref; + } + + public Object get() { + return ref; + } + + public void set(Object reference) { + this.ref = ref; + } +} From 953a1a97b959ffde6cb473652f77610c28f11be3 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Wed, 13 Jan 2016 09:45:14 +0900 Subject: [PATCH 62/72] Using a Type Parameter to Define a Generic Class --- .../tk/hadeslee/BJ8LF/Generics/Wrapper.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Generics/Wrapper.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Generics/Wrapper.java b/src/main/java/tk/hadeslee/BJ8LF/Generics/Wrapper.java new file mode 100644 index 0000000..64fbfb0 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Generics/Wrapper.java @@ -0,0 +1,26 @@ +package tk.hadeslee.BJ8LF.Generics; + +/** + * Project: java8-examples + * FileName: Wrapper + * Date: 2016-01-13 + * Time: 오전 9:44 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class Wrapper { + private T ref; + + public Wrapper(T ref) { + this.ref = ref; + } + + public T get() { + return ref; + } + + public void set(T a) { + this.ref = ref; + } +} From 06b8b76a799c2487e84654848ed1b1b95395f9d5 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Thu, 14 Jan 2016 09:38:18 +0900 Subject: [PATCH 63/72] Using a Type Parameter to Define a Generic Class --- .../tk/hadeslee/BJ8LF/Generics/WrapperUtil.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java b/src/main/java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java new file mode 100644 index 0000000..1ca60bd --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java @@ -0,0 +1,16 @@ +package tk.hadeslee.BJ8LF.Generics; + +/** + * Project: java8-examples + * FileName: WrapperUtil + * Date: 2016-01-14 + * Time: 오전 9:38 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class WrapperUtil { + public static void printDetails(Wrapper wrapper) { +// More code goes here + } +} From d07a75176061b1633861db951251cd91529066a2 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Thu, 14 Jan 2016 09:39:17 +0900 Subject: [PATCH 64/72] Using a Type Parameter to Define a Generic Class --- .../java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java b/src/main/java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java index 1ca60bd..1638461 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java +++ b/src/main/java/tk/hadeslee/BJ8LF/Generics/WrapperUtil.java @@ -10,7 +10,14 @@ * To change this template use File | Settings | File Templates. */ public class WrapperUtil { - public static void printDetails(Wrapper wrapper) { -// More code goes here + public static void printDetails(Wrapper wrapper) { +// Can assign get() return value to Object + Object value = wrapper.get(); + String className = null; + if (value != null) { + className = value.getClass().getName(); + } + System.out.println("Class: " + className); + System.out.println("Value: " + value); } } From b092b53bbd561715edc3e8808be106c593985a6d Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 15 Jan 2016 09:13:09 +0900 Subject: [PATCH 65/72] =?UTF-8?q?Let=E2=80=99s=20look=20at=20the=20followi?= =?UTF-8?q?ng=20code=20for=20a=20class=20called=20GenericArrayTest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BJ8LF/Generics/GenericArrayTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java b/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java new file mode 100644 index 0000000..b506fb6 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java @@ -0,0 +1,19 @@ +package tk.hadeslee.BJ8LF.Generics; + +/** + * Project: java8-examples + * FileName: GenericArrayTest + * Date: 2016-01-15 + * Time: 오전 9:11 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class GenericArrayTest { + private T[] elements; + + public GenericArrayTest(int howMany) { + elements = new T[howMany]; // A compile-time error + } +// More code goes here +} From 8654caabce3c51b0dbe015fd91317322eed4698f Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 15 Jan 2016 09:14:41 +0900 Subject: [PATCH 66/72] =?UTF-8?q?Let=E2=80=99s=20look=20at=20the=20followi?= =?UTF-8?q?ng=20code=20for=20a=20class=20called=20GenericArrayTest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java b/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java index b506fb6..f81d908 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java +++ b/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericArrayTest.java @@ -13,7 +13,7 @@ public class GenericArrayTest { private T[] elements; public GenericArrayTest(int howMany) { - elements = new T[howMany]; // A compile-time error + //elements = new T[howMany]; // A compile-time error } // More code goes here } From 63675fc3964bb9703798aeb3d9909d66ba116439 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Fri, 15 Jan 2016 09:15:40 +0900 Subject: [PATCH 67/72] All Objects of a Parameterized Type Share the Same Class at Runtime --- .../Generics/GenericsRuntimeClassTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Generics/GenericsRuntimeClassTest.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericsRuntimeClassTest.java b/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericsRuntimeClassTest.java new file mode 100644 index 0000000..b5bdebb --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Generics/GenericsRuntimeClassTest.java @@ -0,0 +1,22 @@ +package tk.hadeslee.BJ8LF.Generics; + +/** + * Project: java8-examples + * FileName: GenericsRuntimeClassTest + * Date: 2016-01-15 + * Time: 오전 9:14 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class GenericsRuntimeClassTest { + public static void main(String[] args) { + Wrapper a = new Wrapper("Hello"); + Wrapper b = new Wrapper(new Integer(123)); + Class aClass = a.getClass(); + Class bClass = b.getClass(); + System.out.println("Class for a: " + aClass.getName()); + System.out.println("Class for b: " + bClass.getName()); + System.out.println("aClass == bClass: " + (aClass == bClass)); + } +} From f7247ab2e3a20d2f61c5f43ed8209c45f66bde7a Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sat, 16 Jan 2016 06:56:47 +0900 Subject: [PATCH 68/72] Consider the lambda expression that takes a String parameter and returns its length --- .idea/gradle.xml | 5 +++++ .../Lambda_Expressions/StringToIntMapper.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/StringToIntMapper.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index eddea76..0c7815f 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,11 @@ diff --git a/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/StringToIntMapper.java b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/StringToIntMapper.java new file mode 100644 index 0000000..e62a5c7 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/StringToIntMapper.java @@ -0,0 +1,15 @@ +package tk.hadeslee.BJ8LF.Lambda_Expressions; + +/** + * Project: java8-examples + * FileName: StringToIntMapper + * Date: 2016-01-16 + * Time: 오전 6:55 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +@FunctionalInterface +public interface StringToIntMapper { + int map(String str); +} From 920ba922dca5d43522fe8a12415a1a361f22171a Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sun, 17 Jan 2016 00:19:48 +0900 Subject: [PATCH 69/72] A Functional Interface Named Adder --- .../hadeslee/BJ8LF/Lambda_Expressions/Adder.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Adder.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Adder.java b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Adder.java new file mode 100644 index 0000000..a7f8154 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Adder.java @@ -0,0 +1,15 @@ +package tk.hadeslee.BJ8LF.Lambda_Expressions; + +/** + * Project: java8-examples + * FileName: Adder + * Date: 2016-01-17 + * Time: 오전 12:19 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +@FunctionalInterface +public interface Adder { + double add(double n1, double n2); +} From 3c0abb5cd67c3bd95df8c5ce2a207de1495b693a Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sun, 17 Jan 2016 00:20:26 +0900 Subject: [PATCH 70/72] A Functional Interface Named Adder --- .../hadeslee/BJ8LF/Lambda_Expressions/Joiner.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java diff --git a/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java new file mode 100644 index 0000000..54b3d69 --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java @@ -0,0 +1,15 @@ +package tk.hadeslee.BJ8LF.Lambda_Expressions; + +/** + * Project: java8-examples + * FileName: Joiner + * Date: 2016-01-17 + * Time: 오전 12:20 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +@FunctionalInterface +public interface Joiner { + String join(String s1, String s2); +} From b86adbe4745f99a9ca2f29971601b23e3d374e08 Mon Sep 17 00:00:00 2001 From: hadesyi Date: Sun, 17 Jan 2016 00:21:06 +0900 Subject: [PATCH 71/72] A Functional Interface Named Joiner --- src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java index 54b3d69..54916e1 100644 --- a/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java +++ b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/Joiner.java @@ -12,4 +12,5 @@ @FunctionalInterface public interface Joiner { String join(String s1, String s2); + } From 8ef88d55d80ab5980b507ac4d599d5a6f5aa2e5e Mon Sep 17 00:00:00 2001 From: hadesyi Date: Mon, 18 Jan 2016 09:08:50 +0900 Subject: [PATCH 72/72] Examples of Using Lambda Expressions --- .idea/gradle.xml | 5 ---- .../Lambda_Expressions/TargetTypeTest.java | 28 +++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/TargetTypeTest.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 0c7815f..eddea76 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,11 +12,6 @@ diff --git a/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/TargetTypeTest.java b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/TargetTypeTest.java new file mode 100644 index 0000000..f2ae9cd --- /dev/null +++ b/src/main/java/tk/hadeslee/BJ8LF/Lambda_Expressions/TargetTypeTest.java @@ -0,0 +1,28 @@ +package tk.hadeslee.BJ8LF.Lambda_Expressions; + +/** + * Project: java8-examples + * FileName: TargetTypeTest + * Date: 2016-01-18 + * Time: 오전 9:08 + * Author: redfo + * Note: + * To change this template use File | Settings | File Templates. + */ +public class TargetTypeTest { + public static void main(String[] args) { +// Creates an Adder using a lambda expression + Adder adder = (x, y) -> x + y; +// Creates a Joiner using a lambda expression + Joiner joiner = (x, y) -> x + y; +// Adds two doubles + double sum1 = adder.add(10.34, 89.11); +// Adds two ints + double sum2 = adder.add(10, 89); +// Joins two strings + String str = joiner.join("Hello", " lambda"); + System.out.println("sum1 = " + sum1); + System.out.println("sum2 = " + sum2); + System.out.println("str = " + str); + } +}