diff --git a/pom.xml b/pom.xml
new file mode 100644
index 00000000..900a474e
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,52 @@
+
+ 4.0.0
+ effective-java-examples
+ effective-java-examples
+ 1.0
+ effective-java-examples
+ Source code to the book "Effective Java Third Edition" created by Joshua Bloch
+ http://java.sun.com/docs/books/effective/index.html
+
+ Joshua Bloch
+ http://java.sun.com/docs/books/effective/index.html
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.21
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.1.7
+
+
+ com.google.guava
+ guava
+ 24.1-jre
+
+
+
+
+
+
+
+ maven-compiler-plugin
+
+ 1.9
+ 1.9
+
+
+
+
+
\ No newline at end of file
diff --git a/src/effectivejava/chapter2/item9/trywithresources/Copy.java b/src/effectivejava/chapter2/item9/trywithresources/Copy.java
deleted file mode 100644
index 15a77dfb..00000000
--- a/src/effectivejava/chapter2/item9/trywithresources/Copy.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package effectivejava.chapter2.item9.trywithresources;
-
-import java.io.*;
-
-public class Copy {
- private static final int BUFFER_SIZE = 8 * 1024;
-
- // try-with-resources on multiple resources - short and sweet (Page 35)
- static void copy(String src, String dst) throws IOException {
- try (InputStream in = new FileInputStream(src);
- OutputStream out = new FileOutputStream(dst)) {
- byte[] buf = new byte[BUFFER_SIZE];
- int n;
- while ((n = in.read(buf)) >= 0)
- out.write(buf, 0, n);
- }
- }
-
- public static void main(String[] args) throws IOException {
- String src = args[0];
- String dst = args[1];
- copy(src, dst);
- }
-}
diff --git a/src/effectivejava/chapter2/item9/trywithresources/TopLine.java b/src/effectivejava/chapter2/item9/trywithresources/TopLine.java
deleted file mode 100644
index ea714ac7..00000000
--- a/src/effectivejava/chapter2/item9/trywithresources/TopLine.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package effectivejava.chapter2.item9.trywithresources;
-
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-
-public class TopLine {
- // try-with-resources - the the best way to close resources! (Page 35)
- static String firstLineOfFile(String path) throws IOException {
- try (BufferedReader br = new BufferedReader(
- new FileReader(path))) {
- return br.readLine();
- }
- }
-
- public static void main(String[] args) throws IOException {
- String path = args[0];
- System.out.println(firstLineOfFile(path));
- }
-}
diff --git a/src/effectivejava/chapter2/item9/trywithresources/TopLineWithDefault.java b/src/effectivejava/chapter2/item9/trywithresources/TopLineWithDefault.java
deleted file mode 100644
index f51334c0..00000000
--- a/src/effectivejava/chapter2/item9/trywithresources/TopLineWithDefault.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package effectivejava.chapter2.item9.trywithresources;
-
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-
-public class TopLineWithDefault {
- // try-with-resources with a catch clause (Page 36)
- static String firstLineOfFile(String path, String defaultVal) {
- try (BufferedReader br = new BufferedReader(
- new FileReader(path))) {
- return br.readLine();
- } catch (IOException e) {
- return defaultVal;
- }
- }
-
- public static void main(String[] args) throws IOException {
- String path = args[0];
- System.out.println(firstLineOfFile(path, "Toppy McTopFace"));
- }
-}
diff --git a/src/effectivejava/chapter4/item23/hierarchy/Circle.java b/src/effectivejava/chapter4/item23/hierarchy/Circle.java
deleted file mode 100644
index 6b7017a5..00000000
--- a/src/effectivejava/chapter4/item23/hierarchy/Circle.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package effectivejava.chapter4.item23.hierarchy;
-
-// Class hierarchy replacement for a tagged class (Page 110-11)
-class Circle extends Figure {
- final double radius;
-
- Circle(double radius) { this.radius = radius; }
-
- @Override double area() { return Math.PI * (radius * radius); }
-}
diff --git a/src/effectivejava/chapter4/item23/hierarchy/Figure.java b/src/effectivejava/chapter4/item23/hierarchy/Figure.java
deleted file mode 100644
index 1ab39fa0..00000000
--- a/src/effectivejava/chapter4/item23/hierarchy/Figure.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package effectivejava.chapter4.item23.hierarchy;
-
-// Class hierarchy replacement for a tagged class (Page 110-11)
-abstract class Figure {
- abstract double area();
-}
diff --git a/src/effectivejava/chapter4/item23/hierarchy/Rectangle.java b/src/effectivejava/chapter4/item23/hierarchy/Rectangle.java
deleted file mode 100644
index 090ed053..00000000
--- a/src/effectivejava/chapter4/item23/hierarchy/Rectangle.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package effectivejava.chapter4.item23.hierarchy;
-
-// Class hierarchy replacement for a tagged class (Page 110-11)
-class Rectangle extends Figure {
- final double length;
- final double width;
-
- Rectangle(double length, double width) {
- this.length = length;
- this.width = width;
- }
- @Override double area() { return length * width; }
-}
\ No newline at end of file
diff --git a/src/effectivejava/chapter4/item23/hierarchy/Square.java b/src/effectivejava/chapter4/item23/hierarchy/Square.java
deleted file mode 100644
index 713f448d..00000000
--- a/src/effectivejava/chapter4/item23/hierarchy/Square.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package effectivejava.chapter4.item23.hierarchy;
-
-// Class hierarchy replacement for a tagged class (Page 110-11)
-class Square extends Rectangle {
- Square(double side) {
- super(side, side);
- }
-}
diff --git a/src/effectivejava/chapter7/item42/SortFourWays.java b/src/effectivejava/chapter7/item42/SortFourWays.java
deleted file mode 100644
index 84b77371..00000000
--- a/src/effectivejava/chapter7/item42/SortFourWays.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package effectivejava.chapter7.item42;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import static java.util.Comparator.*;
-
-import static java.util.Comparator.comparingInt;
-
-// Sorting with function objects (Pages 193-4)
-public class SortFourWays {
- public static void main(String[] args) {
- List words = Arrays.asList(args);
-
- // Anonymous class instance as a function object - obsolete! (Page 193)
- Collections.sort(words, new Comparator() {
- public int compare(String s1, String s2) {
- return Integer.compare(s1.length(), s2.length());
- }
- });
- System.out.println(words);
- Collections.shuffle(words);
-
- // Lambda expression as function object (replaces anonymous class) (Page 194)
- Collections.sort(words,
- (s1, s2) -> Integer.compare(s1.length(), s2.length()));
- System.out.println(words);
- Collections.shuffle(words);
-
- // Comparator construction method (with method reference) in place of lambda (Page 194)
- Collections.sort(words, comparingInt(String::length));
- System.out.println(words);
- Collections.shuffle(words);
-
- // Default method List.sort in conjunction with comparator construction method (Page 194)
- words.sort(comparingInt(String::length));
- System.out.println(words);
- }
-}
diff --git a/src/effectivejava/chapter9/item60/BigDecimalChange.java b/src/effectivejava/chapter9/item60/BigDecimalChange.java
deleted file mode 100644
index cfff6af1..00000000
--- a/src/effectivejava/chapter9/item60/BigDecimalChange.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package effectivejava.chapter9.item60;
-
-import java.math.BigDecimal;
-
-public class BigDecimalChange {
- public static void main(String[] args) {
- final BigDecimal TEN_CENTS = new BigDecimal(".10");
-
- int itemsBought = 0;
- BigDecimal funds = new BigDecimal("1.00");
- for (BigDecimal price = TEN_CENTS;
- funds.compareTo(price) >= 0;
- price = price.add(TEN_CENTS)) {
- funds = funds.subtract(price);
- itemsBought++;
- }
- System.out.println(itemsBought + " items bought.");
- System.out.println("Money left over: $" + funds);
- }
-}
diff --git a/src/effectivejava/chapter9/item60/IntChange.java b/src/effectivejava/chapter9/item60/IntChange.java
deleted file mode 100644
index 14819d61..00000000
--- a/src/effectivejava/chapter9/item60/IntChange.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package effectivejava.chapter9.item60;
-
-public class IntChange {
- public static void main(String[] args) {
- int itemsBought = 0;
- int funds = 100;
- for (int price = 10; funds >= price; price += 10) {
- funds -= price;
- itemsBought++;
- }
- System.out.println(itemsBought + " items bought.");
- System.out.println("Cash left over: " + funds + " cents");
- }
-}
diff --git a/src/effectivejava/chapter10/item74/IndexOutOfBoundsException.java b/src/main/java/effectivejava/chapter10/item74/IndexOutOfBoundsException.java
similarity index 100%
rename from src/effectivejava/chapter10/item74/IndexOutOfBoundsException.java
rename to src/main/java/effectivejava/chapter10/item74/IndexOutOfBoundsException.java
diff --git a/src/effectivejava/chapter11/item78/brokenstopthread/StopThread.java b/src/main/java/effectivejava/chapter11/item78/brokenstopthread/StopThread.java
similarity index 100%
rename from src/effectivejava/chapter11/item78/brokenstopthread/StopThread.java
rename to src/main/java/effectivejava/chapter11/item78/brokenstopthread/StopThread.java
diff --git a/src/effectivejava/chapter11/item78/fixedstopthread1/StopThread.java b/src/main/java/effectivejava/chapter11/item78/fixedstopthread1/StopThread.java
similarity index 100%
rename from src/effectivejava/chapter11/item78/fixedstopthread1/StopThread.java
rename to src/main/java/effectivejava/chapter11/item78/fixedstopthread1/StopThread.java
diff --git a/src/effectivejava/chapter11/item78/fixedstopthread2/StopThread.java b/src/main/java/effectivejava/chapter11/item78/fixedstopthread2/StopThread.java
similarity index 100%
rename from src/effectivejava/chapter11/item78/fixedstopthread2/StopThread.java
rename to src/main/java/effectivejava/chapter11/item78/fixedstopthread2/StopThread.java
diff --git a/src/effectivejava/chapter11/item79/ForwardingSet.java b/src/main/java/effectivejava/chapter11/item79/ForwardingSet.java
similarity index 100%
rename from src/effectivejava/chapter11/item79/ForwardingSet.java
rename to src/main/java/effectivejava/chapter11/item79/ForwardingSet.java
diff --git a/src/effectivejava/chapter11/item79/ObservableSet.java b/src/main/java/effectivejava/chapter11/item79/ObservableSet.java
similarity index 100%
rename from src/effectivejava/chapter11/item79/ObservableSet.java
rename to src/main/java/effectivejava/chapter11/item79/ObservableSet.java
diff --git a/src/effectivejava/chapter11/item79/SetObserver.java b/src/main/java/effectivejava/chapter11/item79/SetObserver.java
similarity index 100%
rename from src/effectivejava/chapter11/item79/SetObserver.java
rename to src/main/java/effectivejava/chapter11/item79/SetObserver.java
diff --git a/src/effectivejava/chapter11/item79/Test1.java b/src/main/java/effectivejava/chapter11/item79/Test1.java
similarity index 100%
rename from src/effectivejava/chapter11/item79/Test1.java
rename to src/main/java/effectivejava/chapter11/item79/Test1.java
diff --git a/src/effectivejava/chapter11/item79/Test2.java b/src/main/java/effectivejava/chapter11/item79/Test2.java
similarity index 100%
rename from src/effectivejava/chapter11/item79/Test2.java
rename to src/main/java/effectivejava/chapter11/item79/Test2.java
diff --git a/src/effectivejava/chapter11/item79/Test3.java b/src/main/java/effectivejava/chapter11/item79/Test3.java
similarity index 100%
rename from src/effectivejava/chapter11/item79/Test3.java
rename to src/main/java/effectivejava/chapter11/item79/Test3.java
diff --git a/src/effectivejava/chapter11/item81/ConcurrentTimer.java b/src/main/java/effectivejava/chapter11/item81/ConcurrentTimer.java
similarity index 100%
rename from src/effectivejava/chapter11/item81/ConcurrentTimer.java
rename to src/main/java/effectivejava/chapter11/item81/ConcurrentTimer.java
diff --git a/src/effectivejava/chapter11/item81/Intern.java b/src/main/java/effectivejava/chapter11/item81/Intern.java
similarity index 100%
rename from src/effectivejava/chapter11/item81/Intern.java
rename to src/main/java/effectivejava/chapter11/item81/Intern.java
diff --git a/src/effectivejava/chapter11/item83/FieldType.java b/src/main/java/effectivejava/chapter11/item83/FieldType.java
similarity index 100%
rename from src/effectivejava/chapter11/item83/FieldType.java
rename to src/main/java/effectivejava/chapter11/item83/FieldType.java
diff --git a/src/effectivejava/chapter11/item83/Initialization.java b/src/main/java/effectivejava/chapter11/item83/Initialization.java
similarity index 100%
rename from src/effectivejava/chapter11/item83/Initialization.java
rename to src/main/java/effectivejava/chapter11/item83/Initialization.java
diff --git a/src/effectivejava/chapter11/item84/SlowCountDownLatch.java b/src/main/java/effectivejava/chapter11/item84/SlowCountDownLatch.java
similarity index 100%
rename from src/effectivejava/chapter11/item84/SlowCountDownLatch.java
rename to src/main/java/effectivejava/chapter11/item84/SlowCountDownLatch.java
diff --git a/src/effectivejava/chapter12/Util.java b/src/main/java/effectivejava/chapter12/Util.java
similarity index 100%
rename from src/effectivejava/chapter12/Util.java
rename to src/main/java/effectivejava/chapter12/Util.java
diff --git a/src/effectivejava/chapter12/item85/DeserializationBomb.java b/src/main/java/effectivejava/chapter12/item85/DeserializationBomb.java
similarity index 100%
rename from src/effectivejava/chapter12/item85/DeserializationBomb.java
rename to src/main/java/effectivejava/chapter12/item85/DeserializationBomb.java
diff --git a/src/effectivejava/chapter12/item87/StringList.java b/src/main/java/effectivejava/chapter12/item87/StringList.java
similarity index 100%
rename from src/effectivejava/chapter12/item87/StringList.java
rename to src/main/java/effectivejava/chapter12/item87/StringList.java
diff --git a/src/effectivejava/chapter12/item89/enumsingleton/Elvis.java b/src/main/java/effectivejava/chapter12/item89/enumsingleton/Elvis.java
similarity index 100%
rename from src/effectivejava/chapter12/item89/enumsingleton/Elvis.java
rename to src/main/java/effectivejava/chapter12/item89/enumsingleton/Elvis.java
diff --git a/src/effectivejava/chapter12/item90/Period.java b/src/main/java/effectivejava/chapter12/item90/Period.java
similarity index 100%
rename from src/effectivejava/chapter12/item90/Period.java
rename to src/main/java/effectivejava/chapter12/item90/Period.java
diff --git a/src/effectivejava/chapter2/item2/builder/NutritionFacts.java b/src/main/java/effectivejava/chapter2/item2/builder/NutritionFacts.java
similarity index 100%
rename from src/effectivejava/chapter2/item2/builder/NutritionFacts.java
rename to src/main/java/effectivejava/chapter2/item2/builder/NutritionFacts.java
diff --git a/src/effectivejava/chapter2/item2/hierarchicalbuilder/Calzone.java b/src/main/java/effectivejava/chapter2/item2/hierarchicalbuilder/Calzone.java
similarity index 100%
rename from src/effectivejava/chapter2/item2/hierarchicalbuilder/Calzone.java
rename to src/main/java/effectivejava/chapter2/item2/hierarchicalbuilder/Calzone.java
diff --git a/src/effectivejava/chapter2/item2/hierarchicalbuilder/NyPizza.java b/src/main/java/effectivejava/chapter2/item2/hierarchicalbuilder/NyPizza.java
similarity index 100%
rename from src/effectivejava/chapter2/item2/hierarchicalbuilder/NyPizza.java
rename to src/main/java/effectivejava/chapter2/item2/hierarchicalbuilder/NyPizza.java
diff --git a/src/effectivejava/chapter2/item2/hierarchicalbuilder/Pizza.java b/src/main/java/effectivejava/chapter2/item2/hierarchicalbuilder/Pizza.java
similarity index 100%
rename from src/effectivejava/chapter2/item2/hierarchicalbuilder/Pizza.java
rename to src/main/java/effectivejava/chapter2/item2/hierarchicalbuilder/Pizza.java
diff --git a/src/effectivejava/chapter2/item2/hierarchicalbuilder/PizzaTest.java b/src/main/java/effectivejava/chapter2/item2/hierarchicalbuilder/PizzaTest.java
similarity index 100%
rename from src/effectivejava/chapter2/item2/hierarchicalbuilder/PizzaTest.java
rename to src/main/java/effectivejava/chapter2/item2/hierarchicalbuilder/PizzaTest.java
diff --git a/src/effectivejava/chapter2/item2/javabeans/NutritionFacts.java b/src/main/java/effectivejava/chapter2/item2/javabeans/NutritionFacts.java
similarity index 93%
rename from src/effectivejava/chapter2/item2/javabeans/NutritionFacts.java
rename to src/main/java/effectivejava/chapter2/item2/javabeans/NutritionFacts.java
index a5e4d81f..403c4287 100644
--- a/src/effectivejava/chapter2/item2/javabeans/NutritionFacts.java
+++ b/src/main/java/effectivejava/chapter2/item2/javabeans/NutritionFacts.java
@@ -1,6 +1,7 @@
package effectivejava.chapter2.item2.javabeans;
// JavaBeans Pattern - allows inconsistency, mandates mutability (pages 11-12)
+// the JavaBeans pattern precludes the possibility of making a class immutable
public class NutritionFacts {
// Parameters initialized to default values (if any)
private int servingSize = -1; // Required; no default value
diff --git a/src/main/java/effectivejava/chapter2/item2/question/NutritionFacts.java b/src/main/java/effectivejava/chapter2/item2/question/NutritionFacts.java
new file mode 100644
index 00000000..4f00435e
--- /dev/null
+++ b/src/main/java/effectivejava/chapter2/item2/question/NutritionFacts.java
@@ -0,0 +1,18 @@
+package effectivejava.chapter2.item2.question;
+
+// Builder Pattern (Page 13)
+// TODO initialize the class
+public class NutritionFacts {
+ private final int servingSize = 0;
+ private final int servings = 0 ;
+ private final int calories = 0; // optional
+ private final int fat = 0; // optional
+ private final int sodium = 0; // optional
+ private final int carbohydrate = 0; // optional
+
+
+ public static void main(String[] args) {
+ NutritionFacts nutritionFacts = new NutritionFacts();
+ System.out.println(nutritionFacts);
+ }
+}
\ No newline at end of file
diff --git a/src/effectivejava/chapter2/item2/telescopingconstructor/NutritionFacts.java b/src/main/java/effectivejava/chapter2/item2/telescopingconstructor/NutritionFacts.java
similarity index 100%
rename from src/effectivejava/chapter2/item2/telescopingconstructor/NutritionFacts.java
rename to src/main/java/effectivejava/chapter2/item2/telescopingconstructor/NutritionFacts.java
diff --git a/src/effectivejava/chapter2/item3/enumtype/Elvis.java b/src/main/java/effectivejava/chapter2/item3/enumtype/Elvis.java
similarity index 100%
rename from src/effectivejava/chapter2/item3/enumtype/Elvis.java
rename to src/main/java/effectivejava/chapter2/item3/enumtype/Elvis.java
diff --git a/src/effectivejava/chapter2/item3/field/Elvis.java b/src/main/java/effectivejava/chapter2/item3/field/Elvis.java
similarity index 100%
rename from src/effectivejava/chapter2/item3/field/Elvis.java
rename to src/main/java/effectivejava/chapter2/item3/field/Elvis.java
diff --git a/src/effectivejava/chapter2/item3/staticfactory/Elvis.java b/src/main/java/effectivejava/chapter2/item3/staticfactory/Elvis.java
similarity index 100%
rename from src/effectivejava/chapter2/item3/staticfactory/Elvis.java
rename to src/main/java/effectivejava/chapter2/item3/staticfactory/Elvis.java
diff --git a/src/effectivejava/chapter2/item4/UtilityClass.java b/src/main/java/effectivejava/chapter2/item4/UtilityClass.java
similarity index 100%
rename from src/effectivejava/chapter2/item4/UtilityClass.java
rename to src/main/java/effectivejava/chapter2/item4/UtilityClass.java
diff --git a/src/effectivejava/chapter2/item6/RomanNumerals.java b/src/main/java/effectivejava/chapter2/item6/RomanNumerals.java
similarity index 82%
rename from src/effectivejava/chapter2/item6/RomanNumerals.java
rename to src/main/java/effectivejava/chapter2/item6/RomanNumerals.java
index bf451409..cafa9f4f 100644
--- a/src/effectivejava/chapter2/item6/RomanNumerals.java
+++ b/src/main/java/effectivejava/chapter2/item6/RomanNumerals.java
@@ -19,22 +19,25 @@ static boolean isRomanNumeralFast(String s) {
}
public static void main(String[] args) {
+
+ String s = new String("bikini"); // // DON'T DO THIS!
+
+ String v = "bikini" ; // The improved version i
+
int numSets = Integer.parseInt(args[0]);
int numReps = Integer.parseInt(args[1]);
- boolean b = false;
+
for (int i = 0; i < numSets; i++) {
long start = System.nanoTime();
for (int j = 0; j < numReps; j++) {
- b ^= isRomanNumeralSlow("MCMLXXVI"); // Change Slow to Fast to see performance difference
+ isRomanNumeralSlow("MCMLXXVI"); // Change Slow to Fast to see performance difference
}
long end = System.nanoTime();
System.out.println(((end - start) / (1_000. * numReps)) + " μs.");
}
- // Prevents VM from optimizing away everything.
- if (!b)
- System.out.println();
+
}
}
diff --git a/src/effectivejava/chapter2/item6/Sum.java b/src/main/java/effectivejava/chapter2/item6/Sum.java
similarity index 100%
rename from src/effectivejava/chapter2/item6/Sum.java
rename to src/main/java/effectivejava/chapter2/item6/Sum.java
diff --git a/src/effectivejava/chapter2/item7/EmptyStackException.java b/src/main/java/effectivejava/chapter2/item7/EmptyStackException.java
similarity index 100%
rename from src/effectivejava/chapter2/item7/EmptyStackException.java
rename to src/main/java/effectivejava/chapter2/item7/EmptyStackException.java
diff --git a/src/effectivejava/chapter2/item7/Stack.java b/src/main/java/effectivejava/chapter2/item7/Stack.java
similarity index 100%
rename from src/effectivejava/chapter2/item7/Stack.java
rename to src/main/java/effectivejava/chapter2/item7/Stack.java
diff --git a/src/effectivejava/chapter2/item8/Adult.java b/src/main/java/effectivejava/chapter2/item8/Adult.java
similarity index 100%
rename from src/effectivejava/chapter2/item8/Adult.java
rename to src/main/java/effectivejava/chapter2/item8/Adult.java
diff --git a/src/effectivejava/chapter2/item8/Room.java b/src/main/java/effectivejava/chapter2/item8/Room.java
similarity index 100%
rename from src/effectivejava/chapter2/item8/Room.java
rename to src/main/java/effectivejava/chapter2/item8/Room.java
diff --git a/src/effectivejava/chapter2/item8/Teenager.java b/src/main/java/effectivejava/chapter2/item8/Teenager.java
similarity index 100%
rename from src/effectivejava/chapter2/item8/Teenager.java
rename to src/main/java/effectivejava/chapter2/item8/Teenager.java
diff --git a/src/main/java/effectivejava/chapter2/item8/question/Adult.java b/src/main/java/effectivejava/chapter2/item8/question/Adult.java
new file mode 100644
index 00000000..bc747148
--- /dev/null
+++ b/src/main/java/effectivejava/chapter2/item8/question/Adult.java
@@ -0,0 +1,10 @@
+package effectivejava.chapter2.item8.question;
+
+// Well-behaved client of resource with cleaner safety-net (Page 33)
+public class Adult {
+ public static void main(String[] args) {
+ try (Room myRoom = new Room(7)) {
+ System.out.println("Goodbye");
+ }
+ }
+}
diff --git a/src/main/java/effectivejava/chapter2/item8/question/Room.java b/src/main/java/effectivejava/chapter2/item8/question/Room.java
new file mode 100644
index 00000000..6a36e30b
--- /dev/null
+++ b/src/main/java/effectivejava/chapter2/item8/question/Room.java
@@ -0,0 +1,19 @@
+package effectivejava.chapter2.item8.question;
+
+import java.lang.ref.Cleaner;
+
+// An autocloseable class using a cleaner as a safety net (Page 32)
+public class Room implements AutoCloseable {
+
+
+ int numJunkPiles; // Number of junk piles in this room
+
+ public Room(int numJunkPiles) {
+ this.numJunkPiles = numJunkPiles;
+ }
+
+ @Override public void close() {
+ System.out.println("Cleaning room");
+ numJunkPiles = 0; // Number of junk piles in this room
+ }
+}
diff --git a/src/main/java/effectivejava/chapter2/item8/question/Teenager.java b/src/main/java/effectivejava/chapter2/item8/question/Teenager.java
new file mode 100644
index 00000000..acfd454b
--- /dev/null
+++ b/src/main/java/effectivejava/chapter2/item8/question/Teenager.java
@@ -0,0 +1,10 @@
+package effectivejava.chapter2.item8.question;
+
+// Ill-behaved client of resource with cleaner safety-net (Page 33)
+public class Teenager {
+ public static void main(String[] args) {
+ new Room(99);
+ System.out.println("Peace out");
+
+ }
+}
diff --git a/src/effectivejava/chapter2/item9/tryfinally/Copy.java b/src/main/java/effectivejava/chapter2/item9/tryfinally/Copy.java
similarity index 100%
rename from src/effectivejava/chapter2/item9/tryfinally/Copy.java
rename to src/main/java/effectivejava/chapter2/item9/tryfinally/Copy.java
diff --git a/src/effectivejava/chapter2/item9/tryfinally/TopLine.java b/src/main/java/effectivejava/chapter2/item9/tryfinally/TopLine.java
similarity index 100%
rename from src/effectivejava/chapter2/item9/tryfinally/TopLine.java
rename to src/main/java/effectivejava/chapter2/item9/tryfinally/TopLine.java
diff --git a/src/effectivejava/chapter3/item10/CaseInsensitiveString.java b/src/main/java/effectivejava/chapter3/item10/CaseInsensitiveString.java
similarity index 100%
rename from src/effectivejava/chapter3/item10/CaseInsensitiveString.java
rename to src/main/java/effectivejava/chapter3/item10/CaseInsensitiveString.java
diff --git a/src/effectivejava/chapter3/item10/Color.java b/src/main/java/effectivejava/chapter3/item10/Color.java
similarity index 100%
rename from src/effectivejava/chapter3/item10/Color.java
rename to src/main/java/effectivejava/chapter3/item10/Color.java
diff --git a/src/effectivejava/chapter3/item10/PhoneNumber.java b/src/main/java/effectivejava/chapter3/item10/PhoneNumber.java
similarity index 100%
rename from src/effectivejava/chapter3/item10/PhoneNumber.java
rename to src/main/java/effectivejava/chapter3/item10/PhoneNumber.java
diff --git a/src/effectivejava/chapter3/item10/Point.java b/src/main/java/effectivejava/chapter3/item10/Point.java
similarity index 100%
rename from src/effectivejava/chapter3/item10/Point.java
rename to src/main/java/effectivejava/chapter3/item10/Point.java
diff --git a/src/effectivejava/chapter3/item10/composition/ColorPoint.java b/src/main/java/effectivejava/chapter3/item10/composition/ColorPoint.java
similarity index 100%
rename from src/effectivejava/chapter3/item10/composition/ColorPoint.java
rename to src/main/java/effectivejava/chapter3/item10/composition/ColorPoint.java
diff --git a/src/effectivejava/chapter3/item10/inheritance/ColorPoint.java b/src/main/java/effectivejava/chapter3/item10/inheritance/ColorPoint.java
similarity index 100%
rename from src/effectivejava/chapter3/item10/inheritance/ColorPoint.java
rename to src/main/java/effectivejava/chapter3/item10/inheritance/ColorPoint.java
diff --git a/src/effectivejava/chapter3/item10/inheritance/CounterPoint.java b/src/main/java/effectivejava/chapter3/item10/inheritance/CounterPoint.java
similarity index 100%
rename from src/effectivejava/chapter3/item10/inheritance/CounterPoint.java
rename to src/main/java/effectivejava/chapter3/item10/inheritance/CounterPoint.java
diff --git a/src/effectivejava/chapter3/item10/inheritance/CounterPointTest.java b/src/main/java/effectivejava/chapter3/item10/inheritance/CounterPointTest.java
similarity index 100%
rename from src/effectivejava/chapter3/item10/inheritance/CounterPointTest.java
rename to src/main/java/effectivejava/chapter3/item10/inheritance/CounterPointTest.java
diff --git a/src/effectivejava/chapter3/item11/PhoneNumber.java b/src/main/java/effectivejava/chapter3/item11/PhoneNumber.java
similarity index 96%
rename from src/effectivejava/chapter3/item11/PhoneNumber.java
rename to src/main/java/effectivejava/chapter3/item11/PhoneNumber.java
index 084f1e95..b9e9c216 100644
--- a/src/effectivejava/chapter3/item11/PhoneNumber.java
+++ b/src/main/java/effectivejava/chapter3/item11/PhoneNumber.java
@@ -38,7 +38,7 @@ private static short rangeCheck(int val, int max, String arg) {
// return result;
// }
-// // One-line hashCode method - mediocre performance (page 53)
+// // One-line hashCode method - mediocre (not very good) performance (page 53)
// @Override public int hashCode() {
// return Objects.hash(lineNum, prefix, areaCode);
// }
diff --git a/src/effectivejava/chapter3/item12/PhoneNumber.java b/src/main/java/effectivejava/chapter3/item12/PhoneNumber.java
similarity index 100%
rename from src/effectivejava/chapter3/item12/PhoneNumber.java
rename to src/main/java/effectivejava/chapter3/item12/PhoneNumber.java
diff --git a/src/effectivejava/chapter3/item13/EmptyStackException.java b/src/main/java/effectivejava/chapter3/item13/EmptyStackException.java
similarity index 100%
rename from src/effectivejava/chapter3/item13/EmptyStackException.java
rename to src/main/java/effectivejava/chapter3/item13/EmptyStackException.java
diff --git a/src/effectivejava/chapter3/item13/PhoneNumber.java b/src/main/java/effectivejava/chapter3/item13/PhoneNumber.java
similarity index 100%
rename from src/effectivejava/chapter3/item13/PhoneNumber.java
rename to src/main/java/effectivejava/chapter3/item13/PhoneNumber.java
diff --git a/src/effectivejava/chapter3/item13/Stack.java b/src/main/java/effectivejava/chapter3/item13/Stack.java
similarity index 100%
rename from src/effectivejava/chapter3/item13/Stack.java
rename to src/main/java/effectivejava/chapter3/item13/Stack.java
diff --git a/src/effectivejava/chapter3/item14/CaseInsensitiveString.java b/src/main/java/effectivejava/chapter3/item14/CaseInsensitiveString.java
similarity index 100%
rename from src/effectivejava/chapter3/item14/CaseInsensitiveString.java
rename to src/main/java/effectivejava/chapter3/item14/CaseInsensitiveString.java
diff --git a/src/effectivejava/chapter3/item14/PhoneNumber.java b/src/main/java/effectivejava/chapter3/item14/PhoneNumber.java
similarity index 100%
rename from src/effectivejava/chapter3/item14/PhoneNumber.java
rename to src/main/java/effectivejava/chapter3/item14/PhoneNumber.java
diff --git a/src/effectivejava/chapter3/item14/WordList.java b/src/main/java/effectivejava/chapter3/item14/WordList.java
similarity index 100%
rename from src/effectivejava/chapter3/item14/WordList.java
rename to src/main/java/effectivejava/chapter3/item14/WordList.java
diff --git a/src/effectivejava/chapter4/item16/Point.java b/src/main/java/effectivejava/chapter4/item16/Point.java
similarity index 100%
rename from src/effectivejava/chapter4/item16/Point.java
rename to src/main/java/effectivejava/chapter4/item16/Point.java
diff --git a/src/effectivejava/chapter4/item16/Time.java b/src/main/java/effectivejava/chapter4/item16/Time.java
similarity index 100%
rename from src/effectivejava/chapter4/item16/Time.java
rename to src/main/java/effectivejava/chapter4/item16/Time.java
diff --git a/src/effectivejava/chapter4/item17/Complex.java b/src/main/java/effectivejava/chapter4/item17/Complex.java
similarity index 80%
rename from src/effectivejava/chapter4/item17/Complex.java
rename to src/main/java/effectivejava/chapter4/item17/Complex.java
index 49d33d81..e2a60305 100644
--- a/src/effectivejava/chapter4/item17/Complex.java
+++ b/src/main/java/effectivejava/chapter4/item17/Complex.java
@@ -1,6 +1,16 @@
package effectivejava.chapter4.item17;
// Immutable complex number class (Pages 81-82)
+
+// 1 - Don’t provide methods that modify the object’s state
+// 2 - Ensure that the class can’t be extended
+// 3 - Make all fields final.
+// 4 - Make all fields private.
+// 5 - Ensure exclusive access to any mutable components
+// 6 - Immutable objects are simple
+// 7 - Immutable objects are inherently thread-safe; they require no synchronization.
+// 8 - immutable objects can be shared freely
+
public final class Complex {
private final double re;
private final double im;
@@ -26,9 +36,7 @@ public static Complex valueOf(double re, double im) {
return new Complex(re, im);
}
- public Complex minus(Complex c) {
- return new Complex(re - c.re, im - c.im);
- }
+ // TODO add minus method
public Complex times(Complex c) {
return new Complex(re * c.re - im * c.im,
diff --git a/src/effectivejava/chapter4/item18/ForwardingSet.java b/src/main/java/effectivejava/chapter4/item18/ForwardingSet.java
similarity index 100%
rename from src/effectivejava/chapter4/item18/ForwardingSet.java
rename to src/main/java/effectivejava/chapter4/item18/ForwardingSet.java
diff --git a/src/effectivejava/chapter4/item18/InstrumentedHashSet.java b/src/main/java/effectivejava/chapter4/item18/InstrumentedHashSet.java
similarity index 100%
rename from src/effectivejava/chapter4/item18/InstrumentedHashSet.java
rename to src/main/java/effectivejava/chapter4/item18/InstrumentedHashSet.java
diff --git a/src/effectivejava/chapter4/item18/InstrumentedSet.java b/src/main/java/effectivejava/chapter4/item18/InstrumentedSet.java
similarity index 100%
rename from src/effectivejava/chapter4/item18/InstrumentedSet.java
rename to src/main/java/effectivejava/chapter4/item18/InstrumentedSet.java
diff --git a/src/effectivejava/chapter4/item19/Sub.java b/src/main/java/effectivejava/chapter4/item19/Sub.java
similarity index 100%
rename from src/effectivejava/chapter4/item19/Sub.java
rename to src/main/java/effectivejava/chapter4/item19/Sub.java
diff --git a/src/effectivejava/chapter4/item19/Super.java b/src/main/java/effectivejava/chapter4/item19/Super.java
similarity index 100%
rename from src/effectivejava/chapter4/item19/Super.java
rename to src/main/java/effectivejava/chapter4/item19/Super.java
diff --git a/src/effectivejava/chapter4/item20/AbstractMapEntry.java b/src/main/java/effectivejava/chapter4/item20/AbstractMapEntry.java
similarity index 100%
rename from src/effectivejava/chapter4/item20/AbstractMapEntry.java
rename to src/main/java/effectivejava/chapter4/item20/AbstractMapEntry.java
diff --git a/src/effectivejava/chapter4/item20/IntArrays.java b/src/main/java/effectivejava/chapter4/item20/IntArrays.java
similarity index 100%
rename from src/effectivejava/chapter4/item20/IntArrays.java
rename to src/main/java/effectivejava/chapter4/item20/IntArrays.java
diff --git a/src/effectivejava/chapter4/item22/constantinterface/PhysicalConstants.java b/src/main/java/effectivejava/chapter4/item22/constantinterface/PhysicalConstants.java
similarity index 100%
rename from src/effectivejava/chapter4/item22/constantinterface/PhysicalConstants.java
rename to src/main/java/effectivejava/chapter4/item22/constantinterface/PhysicalConstants.java
diff --git a/src/effectivejava/chapter4/item22/constantutilityclass/PhysicalConstants.java b/src/main/java/effectivejava/chapter4/item22/constantutilityclass/PhysicalConstants.java
similarity index 100%
rename from src/effectivejava/chapter4/item22/constantutilityclass/PhysicalConstants.java
rename to src/main/java/effectivejava/chapter4/item22/constantutilityclass/PhysicalConstants.java
diff --git a/src/effectivejava/chapter4/item23/taggedclass/Figure.java b/src/main/java/effectivejava/chapter4/item23/taggedclass/Figure.java
similarity index 100%
rename from src/effectivejava/chapter4/item23/taggedclass/Figure.java
rename to src/main/java/effectivejava/chapter4/item23/taggedclass/Figure.java
diff --git a/src/effectivejava/chapter4/item25/Dessert.java b/src/main/java/effectivejava/chapter4/item25/Dessert.java
similarity index 100%
rename from src/effectivejava/chapter4/item25/Dessert.java
rename to src/main/java/effectivejava/chapter4/item25/Dessert.java
diff --git a/src/effectivejava/chapter4/item25/Main.java b/src/main/java/effectivejava/chapter4/item25/Main.java
similarity index 100%
rename from src/effectivejava/chapter4/item25/Main.java
rename to src/main/java/effectivejava/chapter4/item25/Main.java
diff --git a/src/effectivejava/chapter4/item25/Test.java b/src/main/java/effectivejava/chapter4/item25/Test.java
similarity index 100%
rename from src/effectivejava/chapter4/item25/Test.java
rename to src/main/java/effectivejava/chapter4/item25/Test.java
diff --git a/src/effectivejava/chapter4/item25/Utensil.java b/src/main/java/effectivejava/chapter4/item25/Utensil.java
similarity index 100%
rename from src/effectivejava/chapter4/item25/Utensil.java
rename to src/main/java/effectivejava/chapter4/item25/Utensil.java
diff --git a/src/effectivejava/chapter5/item26/Raw.java b/src/main/java/effectivejava/chapter5/item26/Raw.java
similarity index 100%
rename from src/effectivejava/chapter5/item26/Raw.java
rename to src/main/java/effectivejava/chapter5/item26/Raw.java
diff --git a/src/effectivejava/chapter5/item28/Chooser.java b/src/main/java/effectivejava/chapter5/item28/Chooser.java
similarity index 100%
rename from src/effectivejava/chapter5/item28/Chooser.java
rename to src/main/java/effectivejava/chapter5/item28/Chooser.java
diff --git a/src/effectivejava/chapter5/item29/EmptyStackException.java b/src/main/java/effectivejava/chapter5/item29/EmptyStackException.java
similarity index 100%
rename from src/effectivejava/chapter5/item29/EmptyStackException.java
rename to src/main/java/effectivejava/chapter5/item29/EmptyStackException.java
diff --git a/src/effectivejava/chapter5/item29/technqiue1/Stack.java b/src/main/java/effectivejava/chapter5/item29/technqiue1/Stack.java
similarity index 100%
rename from src/effectivejava/chapter5/item29/technqiue1/Stack.java
rename to src/main/java/effectivejava/chapter5/item29/technqiue1/Stack.java
diff --git a/src/effectivejava/chapter5/item29/technqiue2/Stack.java b/src/main/java/effectivejava/chapter5/item29/technqiue2/Stack.java
similarity index 100%
rename from src/effectivejava/chapter5/item29/technqiue2/Stack.java
rename to src/main/java/effectivejava/chapter5/item29/technqiue2/Stack.java
diff --git a/src/effectivejava/chapter5/item30/GenericSingletonFactory.java b/src/main/java/effectivejava/chapter5/item30/GenericSingletonFactory.java
similarity index 100%
rename from src/effectivejava/chapter5/item30/GenericSingletonFactory.java
rename to src/main/java/effectivejava/chapter5/item30/GenericSingletonFactory.java
diff --git a/src/effectivejava/chapter5/item30/RecursiveTypeBound.java b/src/main/java/effectivejava/chapter5/item30/RecursiveTypeBound.java
similarity index 100%
rename from src/effectivejava/chapter5/item30/RecursiveTypeBound.java
rename to src/main/java/effectivejava/chapter5/item30/RecursiveTypeBound.java
diff --git a/src/effectivejava/chapter5/item30/Union.java b/src/main/java/effectivejava/chapter5/item30/Union.java
similarity index 100%
rename from src/effectivejava/chapter5/item30/Union.java
rename to src/main/java/effectivejava/chapter5/item30/Union.java
diff --git a/src/effectivejava/chapter5/item31/Chooser.java b/src/main/java/effectivejava/chapter5/item31/Chooser.java
similarity index 100%
rename from src/effectivejava/chapter5/item31/Chooser.java
rename to src/main/java/effectivejava/chapter5/item31/Chooser.java
diff --git a/src/effectivejava/chapter5/item31/EmptyStackException.java b/src/main/java/effectivejava/chapter5/item31/EmptyStackException.java
similarity index 100%
rename from src/effectivejava/chapter5/item31/EmptyStackException.java
rename to src/main/java/effectivejava/chapter5/item31/EmptyStackException.java
diff --git a/src/effectivejava/chapter5/item31/RecursiveTypeBound.java b/src/main/java/effectivejava/chapter5/item31/RecursiveTypeBound.java
similarity index 100%
rename from src/effectivejava/chapter5/item31/RecursiveTypeBound.java
rename to src/main/java/effectivejava/chapter5/item31/RecursiveTypeBound.java
diff --git a/src/effectivejava/chapter5/item31/Stack.java b/src/main/java/effectivejava/chapter5/item31/Stack.java
similarity index 100%
rename from src/effectivejava/chapter5/item31/Stack.java
rename to src/main/java/effectivejava/chapter5/item31/Stack.java
diff --git a/src/effectivejava/chapter5/item31/Swap.java b/src/main/java/effectivejava/chapter5/item31/Swap.java
similarity index 100%
rename from src/effectivejava/chapter5/item31/Swap.java
rename to src/main/java/effectivejava/chapter5/item31/Swap.java
diff --git a/src/effectivejava/chapter5/item31/Union.java b/src/main/java/effectivejava/chapter5/item31/Union.java
similarity index 100%
rename from src/effectivejava/chapter5/item31/Union.java
rename to src/main/java/effectivejava/chapter5/item31/Union.java
diff --git a/src/effectivejava/chapter5/item32/Dangerous.java b/src/main/java/effectivejava/chapter5/item32/Dangerous.java
similarity index 100%
rename from src/effectivejava/chapter5/item32/Dangerous.java
rename to src/main/java/effectivejava/chapter5/item32/Dangerous.java
diff --git a/src/effectivejava/chapter5/item32/FlattenWithList.java b/src/main/java/effectivejava/chapter5/item32/FlattenWithList.java
similarity index 100%
rename from src/effectivejava/chapter5/item32/FlattenWithList.java
rename to src/main/java/effectivejava/chapter5/item32/FlattenWithList.java
diff --git a/src/effectivejava/chapter5/item32/FlattenWithVarargs.java b/src/main/java/effectivejava/chapter5/item32/FlattenWithVarargs.java
similarity index 100%
rename from src/effectivejava/chapter5/item32/FlattenWithVarargs.java
rename to src/main/java/effectivejava/chapter5/item32/FlattenWithVarargs.java
diff --git a/src/effectivejava/chapter5/item32/PickTwo.java b/src/main/java/effectivejava/chapter5/item32/PickTwo.java
similarity index 100%
rename from src/effectivejava/chapter5/item32/PickTwo.java
rename to src/main/java/effectivejava/chapter5/item32/PickTwo.java
diff --git a/src/effectivejava/chapter5/item32/SafePickTwo.java b/src/main/java/effectivejava/chapter5/item32/SafePickTwo.java
similarity index 100%
rename from src/effectivejava/chapter5/item32/SafePickTwo.java
rename to src/main/java/effectivejava/chapter5/item32/SafePickTwo.java
diff --git a/src/effectivejava/chapter5/item33/Favorites.java b/src/main/java/effectivejava/chapter5/item33/Favorites.java
similarity index 100%
rename from src/effectivejava/chapter5/item33/Favorites.java
rename to src/main/java/effectivejava/chapter5/item33/Favorites.java
diff --git a/src/effectivejava/chapter5/item33/PrintAnnotation.java b/src/main/java/effectivejava/chapter5/item33/PrintAnnotation.java
similarity index 100%
rename from src/effectivejava/chapter5/item33/PrintAnnotation.java
rename to src/main/java/effectivejava/chapter5/item33/PrintAnnotation.java
diff --git a/src/effectivejava/chapter6/item34/Inverse.java b/src/main/java/effectivejava/chapter6/item34/Inverse.java
similarity index 100%
rename from src/effectivejava/chapter6/item34/Inverse.java
rename to src/main/java/effectivejava/chapter6/item34/Inverse.java
diff --git a/src/effectivejava/chapter6/item34/Operation.java b/src/main/java/effectivejava/chapter6/item34/Operation.java
similarity index 100%
rename from src/effectivejava/chapter6/item34/Operation.java
rename to src/main/java/effectivejava/chapter6/item34/Operation.java
diff --git a/src/effectivejava/chapter6/item34/PayrollDay.java b/src/main/java/effectivejava/chapter6/item34/PayrollDay.java
similarity index 100%
rename from src/effectivejava/chapter6/item34/PayrollDay.java
rename to src/main/java/effectivejava/chapter6/item34/PayrollDay.java
diff --git a/src/effectivejava/chapter6/item34/Planet.java b/src/main/java/effectivejava/chapter6/item34/Planet.java
similarity index 100%
rename from src/effectivejava/chapter6/item34/Planet.java
rename to src/main/java/effectivejava/chapter6/item34/Planet.java
diff --git a/src/effectivejava/chapter6/item34/WeightTable.java b/src/main/java/effectivejava/chapter6/item34/WeightTable.java
similarity index 100%
rename from src/effectivejava/chapter6/item34/WeightTable.java
rename to src/main/java/effectivejava/chapter6/item34/WeightTable.java
diff --git a/src/effectivejava/chapter6/item35/Ensemble.java b/src/main/java/effectivejava/chapter6/item35/Ensemble.java
similarity index 100%
rename from src/effectivejava/chapter6/item35/Ensemble.java
rename to src/main/java/effectivejava/chapter6/item35/Ensemble.java
diff --git a/src/effectivejava/chapter6/item36/Text.java b/src/main/java/effectivejava/chapter6/item36/Text.java
similarity index 100%
rename from src/effectivejava/chapter6/item36/Text.java
rename to src/main/java/effectivejava/chapter6/item36/Text.java
diff --git a/src/effectivejava/chapter6/item37/Phase.java b/src/main/java/effectivejava/chapter6/item37/Phase.java
similarity index 100%
rename from src/effectivejava/chapter6/item37/Phase.java
rename to src/main/java/effectivejava/chapter6/item37/Phase.java
diff --git a/src/effectivejava/chapter6/item37/Plant.java b/src/main/java/effectivejava/chapter6/item37/Plant.java
similarity index 100%
rename from src/effectivejava/chapter6/item37/Plant.java
rename to src/main/java/effectivejava/chapter6/item37/Plant.java
diff --git a/src/effectivejava/chapter6/item38/BasicOperation.java b/src/main/java/effectivejava/chapter6/item38/BasicOperation.java
similarity index 100%
rename from src/effectivejava/chapter6/item38/BasicOperation.java
rename to src/main/java/effectivejava/chapter6/item38/BasicOperation.java
diff --git a/src/effectivejava/chapter6/item38/ExtendedOperation.java b/src/main/java/effectivejava/chapter6/item38/ExtendedOperation.java
similarity index 100%
rename from src/effectivejava/chapter6/item38/ExtendedOperation.java
rename to src/main/java/effectivejava/chapter6/item38/ExtendedOperation.java
diff --git a/src/effectivejava/chapter6/item38/Operation.java b/src/main/java/effectivejava/chapter6/item38/Operation.java
similarity index 100%
rename from src/effectivejava/chapter6/item38/Operation.java
rename to src/main/java/effectivejava/chapter6/item38/Operation.java
diff --git a/src/effectivejava/chapter6/item39/annotationwitharrayparameter/ExceptionTest.java b/src/main/java/effectivejava/chapter6/item39/annotationwitharrayparameter/ExceptionTest.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/annotationwitharrayparameter/ExceptionTest.java
rename to src/main/java/effectivejava/chapter6/item39/annotationwitharrayparameter/ExceptionTest.java
diff --git a/src/effectivejava/chapter6/item39/annotationwitharrayparameter/RunTests.java b/src/main/java/effectivejava/chapter6/item39/annotationwitharrayparameter/RunTests.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/annotationwitharrayparameter/RunTests.java
rename to src/main/java/effectivejava/chapter6/item39/annotationwitharrayparameter/RunTests.java
diff --git a/src/effectivejava/chapter6/item39/annotationwitharrayparameter/Sample3.java b/src/main/java/effectivejava/chapter6/item39/annotationwitharrayparameter/Sample3.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/annotationwitharrayparameter/Sample3.java
rename to src/main/java/effectivejava/chapter6/item39/annotationwitharrayparameter/Sample3.java
diff --git a/src/effectivejava/chapter6/item39/annotationwithparameter/ExceptionTest.java b/src/main/java/effectivejava/chapter6/item39/annotationwithparameter/ExceptionTest.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/annotationwithparameter/ExceptionTest.java
rename to src/main/java/effectivejava/chapter6/item39/annotationwithparameter/ExceptionTest.java
diff --git a/src/effectivejava/chapter6/item39/annotationwithparameter/RunTests.java b/src/main/java/effectivejava/chapter6/item39/annotationwithparameter/RunTests.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/annotationwithparameter/RunTests.java
rename to src/main/java/effectivejava/chapter6/item39/annotationwithparameter/RunTests.java
diff --git a/src/effectivejava/chapter6/item39/annotationwithparameter/Sample2.java b/src/main/java/effectivejava/chapter6/item39/annotationwithparameter/Sample2.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/annotationwithparameter/Sample2.java
rename to src/main/java/effectivejava/chapter6/item39/annotationwithparameter/Sample2.java
diff --git a/src/effectivejava/chapter6/item39/markerannotation/RunTests.java b/src/main/java/effectivejava/chapter6/item39/markerannotation/RunTests.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/markerannotation/RunTests.java
rename to src/main/java/effectivejava/chapter6/item39/markerannotation/RunTests.java
diff --git a/src/effectivejava/chapter6/item39/markerannotation/Sample.java b/src/main/java/effectivejava/chapter6/item39/markerannotation/Sample.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/markerannotation/Sample.java
rename to src/main/java/effectivejava/chapter6/item39/markerannotation/Sample.java
diff --git a/src/effectivejava/chapter6/item39/markerannotation/Test.java b/src/main/java/effectivejava/chapter6/item39/markerannotation/Test.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/markerannotation/Test.java
rename to src/main/java/effectivejava/chapter6/item39/markerannotation/Test.java
diff --git a/src/effectivejava/chapter6/item39/repeatableannotation/ExceptionTest.java b/src/main/java/effectivejava/chapter6/item39/repeatableannotation/ExceptionTest.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/repeatableannotation/ExceptionTest.java
rename to src/main/java/effectivejava/chapter6/item39/repeatableannotation/ExceptionTest.java
diff --git a/src/effectivejava/chapter6/item39/repeatableannotation/ExceptionTestContainer.java b/src/main/java/effectivejava/chapter6/item39/repeatableannotation/ExceptionTestContainer.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/repeatableannotation/ExceptionTestContainer.java
rename to src/main/java/effectivejava/chapter6/item39/repeatableannotation/ExceptionTestContainer.java
diff --git a/src/effectivejava/chapter6/item39/repeatableannotation/RunTests.java b/src/main/java/effectivejava/chapter6/item39/repeatableannotation/RunTests.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/repeatableannotation/RunTests.java
rename to src/main/java/effectivejava/chapter6/item39/repeatableannotation/RunTests.java
diff --git a/src/effectivejava/chapter6/item39/repeatableannotation/Sample4.java b/src/main/java/effectivejava/chapter6/item39/repeatableannotation/Sample4.java
similarity index 100%
rename from src/effectivejava/chapter6/item39/repeatableannotation/Sample4.java
rename to src/main/java/effectivejava/chapter6/item39/repeatableannotation/Sample4.java
diff --git a/src/effectivejava/chapter6/item40/Bigram.java b/src/main/java/effectivejava/chapter6/item40/Bigram.java
similarity index 100%
rename from src/effectivejava/chapter6/item40/Bigram.java
rename to src/main/java/effectivejava/chapter6/item40/Bigram.java
diff --git a/src/effectivejava/chapter6/item40/Bigram2.java b/src/main/java/effectivejava/chapter6/item40/Bigram2.java
similarity index 100%
rename from src/effectivejava/chapter6/item40/Bigram2.java
rename to src/main/java/effectivejava/chapter6/item40/Bigram2.java
diff --git a/src/effectivejava/chapter7/item42/Operation.java b/src/main/java/effectivejava/chapter7/item42/Operation.java
similarity index 95%
rename from src/effectivejava/chapter7/item42/Operation.java
rename to src/main/java/effectivejava/chapter7/item42/Operation.java
index 2a568812..0eb02ad1 100644
--- a/src/effectivejava/chapter7/item42/Operation.java
+++ b/src/main/java/effectivejava/chapter7/item42/Operation.java
@@ -23,7 +23,7 @@ public double apply(double x, double y) {
return op.applyAsDouble(x, y);
}
- // Main method from Item 34 (Page 163)
+ // Main method from Item 34 (Page 163) .
public static void main(String[] args) {
double x = Double.parseDouble(args[0]);
double y = Double.parseDouble(args[1]);
diff --git a/src/main/java/effectivejava/chapter7/item42/SortFourWays.java b/src/main/java/effectivejava/chapter7/item42/SortFourWays.java
new file mode 100644
index 00000000..d7595358
--- /dev/null
+++ b/src/main/java/effectivejava/chapter7/item42/SortFourWays.java
@@ -0,0 +1,19 @@
+package effectivejava.chapter7.item42;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import static java.util.Comparator.*;
+
+import static java.util.Comparator.comparingInt;
+
+// Sorting with function objects (Pages 193-4)
+public class SortFourWays {
+ public static void main(String[] args) {
+ List words = Arrays.asList(args);
+
+ // TODO : sort according to String length
+
+ }
+}
diff --git a/src/effectivejava/chapter7/item43/Freq.java b/src/main/java/effectivejava/chapter7/item43/Freq.java
similarity index 100%
rename from src/effectivejava/chapter7/item43/Freq.java
rename to src/main/java/effectivejava/chapter7/item43/Freq.java
diff --git a/src/effectivejava/chapter7/item45/Card.java b/src/main/java/effectivejava/chapter7/item45/Card.java
similarity index 100%
rename from src/effectivejava/chapter7/item45/Card.java
rename to src/main/java/effectivejava/chapter7/item45/Card.java
diff --git a/src/effectivejava/chapter7/item45/CharStream.java b/src/main/java/effectivejava/chapter7/item45/CharStream.java
similarity index 100%
rename from src/effectivejava/chapter7/item45/CharStream.java
rename to src/main/java/effectivejava/chapter7/item45/CharStream.java
diff --git a/src/effectivejava/chapter7/item45/MersennePrimes.java b/src/main/java/effectivejava/chapter7/item45/MersennePrimes.java
similarity index 100%
rename from src/effectivejava/chapter7/item45/MersennePrimes.java
rename to src/main/java/effectivejava/chapter7/item45/MersennePrimes.java
diff --git a/src/effectivejava/chapter7/item45/anagrams/HybridAnagrams.java b/src/main/java/effectivejava/chapter7/item45/anagrams/HybridAnagrams.java
similarity index 100%
rename from src/effectivejava/chapter7/item45/anagrams/HybridAnagrams.java
rename to src/main/java/effectivejava/chapter7/item45/anagrams/HybridAnagrams.java
diff --git a/src/effectivejava/chapter7/item45/anagrams/IterativeAnagrams.java b/src/main/java/effectivejava/chapter7/item45/anagrams/IterativeAnagrams.java
similarity index 100%
rename from src/effectivejava/chapter7/item45/anagrams/IterativeAnagrams.java
rename to src/main/java/effectivejava/chapter7/item45/anagrams/IterativeAnagrams.java
diff --git a/src/effectivejava/chapter7/item45/anagrams/StreamAnagrams.java b/src/main/java/effectivejava/chapter7/item45/anagrams/StreamAnagrams.java
similarity index 100%
rename from src/effectivejava/chapter7/item45/anagrams/StreamAnagrams.java
rename to src/main/java/effectivejava/chapter7/item45/anagrams/StreamAnagrams.java
diff --git a/src/effectivejava/chapter7/item46/Freq.java b/src/main/java/effectivejava/chapter7/item46/Freq.java
similarity index 100%
rename from src/effectivejava/chapter7/item46/Freq.java
rename to src/main/java/effectivejava/chapter7/item46/Freq.java
diff --git a/src/effectivejava/chapter7/item47/Adapters.java b/src/main/java/effectivejava/chapter7/item47/Adapters.java
similarity index 100%
rename from src/effectivejava/chapter7/item47/Adapters.java
rename to src/main/java/effectivejava/chapter7/item47/Adapters.java
diff --git a/src/effectivejava/chapter7/item47/PowerSet.java b/src/main/java/effectivejava/chapter7/item47/PowerSet.java
similarity index 100%
rename from src/effectivejava/chapter7/item47/PowerSet.java
rename to src/main/java/effectivejava/chapter7/item47/PowerSet.java
diff --git a/src/effectivejava/chapter7/item47/SubLists.java b/src/main/java/effectivejava/chapter7/item47/SubLists.java
similarity index 100%
rename from src/effectivejava/chapter7/item47/SubLists.java
rename to src/main/java/effectivejava/chapter7/item47/SubLists.java
diff --git a/src/effectivejava/chapter7/item48/ParallelMersennePrimes.java b/src/main/java/effectivejava/chapter7/item48/ParallelMersennePrimes.java
similarity index 100%
rename from src/effectivejava/chapter7/item48/ParallelMersennePrimes.java
rename to src/main/java/effectivejava/chapter7/item48/ParallelMersennePrimes.java
diff --git a/src/effectivejava/chapter7/item48/ParallelPrimeCounting.java b/src/main/java/effectivejava/chapter7/item48/ParallelPrimeCounting.java
similarity index 100%
rename from src/effectivejava/chapter7/item48/ParallelPrimeCounting.java
rename to src/main/java/effectivejava/chapter7/item48/ParallelPrimeCounting.java
diff --git a/src/effectivejava/chapter8/item50/Attacks.java b/src/main/java/effectivejava/chapter8/item50/Attacks.java
similarity index 100%
rename from src/effectivejava/chapter8/item50/Attacks.java
rename to src/main/java/effectivejava/chapter8/item50/Attacks.java
diff --git a/src/effectivejava/chapter8/item50/Period.java b/src/main/java/effectivejava/chapter8/item50/Period.java
similarity index 56%
rename from src/effectivejava/chapter8/item50/Period.java
rename to src/main/java/effectivejava/chapter8/item50/Period.java
index d3181d9f..048c3997 100644
--- a/src/effectivejava/chapter8/item50/Period.java
+++ b/src/main/java/effectivejava/chapter8/item50/Period.java
@@ -31,24 +31,5 @@ public String toString() {
return start + " - " + end;
}
-// // Repaired constructor - makes defensive copies of parameters (Page 232)
-// public Period(Date start, Date end) {
-// this.start = new Date(start.getTime());
-// this.end = new Date(end.getTime());
-//
-// if (this.start.compareTo(this.end) > 0)
-// throw new IllegalArgumentException(
-// this.start + " after " + this.end);
-// }
-//
-// // Repaired accessors - make defensive copies of internal fields (Page 233)
-// public Date start() {
-// return new Date(start.getTime());
-// }
-//
-// public Date end() {
-// return new Date(end.getTime());
-// }
- // Remainder omitted
}
\ No newline at end of file
diff --git a/src/effectivejava/chapter8/item52/Champagne.java b/src/main/java/effectivejava/chapter8/item52/Champagne.java
similarity index 100%
rename from src/effectivejava/chapter8/item52/Champagne.java
rename to src/main/java/effectivejava/chapter8/item52/Champagne.java
diff --git a/src/effectivejava/chapter8/item52/CollectionClassifier.java b/src/main/java/effectivejava/chapter8/item52/CollectionClassifier.java
similarity index 100%
rename from src/effectivejava/chapter8/item52/CollectionClassifier.java
rename to src/main/java/effectivejava/chapter8/item52/CollectionClassifier.java
diff --git a/src/effectivejava/chapter8/item52/FixedCollectionClassifier.java b/src/main/java/effectivejava/chapter8/item52/FixedCollectionClassifier.java
similarity index 100%
rename from src/effectivejava/chapter8/item52/FixedCollectionClassifier.java
rename to src/main/java/effectivejava/chapter8/item52/FixedCollectionClassifier.java
diff --git a/src/effectivejava/chapter8/item52/Overriding.java b/src/main/java/effectivejava/chapter8/item52/Overriding.java
similarity index 100%
rename from src/effectivejava/chapter8/item52/Overriding.java
rename to src/main/java/effectivejava/chapter8/item52/Overriding.java
diff --git a/src/effectivejava/chapter8/item52/SetList.java b/src/main/java/effectivejava/chapter8/item52/SetList.java
similarity index 100%
rename from src/effectivejava/chapter8/item52/SetList.java
rename to src/main/java/effectivejava/chapter8/item52/SetList.java
diff --git a/src/effectivejava/chapter8/item52/SparklingWine.java b/src/main/java/effectivejava/chapter8/item52/SparklingWine.java
similarity index 100%
rename from src/effectivejava/chapter8/item52/SparklingWine.java
rename to src/main/java/effectivejava/chapter8/item52/SparklingWine.java
diff --git a/src/effectivejava/chapter8/item52/Wine.java b/src/main/java/effectivejava/chapter8/item52/Wine.java
similarity index 100%
rename from src/effectivejava/chapter8/item52/Wine.java
rename to src/main/java/effectivejava/chapter8/item52/Wine.java
diff --git a/src/effectivejava/chapter8/item53/Varargs.java b/src/main/java/effectivejava/chapter8/item53/Varargs.java
similarity index 100%
rename from src/effectivejava/chapter8/item53/Varargs.java
rename to src/main/java/effectivejava/chapter8/item53/Varargs.java
diff --git a/src/effectivejava/chapter8/item55/Max.java b/src/main/java/effectivejava/chapter8/item55/Max.java
similarity index 100%
rename from src/effectivejava/chapter8/item55/Max.java
rename to src/main/java/effectivejava/chapter8/item55/Max.java
diff --git a/src/effectivejava/chapter8/item55/ParentPid.java b/src/main/java/effectivejava/chapter8/item55/ParentPid.java
similarity index 100%
rename from src/effectivejava/chapter8/item55/ParentPid.java
rename to src/main/java/effectivejava/chapter8/item55/ParentPid.java
diff --git a/src/effectivejava/chapter8/item56/DocExamples.java b/src/main/java/effectivejava/chapter8/item56/DocExamples.java
similarity index 100%
rename from src/effectivejava/chapter8/item56/DocExamples.java
rename to src/main/java/effectivejava/chapter8/item56/DocExamples.java
diff --git a/src/effectivejava/chapter9/item58/Card.java b/src/main/java/effectivejava/chapter9/item58/Card.java
similarity index 81%
rename from src/effectivejava/chapter9/item58/Card.java
rename to src/main/java/effectivejava/chapter9/item58/Card.java
index a982bd76..fb0df5de 100644
--- a/src/effectivejava/chapter9/item58/Card.java
+++ b/src/main/java/effectivejava/chapter9/item58/Card.java
@@ -26,9 +26,6 @@ public static void main(String[] args) {
for (Iterator j = ranks.iterator(); j.hasNext(); )
deck.add(new Card(i.next(), j.next()));
-// // Preferred idiom for nested iteration on collections and arrays
-// for (Suit suit : suits)
-// for (Rank rank : ranks)
-// deck.add(new Card(suit, rank));
+
}
}
diff --git a/src/effectivejava/chapter9/item58/DiceRolls.java b/src/main/java/effectivejava/chapter9/item58/DiceRolls.java
similarity index 84%
rename from src/effectivejava/chapter9/item58/DiceRolls.java
rename to src/main/java/effectivejava/chapter9/item58/DiceRolls.java
index 760084ee..5ee2260c 100644
--- a/src/effectivejava/chapter9/item58/DiceRolls.java
+++ b/src/main/java/effectivejava/chapter9/item58/DiceRolls.java
@@ -15,8 +15,6 @@ public static void main(String[] args) {
System.out.println("***************************");
- for (Face f1 : faces)
- for (Face f2 : faces)
- System.out.println(f1 + " " + f2);
+
}
}
diff --git a/src/effectivejava/chapter9/item59/Curl.java b/src/main/java/effectivejava/chapter9/item59/Curl.java
similarity index 100%
rename from src/effectivejava/chapter9/item59/Curl.java
rename to src/main/java/effectivejava/chapter9/item59/Curl.java
diff --git a/src/effectivejava/chapter9/item59/RandomBug.java b/src/main/java/effectivejava/chapter9/item59/RandomBug.java
similarity index 100%
rename from src/effectivejava/chapter9/item59/RandomBug.java
rename to src/main/java/effectivejava/chapter9/item59/RandomBug.java
diff --git a/src/main/java/effectivejava/chapter9/item60/Calculator.java b/src/main/java/effectivejava/chapter9/item60/Calculator.java
new file mode 100644
index 00000000..34251ff5
--- /dev/null
+++ b/src/main/java/effectivejava/chapter9/item60/Calculator.java
@@ -0,0 +1,8 @@
+package effectivejava.chapter9.item60;
+
+public class Calculator {
+
+ public static void main(String[] args) {
+ System.out.println(1.03 - 0.42);
+ }
+}
diff --git a/src/effectivejava/chapter9/item60/Change.java b/src/main/java/effectivejava/chapter9/item60/Change.java
similarity index 100%
rename from src/effectivejava/chapter9/item60/Change.java
rename to src/main/java/effectivejava/chapter9/item60/Change.java
diff --git a/src/effectivejava/chapter9/item61/BrokenComparator.java b/src/main/java/effectivejava/chapter9/item61/BrokenComparator.java
similarity index 100%
rename from src/effectivejava/chapter9/item61/BrokenComparator.java
rename to src/main/java/effectivejava/chapter9/item61/BrokenComparator.java
diff --git a/src/effectivejava/chapter9/item61/Unbelievable.java b/src/main/java/effectivejava/chapter9/item61/Unbelievable.java
similarity index 100%
rename from src/effectivejava/chapter9/item61/Unbelievable.java
rename to src/main/java/effectivejava/chapter9/item61/Unbelievable.java
diff --git a/src/effectivejava/chapter9/item65/ReflectiveInstantiation.java b/src/main/java/effectivejava/chapter9/item65/ReflectiveInstantiation.java
similarity index 100%
rename from src/effectivejava/chapter9/item65/ReflectiveInstantiation.java
rename to src/main/java/effectivejava/chapter9/item65/ReflectiveInstantiation.java