├── .gitignore ├── README.md ├── injavawetrust.effective.java ├── .gitignore ├── .settings │ └── .gitignore ├── test.txt └── src │ ├── chapter05 │ ├── item26 │ │ └── examples │ │ │ ├── Coin.java │ │ │ ├── Test05.java │ │ │ ├── Stamp.java │ │ │ ├── Test02Generic.java │ │ │ ├── Test01Raw.java │ │ │ └── Test03.java │ ├── item31 │ │ └── examples │ │ │ ├── ChooserV2.java │ │ │ ├── ScheduledFutureTest.java │ │ │ ├── Chooser.java │ │ │ ├── UnionSetTest.java │ │ │ ├── Max.java │ │ │ ├── StackV2.java │ │ │ ├── Test01.java │ │ │ ├── UnionSet.java │ │ │ └── Stack.java │ ├── item28 │ │ └── examples │ │ │ ├── Test03.java │ │ │ ├── Test02.java │ │ │ ├── Test01.java │ │ │ ├── Chooser.java │ │ │ ├── ChooserV3.java │ │ │ └── ChooserV2.java │ ├── item27 │ │ └── examples │ │ │ └── Test01.java │ ├── item32 │ │ └── examples │ │ │ ├── Test03.java │ │ │ ├── Test01.java │ │ │ ├── Test05.java │ │ │ └── Test04.java │ ├── item29 │ │ └── examples │ │ │ ├── Test01.java │ │ │ └── StackV1.java │ ├── item30 │ │ └── examples │ │ │ ├── Test02.java │ │ │ ├── Test3.java │ │ │ └── Test01.java │ └── item33 │ │ └── examples │ │ ├── Test01.java │ │ ├── FavoritesV2.java │ │ ├── FavoritesV3.java │ │ └── Favorites.java │ ├── chapter04 │ ├── item20 │ │ └── examples │ │ │ ├── Test03.java │ │ │ ├── Singer.java │ │ │ ├── SongWriter.java │ │ │ ├── Test01.java │ │ │ ├── SingerSongWriter.java │ │ │ └── AbstractMapEntry.java │ ├── item23 │ │ └── examples │ │ │ ├── hierarchy │ │ │ ├── Figure.java │ │ │ ├── Circle.java │ │ │ ├── Rectangle.java │ │ │ └── Square.java │ │ │ └── tagged │ │ │ └── Figure.java │ ├── item15 │ │ ├── ThingSecurityHole.java │ │ ├── ThingSecurityHoleFixedV2.java │ │ ├── ThingSecurityHoleFixed.java │ │ ├── Thing.java │ │ └── Test01.java │ ├── item19 │ │ └── examples │ │ │ ├── Super.java │ │ │ ├── Sub.java │ │ │ └── Test01.java │ ├── item25 │ │ └── examples │ │ │ ├── pack2 │ │ │ └── Dessert.java │ │ │ ├── pack1 │ │ │ └── Main.java │ │ │ └── staticmember │ │ │ └── Test.java │ ├── item22 │ │ └── examples │ │ │ ├── PyhsicalConstants.java │ │ │ └── PhysicalConstantsV2.java │ ├── item16 │ │ ├── examples │ │ │ ├── Time.java │ │ │ └── Point.java │ │ └── Item16Notes.java │ ├── item18 │ │ └── examples │ │ │ └── InstrumentedHashSet.java │ └── item17 │ │ └── examples │ │ └── Complex.java │ ├── chapter07 │ ├── item46 │ │ └── examples │ │ │ ├── Artist.java │ │ │ ├── Test03.java │ │ │ ├── Album.java │ │ │ ├── Test04.java │ │ │ ├── Operation.java │ │ │ └── Test01.java │ ├── item45 │ │ └── examples │ │ │ ├── Suit.java │ │ │ ├── Rank.java │ │ │ ├── Card.java │ │ │ ├── Test01.java │ │ │ ├── Test03.java │ │ │ ├── AnagramsV2.java │ │ │ ├── Test02.java │ │ │ └── Anagrams.java │ ├── item47 │ │ └── examples │ │ │ ├── Test02.java │ │ │ ├── PowerSet.java │ │ │ └── Test01.java │ ├── item42 │ │ └── examples │ │ │ ├── Test04.java │ │ │ ├── Test03.java │ │ │ ├── Test01.java │ │ │ ├── Test02.java │ │ │ └── Operation.java │ ├── item48 │ │ └── examples │ │ │ └── Test01.java │ ├── item44 │ │ └── examples │ │ │ └── EldestEntryRemovalFunction.java │ └── item43 │ │ └── examples │ │ └── Test01.java │ ├── chapter10 │ ├── item76 │ │ └── examples │ │ │ ├── Test1.java │ │ │ └── StackImpl.java │ ├── item77 │ │ └── examples │ │ │ └── Test1.java │ ├── item73 │ │ └── examples │ │ │ ├── Test3.java │ │ │ ├── Test1.java │ │ │ └── Test2.java │ ├── item69 │ │ ├── examples │ │ │ ├── Test2.java │ │ │ └── Test1.java │ │ └── Item69Notes.java │ └── item71 │ │ └── examples │ │ └── Test1.java │ ├── chapter11 │ ├── item83 │ │ └── examples │ │ │ ├── FieldType.java │ │ │ ├── Test1.java │ │ │ ├── Test2.java │ │ │ ├── Test4.java │ │ │ ├── Test5.java │ │ │ └── Test3.java │ ├── item79 │ │ └── examples │ │ │ ├── SetObserver2.java │ │ │ ├── SetObserver3.java │ │ │ ├── SetObserver.java │ │ │ ├── Test1.java │ │ │ ├── Test4.java │ │ │ ├── Test5.java │ │ │ └── Test2.java │ ├── item82 │ │ └── examples │ │ │ ├── Test2.java │ │ │ └── Test1.java │ ├── item80 │ │ └── examples │ │ │ └── Test1.java │ ├── item78 │ │ └── examples │ │ │ ├── Test6.java │ │ │ ├── StopThread4.java │ │ │ ├── StopThread2.java │ │ │ ├── StopThread.java │ │ │ └── StopThread3.java │ ├── item81 │ │ └── examples │ │ │ ├── Test1.java │ │ │ ├── Test2.java │ │ │ └── Test3.java │ └── item84 │ │ └── examples │ │ └── SlowCountDownLatch.java │ ├── chapter06 │ ├── item34 │ │ └── examples │ │ │ ├── Orange.java │ │ │ ├── Apple.java │ │ │ ├── OperationV4.java │ │ │ ├── Test03Operation.java │ │ │ ├── Test02WeightTable.java │ │ │ ├── Test01.java │ │ │ └── OperationV2.java │ ├── item38 │ │ └── examples │ │ │ ├── Operation.java │ │ │ ├── ExtendedOperation.java │ │ │ ├── BasicOperation.java │ │ │ └── Test01.java │ ├── item36 │ │ ├── examples │ │ │ ├── Test01.java │ │ │ ├── TextV2.java │ │ │ └── Text.java │ │ └── Item36Notes.java │ ├── item35 │ │ ├── examples │ │ │ ├── Ensemble.java │ │ │ └── EnsembleV2.java │ │ └── Item35Notes.java │ ├── item37 │ │ ├── examples │ │ │ ├── Plant.java │ │ │ ├── Test01.java │ │ │ ├── Test02.java │ │ │ ├── PhaseV2.java │ │ │ ├── Phase.java │ │ │ └── Test03.java │ │ └── Item37Notes.java │ ├── item39 │ │ └── examples │ │ │ ├── ExceptionTestContainer.java │ │ │ ├── Test.java │ │ │ ├── ExceptionTestV3.java │ │ │ ├── Sample3.java │ │ │ ├── Sample2.java │ │ │ ├── Sample.java │ │ │ ├── ExceptionTestV2.java │ │ │ ├── Sample4.java │ │ │ ├── ExceptionTest.java │ │ │ └── RunTests2.java │ └── item40 │ │ ├── examples │ │ ├── BigramV2.java │ │ └── Bigram.java │ │ └── Item40Notes.java │ ├── errata │ └── Errata.java │ ├── chapter03 │ ├── item10 │ │ ├── examples │ │ │ ├── Test01.java │ │ │ ├── favor │ │ │ │ └── composition │ │ │ │ │ ├── Test01.java │ │ │ │ │ ├── Point.java │ │ │ │ │ └── ColorPoint.java │ │ │ └── violate │ │ │ │ ├── transitivity │ │ │ │ ├── Test01.java │ │ │ │ ├── case1 │ │ │ │ │ ├── TestCase1.java │ │ │ │ │ └── Point.java │ │ │ │ ├── case2 │ │ │ │ │ ├── Point.java │ │ │ │ │ └── TestCase2.java │ │ │ │ └── Test02.java │ │ │ │ ├── liskov │ │ │ │ └── substitution │ │ │ │ │ ├── ColorPoint.java │ │ │ │ │ ├── CounterPoint.java │ │ │ │ │ ├── Point.java │ │ │ │ │ └── TestCase3.java │ │ │ │ └── symmetry │ │ │ │ ├── ViolatesSymmetryFix.java │ │ │ │ └── ViolatesSymmetry.java │ │ └── LiskovSubstitutionNotes.java │ ├── item12 │ │ └── examples │ │ │ ├── Test01.java │ │ │ └── PhoneNumber.java │ ├── item13 │ │ └── examples │ │ │ ├── Test01.java │ │ │ ├── Yum.java │ │ │ ├── Test03.java │ │ │ ├── Test04.java │ │ │ ├── Test02.java │ │ │ ├── PhoneNumber.java │ │ │ └── HashTableImpl.java │ ├── item14 │ │ ├── examples │ │ │ ├── Test01.java │ │ │ ├── violation │ │ │ │ ├── Car.java │ │ │ │ └── ComparatorCar.java │ │ │ ├── Car.java │ │ │ └── Test02.java │ │ └── Test01.java │ └── item11 │ │ └── examples │ │ ├── objects │ │ └── PhoneNumber.java │ │ └── better │ │ └── PhoneNumber.java │ ├── chapter08 │ ├── item56 │ │ └── examples │ │ │ ├── Degree.java │ │ │ ├── Test2.java │ │ │ ├── Test1.java │ │ │ └── MapDoc.java │ ├── item53 │ │ ├── examples │ │ │ ├── Test1.java │ │ │ ├── Test3.java │ │ │ ├── Test2.java │ │ │ └── Test4.java │ │ └── Item53Notes.java │ ├── item49 │ │ └── examples │ │ │ ├── Test1.java │ │ │ └── Test2.java │ ├── item50 │ │ └── examples │ │ │ ├── Test2.java │ │ │ ├── Test1.java │ │ │ └── Period1.java │ ├── item55 │ │ └── examples │ │ │ ├── Test3.java │ │ │ ├── Test4.java │ │ │ └── Test2.java │ └── item52 │ │ └── examples │ │ ├── TestOverride.java │ │ ├── Test1.java │ │ └── SetList.java │ ├── chapter02 │ ├── item08 │ │ └── examples │ │ │ ├── Test02.java │ │ │ ├── Test01.java │ │ │ └── Room.java │ ├── item02 │ │ └── examples │ │ │ ├── telescoping │ │ │ └── Test01.java │ │ │ ├── javabeans │ │ │ └── Test01.java │ │ │ └── builder │ │ │ ├── pizza │ │ │ ├── Test02.java │ │ │ ├── NyPizza.java │ │ │ ├── Calzone.java │ │ │ └── Pizza.java │ │ │ └── nutrition │ │ │ └── Test01.java │ ├── item04 │ │ ├── examples │ │ │ └── UtilityClass.java │ │ └── Item04Notes.java │ ├── item03 │ │ ├── examples │ │ │ └── ElvisEnum.java │ │ └── Item03Notes.java │ ├── item06 │ │ └── examples │ │ │ ├── Test01.java │ │ │ ├── Test02.java │ │ │ └── RomanNumerals.java │ ├── item01 │ │ └── Test01EnumSet.java │ ├── item07 │ │ └── Item07Notes.java │ ├── item05 │ │ ├── examples │ │ │ └── SpellChecker.java │ │ └── Item05Notes.java │ └── item09 │ │ └── examples │ │ └── TryFinallyExample.java │ ├── chapter09 │ ├── item64 │ │ └── examples │ │ │ └── Test1.java │ ├── item61 │ │ └── examples │ │ │ ├── Test3.java │ │ │ ├── Test6.java │ │ │ ├── Test2.java │ │ │ ├── Test4.java │ │ │ ├── Test1.java │ │ │ └── Test5.java │ ├── item60 │ │ └── examples │ │ │ ├── Test1.java │ │ │ ├── Test3.java │ │ │ ├── Test2.java │ │ │ └── Test4.java │ ├── item62 │ │ ├── examples │ │ │ ├── ThreadLocalV2.java │ │ │ ├── ThreadLocalV3.java │ │ │ ├── Test1.java │ │ │ └── ThreadLocalV1.java │ │ └── Item62Notes.java │ ├── item59 │ │ └── examples │ │ │ └── Test2.java │ ├── item63 │ │ ├── examples │ │ │ ├── Test1.java │ │ │ └── Test2.java │ │ └── Item63Notes.java │ ├── item57 │ │ └── examples │ │ │ ├── Test1.java │ │ │ ├── Test4.java │ │ │ ├── Test2.java │ │ │ └── Test3.java │ └── item58 │ │ └── examples │ │ ├── Test3.java │ │ ├── Test1.java │ │ └── Test4.java │ └── chapter12 │ ├── item88 │ └── examples │ │ ├── Test2.java │ │ └── Test01.java │ ├── item89 │ └── examples │ │ └── ElvisStealer.java │ ├── item85 │ └── examples │ │ └── Util.java │ └── item87 │ └── examples │ ├── StringList.java │ └── Name.java ├── .settings ├── org.eclipse.wst.common.project.facet.core.xml └── org.eclipse.jdt.core.prefs ├── .classpath └── .project /.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # effective-java 2 | Effective Java 3 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /.classpath 3 | /.project 4 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/.settings/.gitignore: -------------------------------------------------------------------------------- 1 | /org.eclipse.jdt.core.prefs 2 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/test.txt: -------------------------------------------------------------------------------- 1 | e1 2 | e1 3 | e2 4 | e2 5 | e2 6 | e3 7 | e4 8 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item26/examples/Coin.java: -------------------------------------------------------------------------------- 1 | package chapter05.item26.examples; 2 | 3 | public class Coin { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item20/examples/Test03.java: -------------------------------------------------------------------------------- 1 | package chapter04.item20.examples; 2 | 3 | public class Test03 { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item26/examples/Test05.java: -------------------------------------------------------------------------------- 1 | package chapter05.item26.examples; 2 | 3 | public class Test05 { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter07/item46/examples/Artist.java: -------------------------------------------------------------------------------- 1 | package chapter07.item46.examples; 2 | 3 | public class Artist { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter10/item76/examples/Test1.java: -------------------------------------------------------------------------------- 1 | package chapter10.item76.examples; 2 | 3 | public class Test1 { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item20/examples/Singer.java: -------------------------------------------------------------------------------- 1 | package chapter04.item20.examples; 2 | 3 | public interface Singer { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter11/item83/examples/FieldType.java: -------------------------------------------------------------------------------- 1 | package chapter11.item83.examples; 2 | 3 | public class FieldType { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item20/examples/SongWriter.java: -------------------------------------------------------------------------------- 1 | package chapter04.item20.examples; 2 | 3 | public interface SongWriter { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item20/examples/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter04.item20.examples; 2 | 3 | public interface Test01 { 4 | 5 | } 6 | 7 | // -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter07/item45/examples/Suit.java: -------------------------------------------------------------------------------- 1 | package chapter07.item45.examples; 2 | 3 | public enum Suit { 4 | 5 | S1, S2, S3, S4; 6 | } 7 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter06/item34/examples/Orange.java: -------------------------------------------------------------------------------- 1 | package chapter06.item34.examples; 2 | 3 | public enum Orange { 4 | NAVEL, TEMPLE, BLOOD 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter06/item34/examples/Apple.java: -------------------------------------------------------------------------------- 1 | package chapter06.item34.examples; 2 | 3 | public enum Apple { 4 | FUJI, PIPPIN, GRANNY_SMITH 5 | } 6 | 7 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.project.facet.core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item26/examples/Stamp.java: -------------------------------------------------------------------------------- 1 | package chapter05.item26.examples; 2 | 3 | public class Stamp { 4 | 5 | public void cancel() { 6 | /// 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item23/examples/hierarchy/Figure.java: -------------------------------------------------------------------------------- 1 | package chapter04.item23.examples.hierarchy; 2 | 3 | public abstract class Figure { 4 | abstract double area(); 5 | } 6 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter07/item45/examples/Rank.java: -------------------------------------------------------------------------------- 1 | package chapter07.item45.examples; 2 | 3 | public enum Rank { 4 | 5 | R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13; 6 | } 7 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/errata/Errata.java: -------------------------------------------------------------------------------- 1 | package errata; 2 | 3 | public class Errata { 4 | 5 | // https://docs.google.com/document/d/1mAeEgQu4H4ADxa03k7YaVDjIP5vJBvjVIjg3DIvoc8E/edit 6 | } 7 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter06/item34/examples/OperationV4.java: -------------------------------------------------------------------------------- 1 | package chapter06.item34.examples; 2 | 3 | public enum OperationV4 { 4 | // Switch on an enum to simulate a missing method 5 | 6 | } 7 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter06/item38/examples/Operation.java: -------------------------------------------------------------------------------- 1 | package chapter06.item38.examples; 2 | 3 | // Emulated extensible enum using an interface 4 | public interface Operation { 5 | double apply(double x, double y); 6 | } -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter11/item79/examples/SetObserver2.java: -------------------------------------------------------------------------------- 1 | package chapter11.item79.examples; 2 | 3 | @FunctionalInterface 4 | public interface SetObserver2 { 5 | 6 | void added(ObservableSet2 set, E element); 7 | } -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter11/item79/examples/SetObserver3.java: -------------------------------------------------------------------------------- 1 | package chapter11.item79.examples; 2 | 3 | @FunctionalInterface 4 | public interface SetObserver3 { 5 | 6 | void added(ObservableSet3 set, E element); 7 | } -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter03/item10/examples/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter03.item10.examples; 2 | 3 | public class Test01 { 4 | 5 | @Override 6 | public boolean equals(Object obj) { 7 | throw new AssertionError(); 8 | // Method is never called. 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item15/ThingSecurityHole.java: -------------------------------------------------------------------------------- 1 | package chapter04.item15; 2 | 3 | public class ThingSecurityHole { 4 | 5 | // Potential Security Hole! 6 | public static final Thing[] values = { new Thing("key1"), new Thing("key2"), new Thing("key3") }; 7 | } 8 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter08/item56/examples/Degree.java: -------------------------------------------------------------------------------- 1 | package chapter08.item56.examples; 2 | 3 | /** 4 | * A college degree, such as B.S., {@literal M.S.} or Ph.D. 5 | */ 6 | public class Degree { 7 | 8 | } 9 | //A college degree, such as B.S., M.S. or Ph.D. 10 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item19/examples/Super.java: -------------------------------------------------------------------------------- 1 | package chapter04.item19.examples; 2 | 3 | public class Super { 4 | 5 | public Super() { 6 | overrideMe(); 7 | } 8 | 9 | public void overrideMe() { 10 | System.out.println("noop"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter03/item12/examples/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter03.item12.examples; 2 | 3 | public class Test01 { 4 | 5 | public static void main(String[] args) { 6 | PhoneNumber pn = new PhoneNumber(216, 600, 0000); 7 | System.out.println(pn); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter11/item79/examples/SetObserver.java: -------------------------------------------------------------------------------- 1 | package chapter11.item79.examples; 2 | 3 | @FunctionalInterface 4 | public interface SetObserver { 5 | 6 | // Invoked when an element is added to the observable set 7 | void added(ObservableSet set, E element); 8 | } -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter08/item56/examples/Test2.java: -------------------------------------------------------------------------------- 1 | package chapter08.item56.examples; 2 | 3 | public class Test2 { 4 | 5 | /** 6 | * A geometric series converges if {@literal |r| < 1}. 7 | */ 8 | public boolean literal() { 9 | /// 10 | return true; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item25/examples/pack2/Dessert.java: -------------------------------------------------------------------------------- 1 | package chapter04.item25.examples.pack2; 2 | 3 | // Two classes defined in one file. Don't ever do this! 4 | class Utensil { 5 | static final String NAME = "pot"; 6 | } 7 | 8 | class Dessert { 9 | static final String NAME = "pie"; 10 | } -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter02/item08/examples/Test02.java: -------------------------------------------------------------------------------- 1 | package chapter02.item08.examples; 2 | 3 | public class Test02 { 4 | 5 | public static void main(String[] args) { 6 | new Room(99); 7 | System.out.println("Peace out!"); 8 | // it never prints cleaning room; it just exits/ 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter07/item45/examples/Card.java: -------------------------------------------------------------------------------- 1 | package chapter07.item45.examples; 2 | 3 | public class Card { 4 | 5 | private Suit suit; 6 | private Rank rank; 7 | 8 | public Card(Suit suit, Rank rank) { 9 | super(); 10 | this.suit = suit; 11 | this.rank = rank; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter02/item08/examples/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter02.item08.examples; 2 | 3 | public class Test01 { 4 | 5 | public static void main(String[] args) throws Exception { 6 | 7 | try(Room room = new Room(10)) { 8 | System.out.println("Good bye!"); 9 | } 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item31/examples/ChooserV2.java: -------------------------------------------------------------------------------- 1 | package chapter05.item31.examples; 2 | 3 | import java.util.Collection; 4 | 5 | public class ChooserV2 { 6 | 7 | // Wildcard type for parameter that serves as an T producer 8 | public ChooserV2(Collection choices) { 9 | 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter02/item02/examples/telescoping/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter02.item02.examples.telescoping; 2 | 3 | public class Test01 { 4 | 5 | public static void main(String[] args) { 6 | 7 | NutritionFacts cocaCola = new NutritionFacts(240, 100, 0, 5, 27); 8 | System.out.println(cocaCola); 9 | 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter03/item13/examples/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter03.item13.examples; 2 | 3 | public class Test01 { 4 | 5 | public static void main(String[] args){ 6 | PhoneNumber pn = new PhoneNumber(216, 600, 0000); 7 | PhoneNumber cloned = pn.clone(); 8 | 9 | System.out.println(pn == cloned); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter03/item13/examples/Yum.java: -------------------------------------------------------------------------------- 1 | package chapter03.item13.examples; 2 | 3 | public class Yum { 4 | 5 | // Copy constructor 6 | public Yum(Yum yum) { 7 | 8 | } 9 | 10 | // Copy factory 11 | 12 | public static Yum newInstance(Yum yum) { 13 | /// 14 | return null; 15 | } 16 | } 17 | 18 | 19 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item28/examples/Test03.java: -------------------------------------------------------------------------------- 1 | package chapter05.item28.examples; 2 | 3 | import java.util.List; 4 | 5 | public class Test03 { 6 | 7 | public static void main(String[] args) { 8 | // Cannot create a generic array of List 9 | // List [] stringLists = new List[1]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter06/item36/examples/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter06.item36.examples; 2 | 3 | import java.util.EnumSet; 4 | 5 | public class Test01 { 6 | 7 | public static void main(String[] args) { 8 | TextV2 text = new TextV2(); 9 | 10 | text.applyStyles(EnumSet.of(TextV2.Style.BOLD, TextV2.Style.ITALIC)); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter11/item83/examples/Test1.java: -------------------------------------------------------------------------------- 1 | package chapter11.item83.examples; 2 | 3 | public class Test1 { 4 | 5 | // Normal initialization of an instance field 6 | private final FieldType field = computeFieldValue(); 7 | 8 | private FieldType computeFieldValue() { 9 | // 10 | return new FieldType(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item28/examples/Test02.java: -------------------------------------------------------------------------------- 1 | package chapter05.item28.examples; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Test02 { 7 | 8 | public static void main(String[] args) { 9 | 10 | // List ol = new ArrayList(); // Wont compile 11 | // Incompatible type 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter06/item35/examples/Ensemble.java: -------------------------------------------------------------------------------- 1 | package chapter06.item35.examples; 2 | 3 | // Abuse of ordinal to derive an associated value - 4 | // DON'T DO THIS 5 | public enum Ensemble { 6 | SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; 7 | public int numberOfMusicians() { 8 | return ordinal() + 1; 9 | } 10 | } -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter11/item82/examples/Test2.java: -------------------------------------------------------------------------------- 1 | package chapter11.item82.examples; 2 | 3 | public class Test2 { 4 | 5 | 6 | 7 | // Private lock object idiom - thwarts denial-of-service attack 8 | private final Object lock = new Object(); 9 | 10 | public void foo() { 11 | synchronized (lock) { 12 | // .... 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter03/item10/LiskovSubstitutionNotes.java: -------------------------------------------------------------------------------- 1 | package chapter03.item10; 2 | 3 | public class LiskovSubstitutionNotes { 4 | 5 | // The Liskov substitution principle says that any important property of a type 6 | // should also hold for all its subtypes so that any method written for the type 7 | // should work equally well on its subtypes 8 | } 9 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item15/ThingSecurityHoleFixedV2.java: -------------------------------------------------------------------------------- 1 | package chapter04.item15; 2 | 3 | public class ThingSecurityHoleFixedV2 { 4 | 5 | private static final Thing[] PRIVATE_VALUES = { new Thing("key1"), new Thing("key2"), new Thing("key3") }; 6 | 7 | public static final Thing[] values() { 8 | return PRIVATE_VALUES.clone(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item28/examples/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter05.item28.examples; 2 | 3 | public class Test01 { 4 | 5 | public static void main(String[] args) { 6 | 7 | // Fails at runtime 8 | Object[] objectArray = new Long[1]; 9 | objectArray[0] = "I dont fit in"; // Throws java.lang.ArrayStoreException: java.lang.String 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter06/item34/examples/Test03Operation.java: -------------------------------------------------------------------------------- 1 | package chapter06.item34.examples; 2 | 3 | public class Test03Operation { 4 | 5 | public static void main(String[] args) { 6 | double x = 3.2; 7 | double y = 2.4; 8 | for (Operation op : Operation.values()) 9 | System.out.printf("%f %s %f = %f%n", x, op, y, op.apply(x, y)); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item23/examples/hierarchy/Circle.java: -------------------------------------------------------------------------------- 1 | package chapter04.item23.examples.hierarchy; 2 | 3 | class Circle extends Figure { 4 | 5 | final double radius; 6 | 7 | public Circle(double radius) { 8 | super(); 9 | this.radius = radius; 10 | } 11 | 12 | @Override 13 | double area() { 14 | return Math.PI * (radius * radius); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter09/item64/examples/Test1.java: -------------------------------------------------------------------------------- 1 | package chapter09.item64.examples; 2 | 3 | import java.util.LinkedHashSet; 4 | import java.util.Set; 5 | 6 | public class Test1 { 7 | 8 | // Bad - uses class as type! 9 | LinkedHashSet badSet = new LinkedHashSet<>(); 10 | 11 | // Good - uses interface as type 12 | Set goodSet = new LinkedHashSet<>(); 13 | } 14 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item27/examples/Test01.java: -------------------------------------------------------------------------------- 1 | package chapter05.item27.examples; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | public class Test01 { 7 | 8 | public static void main(String[] args) { 9 | Set uncheckedConversion = new HashSet(); 10 | // unchecked conversion 11 | 12 | Set goodSet = new HashSet<>(); 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter08/item53/examples/Test1.java: -------------------------------------------------------------------------------- 1 | package chapter08.item53.examples; 2 | 3 | public class Test1 { 4 | // Simple use of varargs 5 | static int sum(int... args) { 6 | int sum = 0; 7 | for (int arg : args) 8 | sum += arg; 9 | return sum; 10 | } 11 | 12 | public static void main(String[] args) { 13 | System.out.println(sum(1, 4, 6, 7, 10)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter09/item61/examples/Test3.java: -------------------------------------------------------------------------------- 1 | package chapter09.item61.examples; 2 | 3 | public class Test3 { 4 | 5 | static int i; 6 | 7 | public static void main(String[] args) { 8 | if (i == 42) 9 | System.out.println("Fixing nullpointerexception"); 10 | 11 | // Fixing the problem is as simple as declaring i to be an int instead of an 12 | // Integer 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter05/item31/examples/ScheduledFutureTest.java: -------------------------------------------------------------------------------- 1 | package chapter05.item31.examples; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.concurrent.ScheduledFuture; 6 | 7 | public class ScheduledFutureTest { 8 | 9 | public static void main(String[] args) { 10 | List> scheduledFutures = new ArrayList<>(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item22/examples/PyhsicalConstants.java: -------------------------------------------------------------------------------- 1 | package chapter04.item22.examples; 2 | 3 | // Constant interface antipattern - do not use! 4 | // The constant interface pattern is a poor use of interfaces! 5 | public interface PyhsicalConstants { 6 | 7 | static final double AVOGADRO_NUMBER = 6.02_140_857e23; 8 | static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23; 9 | } 10 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter07/item47/examples/Test02.java: -------------------------------------------------------------------------------- 1 | package chapter07.item47.examples; 2 | 3 | import java.util.stream.Stream; 4 | import java.util.stream.StreamSupport; 5 | 6 | public class Test02 { 7 | 8 | // Adapter from Iterable to Stream 9 | public static Stream streamOf(Iterable iterable) { 10 | return StreamSupport.stream(iterable.spliterator(), false); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter08/item49/examples/Test1.java: -------------------------------------------------------------------------------- 1 | package chapter08.item49.examples; 2 | 3 | import java.util.Objects; 4 | 5 | public class Test1 { 6 | 7 | private String strategy; 8 | 9 | Test1() { 10 | // Inline use of Java's null-checking facility 11 | this.strategy = Objects.requireNonNull(strategy, "strategy"); 12 | } 13 | 14 | public static void main(String[] args) { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter08/item56/examples/Test1.java: -------------------------------------------------------------------------------- 1 | package chapter08.item56.examples; 2 | 3 | public class Test1 { 4 | 5 | /** 6 | * Returns true if this collection is empty. 7 | * 8 | * @implSpec This implementation returns {@code this.size() == 0}. 9 | * 10 | * @return true if this collection is empty 11 | */ 12 | public boolean isEmpty() { 13 | /// 14 | return true; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter11/item79/examples/Test1.java: -------------------------------------------------------------------------------- 1 | package chapter11.item79.examples; 2 | 3 | import java.util.HashSet; 4 | 5 | public class Test1 { 6 | public static void main(String[] args) { 7 | 8 | ObservableSet set = new ObservableSet<>(new HashSet<>()); 9 | set.addObserver((s, e) -> System.out.println(e)); 10 | 11 | for (int i = 0; i < 100; i++) 12 | set.add(i); 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter02/item04/examples/UtilityClass.java: -------------------------------------------------------------------------------- 1 | package chapter02.item04.examples; 2 | 3 | public class UtilityClass { 4 | 5 | private UtilityClass() { 6 | throw new AssertionError(); 7 | } 8 | // Explicit constructor is private , it is inaccessible outside the class. 9 | // AssertionError ,it provides insurance in case the constructor is accidentally 10 | // invoked from within the class. 11 | } 12 | -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter04/item22/examples/PhysicalConstantsV2.java: -------------------------------------------------------------------------------- 1 | package chapter04.item22.examples; 2 | 3 | public class PhysicalConstantsV2 { 4 | 5 | private PhysicalConstantsV2() { 6 | // prevent instantiation 7 | } 8 | 9 | static final double AVOGADRO_NUMBER = 6.02_140_857e23; 10 | static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23; 11 | } 12 | 13 | // use of static import to avoid qualifying constants -------------------------------------------------------------------------------- /injavawetrust.effective.java/src/chapter06/item36/examples/TextV2.java: -------------------------------------------------------------------------------- 1 | package chapter06.item36.examples; 2 | 3 | import java.util.Set; 4 | 5 | // // EnumSet - a modern replacement for bit fields 6 | public class TextV2 { 7 | public enum Style { 8 | BOLD, ITALIC, UNDERLINE, STRIKETHROUGH 9 | } 10 | 11 | // Any Set could be passed in, but EnumSet is clearly best 12 | public void applyStyles(Set