diff --git a/src/main/java/org/effectivejava/examples/chapter02/item01/Provider.java b/src/main/java/org/effectivejava/examples/chapter02/item01/Provider.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item01/ReadMe.md b/src/main/java/org/effectivejava/examples/chapter02/item01/ReadMe.md new file mode 100644 index 0000000..c616e5d --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item01/ReadMe.md @@ -0,0 +1,6 @@ +Item 1: Consider static factory methods instead of constructors +A second advantage of static factory methods is that, unlike constructors, +they are not required to create a new object each time they’re invoked + +A third advantage of static factory methods is that, unlike constructors, +they can return an object of any subtype of their return type \ No newline at end of file diff --git a/src/main/java/org/effectivejava/examples/chapter02/item01/Service.java b/src/main/java/org/effectivejava/examples/chapter02/item01/Service.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item01/Services.java b/src/main/java/org/effectivejava/examples/chapter02/item01/Services.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item01/Test.java b/src/main/java/org/effectivejava/examples/chapter02/item01/Test.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item02/ReadMe.md b/src/main/java/org/effectivejava/examples/chapter02/item02/ReadMe.md new file mode 100644 index 0000000..204c5cc --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item02/ReadMe.md @@ -0,0 +1,5 @@ +Item 2: Consider a builder when faced with many constructor parameters +First see - Telescoping constructor , then java beans and then builder. +JavaBean may be in an inconsistent state partway through its construction. +the JavaBeans pattern precludes the possibility of making a class immutable +The Builder pattern simulates named optional parameters as found in Ada and Python. \ No newline at end of file diff --git a/src/main/java/org/effectivejava/examples/chapter02/item02/builder/NutritionFacts.java b/src/main/java/org/effectivejava/examples/chapter02/item02/builder/NutritionFacts.java old mode 100644 new mode 100755 index 8db2166..abc8f07 --- a/src/main/java/org/effectivejava/examples/chapter02/item02/builder/NutritionFacts.java +++ b/src/main/java/org/effectivejava/examples/chapter02/item02/builder/NutritionFacts.java @@ -60,7 +60,7 @@ private NutritionFacts(Builder builder) { } public static void main(String[] args) { - NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8) + NutritionFacts cocaCola = new Builder(240, 8) .calories(100).sodium(35).carbohydrate(27).build(); } } \ No newline at end of file diff --git a/src/main/java/org/effectivejava/examples/chapter02/item02/javabeans/NutritionFacts.java b/src/main/java/org/effectivejava/examples/chapter02/item02/javabeans/NutritionFacts.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item02/telescopingconstructor/NutritionFacts.java b/src/main/java/org/effectivejava/examples/chapter02/item02/telescopingconstructor/NutritionFacts.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item03/ReadMe.md b/src/main/java/org/effectivejava/examples/chapter02/item03/ReadMe.md new file mode 100644 index 0000000..89710bf --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item03/ReadMe.md @@ -0,0 +1,8 @@ +##Item 3: Enforce the singleton property with a private constructor or an enum type +The main advantage of the public field approach is that the declarations make it clear that the class is a singleton: +the public static field is final, so it will always contain the same object reference. + +###Serialization of singleton +To make a singleton class that is implemented using either of the previous approaches serializable (Chapter 11), +it is not sufficient merely to add imple- ments Serializable to its declaration. +To maintain the singleton guarantee, you have to declare all instance fields transient and provide a readResolve method \ No newline at end of file diff --git a/src/main/java/org/effectivejava/examples/chapter02/item03/enumoration/Elvis.java b/src/main/java/org/effectivejava/examples/chapter02/item03/enumoration/Elvis.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item03/field/Elvis.java b/src/main/java/org/effectivejava/examples/chapter02/item03/field/Elvis.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item03/method/Elvis.java b/src/main/java/org/effectivejava/examples/chapter02/item03/method/Elvis.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item03/serializable/Elvis.java b/src/main/java/org/effectivejava/examples/chapter02/item03/serializable/Elvis.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item04/ReadMe.md b/src/main/java/org/effectivejava/examples/chapter02/item04/ReadMe.md new file mode 100644 index 0000000..a030825 --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item04/ReadMe.md @@ -0,0 +1 @@ +##Item 4: Enforce noninstantiability with a private constructor \ No newline at end of file diff --git a/src/main/java/org/effectivejava/examples/chapter02/item04/UtilityClass.java b/src/main/java/org/effectivejava/examples/chapter02/item04/UtilityClass.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item05/ReadMe.md b/src/main/java/org/effectivejava/examples/chapter02/item05/ReadMe.md new file mode 100644 index 0000000..d48febf --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item05/ReadMe.md @@ -0,0 +1,35 @@ +##Item 5: Avoid creating unnecessary objects +###Immutability +An object can always be reused if it is immutable. Take the example of extraobjectcreation package. +String can be reused, rather than again and again using constructor. + +The static factory method ```Boolean.valueOf(String)``` is almost always preferable to the constructor Boolean(String). + +###Mutable objects can be reused too +In the slowversion package we are again and again creating boomstart and boomend object. +In the fastversion, we have just create it once in static block and reusing it again and again. +the keySet method of the Map interface returns a Set view of the +Map object, consisting of all the keys in the map. Naively, it would seem that every +call to keySet would have to create a new Set instance, but every call to keySet +on a given Map object may return the same Set instance. Although the returned +Set instance is typically mutable, all of the returned objects are functionally identical: +when one of the returned objects changes, so do all the others because +they’re all backed by the same Map instance. While it is harmless to create multiple +instances of the keySet view object, it is also unnecessary. + +###Issue due to autoboxing +There’s a new way to create unnecessary objects in release 1.5. It is called autoboxing. +This program gets the right answer, but it is much slower than it should be, +due to a one-character typographical error. The variable sum is declared as a Long +instead of a long, which means that the program constructs about 231 unnecessary +Long instances (roughly one for each time the long i is added to the Long sum). +Changing the declaration of sum from Long to long reduces the runtime from 43 +seconds to 6.8 seconds on my machine. The lesson is clear: prefer primitives to +boxed primitives, and watch out for unintentional autoboxing. + +###Issue with object pool +Conversely, avoiding object creation by maintaining your own object pool is a +bad idea unless the objects in the pool are extremely heavyweight. The classic +example of an object that does justify an object pool is a database connection. + + diff --git a/src/main/java/org/effectivejava/examples/chapter02/item05/Sum.java b/src/main/java/org/effectivejava/examples/chapter02/item05/autoboxingissue/Sum.java old mode 100644 new mode 100755 similarity index 67% rename from src/main/java/org/effectivejava/examples/chapter02/item05/Sum.java rename to src/main/java/org/effectivejava/examples/chapter02/item05/autoboxingissue/Sum.java index 1f2fbb0..bd3e138 --- a/src/main/java/org/effectivejava/examples/chapter02/item05/Sum.java +++ b/src/main/java/org/effectivejava/examples/chapter02/item05/autoboxingissue/Sum.java @@ -1,8 +1,9 @@ -package org.effectivejava.examples.chapter02.item05; +package org.effectivejava.examples.chapter02.item05.autoboxingissue; public class Sum { // Hideously slow program! Can you spot the object creation? public static void main(String[] args) { + //sum is Long rather than long Long sum = 0L; for (long i = 0; i < Integer.MAX_VALUE; i++) { sum += i; diff --git a/src/main/java/org/effectivejava/examples/chapter02/item05/extraobjectcreation/StringGen.java b/src/main/java/org/effectivejava/examples/chapter02/item05/extraobjectcreation/StringGen.java new file mode 100644 index 0000000..bd3ca25 --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item05/extraobjectcreation/StringGen.java @@ -0,0 +1,16 @@ +package org.effectivejava.examples.chapter02.item05.extraobjectcreation; + +/** + * Created by kchandra on 08/06/15. + */ +public class StringGen { + public static void main(String[] args) { + String s1 = new String("I am unnecessary"); + + //This version uses a single String instance + String s2 = "I am just an instance"; + + Boolean b1 = new Boolean("true");//bad + Boolean b2 = Boolean.valueOf("true");//better + } +} diff --git a/src/main/java/org/effectivejava/examples/chapter02/item05/fastversion/Person.java b/src/main/java/org/effectivejava/examples/chapter02/item05/fastversion/Person.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item05/slowversion/Person.java b/src/main/java/org/effectivejava/examples/chapter02/item05/slowversion/Person.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item06/EmptyStackException.java b/src/main/java/org/effectivejava/examples/chapter02/item06/EmptyStackException.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter02/item06/ReadMe.md b/src/main/java/org/effectivejava/examples/chapter02/item06/ReadMe.md new file mode 100644 index 0000000..afe1b78 --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item06/ReadMe.md @@ -0,0 +1,11 @@ +##Item 6: Eliminate obsolete object references + + +##Sources of memory leaks +###Object reference is not dereferenced +Nulling out object references should be the exception rather than the norm. +Eliminate obsolete reference. Check method ```popWithoutMemoryLeak``` to find the issue. + +###Another source of memory leaks is cache + +###A third common source of memory leaks is listeners and other callbacks. diff --git a/src/main/java/org/effectivejava/examples/chapter02/item06/Stack.java b/src/main/java/org/effectivejava/examples/chapter02/item06/Stack.java old mode 100644 new mode 100755 index c0e78cf..2dd4a95 --- a/src/main/java/org/effectivejava/examples/chapter02/item06/Stack.java +++ b/src/main/java/org/effectivejava/examples/chapter02/item06/Stack.java @@ -16,13 +16,22 @@ public void push(Object e) { ensureCapacity(); elements[size++] = e; } - +//pop with memory leak public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; } + //pop without memory leak + public Object popWithoutMemoryLeak() { + if (size == 0) + throw new EmptyStackException(); + Object result = elements[--size]; + elements[size] = null; // Eliminate obsolete reference + return result; + } + /** * Ensure space for at least one more element, roughly doubling the capacity * each time the array needs to grow. diff --git a/src/main/java/org/effectivejava/examples/chapter02/item07/ReadMe.md b/src/main/java/org/effectivejava/examples/chapter02/item07/ReadMe.md new file mode 100644 index 0000000..7578d6c --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item07/ReadMe.md @@ -0,0 +1,36 @@ +##Item 7: Avoid finalizers +Finalizers are unpredictable, often dangerous, and generally unnecessary. + +Don’t be seduced by the methods System.gc and System.runFinalization. +They may increase the odds of finalizers getting executed, but they don’t guarantee +it. The only methods that claim to guarantee finalization are System.runFinalizersOnExit +and its evil twin, Runtime.runFinalizersOnExit. These +methods are fatally flawed and have been deprecated + +###Examples of Terminiation methods - Terminate method pattern +Typical examples of explicit termination methods are the close methods on +InputStream, OutputStream, and java.sql.Connection. Another example is +the cancel method on java.util.Timer, which performs the necessary state +change to cause the thread associated with a Timer instance to terminate itself +gently. Examples from java.awt include Graphics.dispose and Window.dispose. +These methods are often overlooked, with predictably dire performance +consequences. A related method is Image.flush, which deallocates all the +resources associated with an Image instance but leaves it in a state where it can +still be used, reallocating the resources if necessary. + +###try-finally +Explicit termination methods are typically used in combination with the +try-finally construct to ensure termination. Invoking the explicit termination +method inside the finally clause ensures that it will get executed even if an +exception is thrown while the object is being used: +// try-finally block guarantees execution of termination method +``` +Foo foo = new Foo(...); +try { +// Do what must be done with foo +... +} finally { +foo.terminate(); // Explicit termination method +} +``` + diff --git a/src/main/java/org/effectivejava/examples/chapter02/item07/finalizerchaining/Child.java b/src/main/java/org/effectivejava/examples/chapter02/item07/finalizerchaining/Child.java new file mode 100644 index 0000000..f172b79 --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item07/finalizerchaining/Child.java @@ -0,0 +1,16 @@ +package org.effectivejava.examples.chapter02.item07.finalizerchaining; + +/** + * Created by kchandra on 08/06/15. + */ +public class Child extends Parent { + // Manual finalizer chaining + @Override + protected void finalize() throws Throwable { + try { + System.out.println("DD"); // Finalize subclass state + } finally { + super.finalize(); + } + } +} diff --git a/src/main/java/org/effectivejava/examples/chapter02/item07/finalizerchaining/Parent.java b/src/main/java/org/effectivejava/examples/chapter02/item07/finalizerchaining/Parent.java new file mode 100644 index 0000000..a70932b --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter02/item07/finalizerchaining/Parent.java @@ -0,0 +1,10 @@ +package org.effectivejava.examples.chapter02.item07.finalizerchaining; + +/** + * Created by kchandra on 08/06/15. + */ +public class Parent { + protected void finalize() throws Throwable{ + + } +} diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/CaseInsensitiveString.java b/src/main/java/org/effectivejava/examples/chapter03/item08/CaseInsensitiveString.java old mode 100644 new mode 100755 index 620505e..95536ef --- a/src/main/java/org/effectivejava/examples/chapter03/item08/CaseInsensitiveString.java +++ b/src/main/java/org/effectivejava/examples/chapter03/item08/CaseInsensitiveString.java @@ -20,15 +20,16 @@ public boolean equals(Object o) { return false; } - // This version is correct. - // @Override public boolean equals(Object o) { - // return o instanceof CaseInsensitiveString && - // ((CaseInsensitiveString) o).s.equalsIgnoreCase(s); - // } +//This version is correct + public boolean correctEquals(Object o) { + return o instanceof CaseInsensitiveString && + ((CaseInsensitiveString) o).s.equalsIgnoreCase(s); + } + public static void main(String[] args) { CaseInsensitiveString cis = new CaseInsensitiveString("Polish"); String s = "polish"; - System.out.println(cis.equals(s) + " " + s.equals(cis)); + System.out.println(cis.equals(s) + " " + s.equals(cis)+ " " + cis.correctEquals(s)); } } diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/Color.java b/src/main/java/org/effectivejava/examples/chapter03/item08/Color.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/ColorPoint.java b/src/main/java/org/effectivejava/examples/chapter03/item08/ColorPoint.java old mode 100644 new mode 100755 index 6fcbc7d..5b31ed0 --- a/src/main/java/org/effectivejava/examples/chapter03/item08/ColorPoint.java +++ b/src/main/java/org/effectivejava/examples/chapter03/item08/ColorPoint.java @@ -17,18 +17,19 @@ public boolean equals(Object o) { return super.equals(o) && ((ColorPoint) o).color == color; } - // Broken - violates transitivity! - // @Override public boolean equals(Object o) { - // if (!(o instanceof Point)) - // return false; - // - // // If o is a normal Point, do a color-blind comparison - // if (!(o instanceof ColorPoint)) - // return o.equals(this); - // - // // o is a ColorPoint; do a full comparison - // return super.equals(o) && ((ColorPoint)o).color == color; - // } + //Broken - violates transitivity! + + public boolean equals2(Object o) { + if (!(o instanceof Point)) + return false; + + // If o is a normal Point, do a color-blind comparison + if (!(o instanceof ColorPoint)) + return o.equals(this); + + // o is a ColorPoint; do a full comparison + return super.equals(o) && ((ColorPoint)o).color == color; + } public static void main(String[] args) { // First equals function violates symmetry diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/ColorPointTest.java b/src/main/java/org/effectivejava/examples/chapter03/item08/ColorPointTest.java new file mode 100644 index 0000000..ecb13e1 --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter03/item08/ColorPointTest.java @@ -0,0 +1,13 @@ +package org.effectivejava.examples.chapter03.item08; + +/** + * Created by kchandra on 09/06/15. + */ +public class ColorPointTest { + public static void main(String[] args) { + Point p1 = new Point(1,0); + Point p2 = new ColorPoint(1,0, Color.BLUE); + + System.out.println(p1.equals(p2) + " "+ p2.equals(p1));//true false + } +} diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/CounterPoint.java b/src/main/java/org/effectivejava/examples/chapter03/item08/CounterPoint.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/CounterPointTest.java b/src/main/java/org/effectivejava/examples/chapter03/item08/CounterPointTest.java old mode 100644 new mode 100755 index 12cd675..a515ccd --- a/src/main/java/org/effectivejava/examples/chapter03/item08/CounterPointTest.java +++ b/src/main/java/org/effectivejava/examples/chapter03/item08/CounterPointTest.java @@ -21,8 +21,11 @@ public static boolean onUnitCircle(Point p) { public static void main(String[] args) { Point p1 = new Point(1, 0); + Point p2 = new CounterPoint(1, 0); + + // Prints true System.out.println(onUnitCircle(p1)); diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/FooNonReflexive.java b/src/main/java/org/effectivejava/examples/chapter03/item08/FooNonReflexive.java new file mode 100644 index 0000000..bc53326 --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter03/item08/FooNonReflexive.java @@ -0,0 +1,13 @@ +package org.effectivejava.examples.chapter03.item08; + +/** + * Created by kchandra on 08/06/15. + */ +public class FooNonReflexive { + + int i; + public boolean equals(Object obj) { + return ((FooNonReflexive) obj).i < this.i; + } + +} diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/Point.java b/src/main/java/org/effectivejava/examples/chapter03/item08/Point.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/ReadMe.md b/src/main/java/org/effectivejava/examples/chapter03/item08/ReadMe.md new file mode 100644 index 0000000..489221f --- /dev/null +++ b/src/main/java/org/effectivejava/examples/chapter03/item08/ReadMe.md @@ -0,0 +1,26 @@ +##Item 8: Obey the general contract when overriding equals +###Equals method follows equivalence relation +- Reflexive +- Symmetric +- Transitive +- Consistent +- x.equals(y) should return false if x is not null, and y is null +###Reflexivity - x is equal to x. +This will be generally be the case, but take the case of ```FooNonReflexive``` class. (Not taken from Effective java, but theme is still the same) +```FooNonReflexive.equals()``` will return false. +And when you put it into a list and call list.contains(foo) it will return false, +because none of the elements in the list was equal to the one you passed. +This is so because list.contains(..) iterates the elements and for each of them checks if (elem.equals(arg)) + +###Symmetric - x.equals(y) = y.equals(x) +check the case of CaseInsensitiveString. + +###Transitivity +Consider the class Point, and ColorPoint extending Point. +Equals method of ColorPoint is broken, as it is not symmetric. See ColorPointTest +``` + Point p1 = new Point(1,0); + Point p2 = new ColorPoint(1,0, Color.BLUE); + + System.out.println(p1.equals(p2) + " "+ p2.equals(p1)); +``` diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/composition/Color.java b/src/main/java/org/effectivejava/examples/chapter03/item08/composition/Color.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/composition/ColorPoint.java b/src/main/java/org/effectivejava/examples/chapter03/item08/composition/ColorPoint.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item08/composition/Point.java b/src/main/java/org/effectivejava/examples/chapter03/item08/composition/Point.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item09/PhoneNumber.java b/src/main/java/org/effectivejava/examples/chapter03/item09/PhoneNumber.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item10/PhoneNumber.java b/src/main/java/org/effectivejava/examples/chapter03/item10/PhoneNumber.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item11/EmptyStackException.java b/src/main/java/org/effectivejava/examples/chapter03/item11/EmptyStackException.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item11/PhoneNumber.java b/src/main/java/org/effectivejava/examples/chapter03/item11/PhoneNumber.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item11/Stack.java b/src/main/java/org/effectivejava/examples/chapter03/item11/Stack.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item12/PhoneNumber.java b/src/main/java/org/effectivejava/examples/chapter03/item12/PhoneNumber.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter03/item12/WordList.java b/src/main/java/org/effectivejava/examples/chapter03/item12/WordList.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/Item20/hierarchy/Circle.java b/src/main/java/org/effectivejava/examples/chapter04/Item20/hierarchy/Circle.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/Item20/hierarchy/Figure.java b/src/main/java/org/effectivejava/examples/chapter04/Item20/hierarchy/Figure.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/Item20/hierarchy/Rectangle.java b/src/main/java/org/effectivejava/examples/chapter04/Item20/hierarchy/Rectangle.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/Item20/hierarchy/Square.java b/src/main/java/org/effectivejava/examples/chapter04/Item20/hierarchy/Square.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/Item20/taggedclass/Figure.java b/src/main/java/org/effectivejava/examples/chapter04/Item20/taggedclass/Figure.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item14/Point.java b/src/main/java/org/effectivejava/examples/chapter04/item14/Point.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item14/Time.java b/src/main/java/org/effectivejava/examples/chapter04/item14/Time.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item15/Complex.java b/src/main/java/org/effectivejava/examples/chapter04/item15/Complex.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item16/ForwardingSet.java b/src/main/java/org/effectivejava/examples/chapter04/item16/ForwardingSet.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item16/InstrumentedHashSet.java b/src/main/java/org/effectivejava/examples/chapter04/item16/InstrumentedHashSet.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item16/InstrumentedSet.java b/src/main/java/org/effectivejava/examples/chapter04/item16/InstrumentedSet.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item17/Sub.java b/src/main/java/org/effectivejava/examples/chapter04/item17/Sub.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item17/Super.java b/src/main/java/org/effectivejava/examples/chapter04/item17/Super.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item18/AbstractMapEntry.java b/src/main/java/org/effectivejava/examples/chapter04/item18/AbstractMapEntry.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item18/IntArrays.java b/src/main/java/org/effectivejava/examples/chapter04/item18/IntArrays.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter04/item19/PhysicalConstants.java b/src/main/java/org/effectivejava/examples/chapter04/item19/PhysicalConstants.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item23/Raw.java b/src/main/java/org/effectivejava/examples/chapter05/item23/Raw.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item25/Function.java b/src/main/java/org/effectivejava/examples/chapter05/item25/Function.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item25/Reduction.java b/src/main/java/org/effectivejava/examples/chapter05/item25/Reduction.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item26/firsttechnqiue/EmptyStackException.java b/src/main/java/org/effectivejava/examples/chapter05/item26/firsttechnqiue/EmptyStackException.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item26/firsttechnqiue/Stack.java b/src/main/java/org/effectivejava/examples/chapter05/item26/firsttechnqiue/Stack.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item26/secondtechnqiue/EmptyStackException.java b/src/main/java/org/effectivejava/examples/chapter05/item26/secondtechnqiue/EmptyStackException.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item26/secondtechnqiue/Stack.java b/src/main/java/org/effectivejava/examples/chapter05/item26/secondtechnqiue/Stack.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item27/GenericSingletonFactory.java b/src/main/java/org/effectivejava/examples/chapter05/item27/GenericSingletonFactory.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item27/GenericStaticFactory.java b/src/main/java/org/effectivejava/examples/chapter05/item27/GenericStaticFactory.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item27/RecursiveTypeBound.java b/src/main/java/org/effectivejava/examples/chapter05/item27/RecursiveTypeBound.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item27/UnaryFunction.java b/src/main/java/org/effectivejava/examples/chapter05/item27/UnaryFunction.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item27/Union.java b/src/main/java/org/effectivejava/examples/chapter05/item27/Union.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item28/EmptyStackException.java b/src/main/java/org/effectivejava/examples/chapter05/item28/EmptyStackException.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item28/Function.java b/src/main/java/org/effectivejava/examples/chapter05/item28/Function.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item28/RecursiveTypeBound.java b/src/main/java/org/effectivejava/examples/chapter05/item28/RecursiveTypeBound.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item28/Reduction.java b/src/main/java/org/effectivejava/examples/chapter05/item28/Reduction.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item28/Stack.java b/src/main/java/org/effectivejava/examples/chapter05/item28/Stack.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item28/Swap.java b/src/main/java/org/effectivejava/examples/chapter05/item28/Swap.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item28/Union.java b/src/main/java/org/effectivejava/examples/chapter05/item28/Union.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item29/Favorites.java b/src/main/java/org/effectivejava/examples/chapter05/item29/Favorites.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter05/item29/PrintAnnotation.java b/src/main/java/org/effectivejava/examples/chapter05/item29/PrintAnnotation.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item30/Operation.java b/src/main/java/org/effectivejava/examples/chapter06/item30/Operation.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item30/PayrollDay.java b/src/main/java/org/effectivejava/examples/chapter06/item30/PayrollDay.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item30/Planet.java b/src/main/java/org/effectivejava/examples/chapter06/item30/Planet.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item30/WeightTable.java b/src/main/java/org/effectivejava/examples/chapter06/item30/WeightTable.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item31/Ensemble.java b/src/main/java/org/effectivejava/examples/chapter06/item31/Ensemble.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item32/Text.java b/src/main/java/org/effectivejava/examples/chapter06/item32/Text.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item33/Herb.java b/src/main/java/org/effectivejava/examples/chapter06/item33/Herb.java old mode 100644 new mode 100755 index af94516..8c22551 --- a/src/main/java/org/effectivejava/examples/chapter06/item33/Herb.java +++ b/src/main/java/org/effectivejava/examples/chapter06/item33/Herb.java @@ -34,9 +34,9 @@ public static void main(String[] args) { new Herb("Rosemary", Type.PERENNIAL) }; // Using an EnumMap to associate data with an enum - Page 162 - Map> herbsByType = new EnumMap>( - Herb.Type.class); - for (Herb.Type t : Herb.Type.values()) + Map> herbsByType = new EnumMap>( + Type.class); + for (Type t : Type.values()) herbsByType.put(t, new HashSet()); for (Herb h : garden) herbsByType.get(h.type).add(h); diff --git a/src/main/java/org/effectivejava/examples/chapter06/item33/Phase.java b/src/main/java/org/effectivejava/examples/chapter06/item33/Phase.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item34/BasicOperation.java b/src/main/java/org/effectivejava/examples/chapter06/item34/BasicOperation.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item34/ExtendedOperation.java b/src/main/java/org/effectivejava/examples/chapter06/item34/ExtendedOperation.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item34/Operation.java b/src/main/java/org/effectivejava/examples/chapter06/item34/Operation.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item35/ExceptionTest.java b/src/main/java/org/effectivejava/examples/chapter06/item35/ExceptionTest.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item35/RunTests.java b/src/main/java/org/effectivejava/examples/chapter06/item35/RunTests.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item35/Sample.java b/src/main/java/org/effectivejava/examples/chapter06/item35/Sample.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item35/Sample2.java b/src/main/java/org/effectivejava/examples/chapter06/item35/Sample2.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item35/Test.java b/src/main/java/org/effectivejava/examples/chapter06/item35/Test.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter06/item36/Bigram.java b/src/main/java/org/effectivejava/examples/chapter06/item36/Bigram.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item39/Attack.java b/src/main/java/org/effectivejava/examples/chapter07/item39/Attack.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item39/Period.java b/src/main/java/org/effectivejava/examples/chapter07/item39/Period.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item41/CollectionClassifier.java b/src/main/java/org/effectivejava/examples/chapter07/item41/CollectionClassifier.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item41/Overriding.java b/src/main/java/org/effectivejava/examples/chapter07/item41/Overriding.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item41/SetList.java b/src/main/java/org/effectivejava/examples/chapter07/item41/SetList.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item42/Varargs.java b/src/main/java/org/effectivejava/examples/chapter07/item42/Varargs.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item49/BrokenComparator.java b/src/main/java/org/effectivejava/examples/chapter07/item49/BrokenComparator.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item49/Unbelievable.java b/src/main/java/org/effectivejava/examples/chapter07/item49/Unbelievable.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter07/item53/MakeSet.java b/src/main/java/org/effectivejava/examples/chapter07/item53/MakeSet.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter08/item46/DiceRolls.java b/src/main/java/org/effectivejava/examples/chapter08/item46/DiceRolls.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter08/item46/NestedIteration.java b/src/main/java/org/effectivejava/examples/chapter08/item46/NestedIteration.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter08/item47/RandomBug.java b/src/main/java/org/effectivejava/examples/chapter08/item47/RandomBug.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter08/item48/Arithmetic.java b/src/main/java/org/effectivejava/examples/chapter08/item48/Arithmetic.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item66/brokenstopthread/StopThread.java b/src/main/java/org/effectivejava/examples/chapter10/item66/brokenstopthread/StopThread.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item66/fixedstopthread1/StopThread.java b/src/main/java/org/effectivejava/examples/chapter10/item66/fixedstopthread1/StopThread.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item66/fixedstopthread2/StopThread.java b/src/main/java/org/effectivejava/examples/chapter10/item66/fixedstopthread2/StopThread.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item67/ForwardingSet.java b/src/main/java/org/effectivejava/examples/chapter10/item67/ForwardingSet.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item67/ObservableSet.java b/src/main/java/org/effectivejava/examples/chapter10/item67/ObservableSet.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item67/SetObserver.java b/src/main/java/org/effectivejava/examples/chapter10/item67/SetObserver.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item67/Test1.java b/src/main/java/org/effectivejava/examples/chapter10/item67/Test1.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item67/Test2.java b/src/main/java/org/effectivejava/examples/chapter10/item67/Test2.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item67/Test3.java b/src/main/java/org/effectivejava/examples/chapter10/item67/Test3.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item69/ConcurrentTimer.java b/src/main/java/org/effectivejava/examples/chapter10/item69/ConcurrentTimer.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item69/Intern.java b/src/main/java/org/effectivejava/examples/chapter10/item69/Intern.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item71/Initialization.java b/src/main/java/org/effectivejava/examples/chapter10/item71/Initialization.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter10/item72/SlowCountDownLatch.java b/src/main/java/org/effectivejava/examples/chapter10/item72/SlowCountDownLatch.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item74/AbstractFoo.java b/src/main/java/org/effectivejava/examples/chapter11/item74/AbstractFoo.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item74/Foo.java b/src/main/java/org/effectivejava/examples/chapter11/item74/Foo.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item75/StringList.java b/src/main/java/org/effectivejava/examples/chapter11/item75/StringList.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item76/BogusPeriod.java b/src/main/java/org/effectivejava/examples/chapter11/item76/BogusPeriod.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item76/MutablePeriod.java b/src/main/java/org/effectivejava/examples/chapter11/item76/MutablePeriod.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item76/Period.java b/src/main/java/org/effectivejava/examples/chapter11/item76/Period.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item77/Elvis.java b/src/main/java/org/effectivejava/examples/chapter11/item77/Elvis.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item77/ElvisImpersonator.java b/src/main/java/org/effectivejava/examples/chapter11/item77/ElvisImpersonator.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item77/ElvisStealer.java b/src/main/java/org/effectivejava/examples/chapter11/item77/ElvisStealer.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item77/enumSingleton/Elvis.java b/src/main/java/org/effectivejava/examples/chapter11/item77/enumSingleton/Elvis.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item78/BogusPeriod.java b/src/main/java/org/effectivejava/examples/chapter11/item78/BogusPeriod.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item78/MutablePeriod.java b/src/main/java/org/effectivejava/examples/chapter11/item78/MutablePeriod.java old mode 100644 new mode 100755 diff --git a/src/main/java/org/effectivejava/examples/chapter11/item78/Period.java b/src/main/java/org/effectivejava/examples/chapter11/item78/Period.java old mode 100644 new mode 100755