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