From 88dbdbbbcbf4c89f3a1bc9c43d412b80cfc712b9 Mon Sep 17 00:00:00 2001 From: Bruce Eckel Date: Mon, 18 May 2015 23:05:20 -0700 Subject: [PATCH] update --- access/build.xml | 1 + annotations/ExtractInterface.java | 2 +- annotations/IfaceExtractorProcessor.java | 68 +++++++++++ annotations/Multiplier.java | 2 +- annotations/build.xml | 4 +- annotations/simplest/Simple.java | 17 +++ annotations/simplest/SimpleProcessor.java | 28 +++++ annotations/simplest/SimpleTest.java | 21 ++++ arrays/build.xml | 1 + assertions/Assert1.java | 1 - assertions/LoaderAssertions.java | 1 - assertions/Queue.java | 27 +++-- assertions/build.xml | 1 + concurrency/ActiveObjectDemo.java | 2 +- concurrency/BasicThreads.java | 2 +- concurrency/CaptureUncaughtException.java | 2 +- concurrency/CloseResource.java | 2 +- concurrency/ExchangerDemo.java | 2 +- concurrency/ExplicitCriticalSection.java | 2 +- concurrency/HorseRace.java | 1 + concurrency/Interrupting.java | 2 +- concurrency/PipedIO.java | 2 +- concurrency/SimpleDaemons.java | 2 +- concurrency/SimpleMicroBenchmark.java | 2 +- concurrency/SimplePriorities.java | 2 +- concurrency/SynchronizationComparisons.java | 54 ++++----- concurrency/build.xml | 1 + concurrency/waxomatic/WaxOMatic.java | 2 +- concurrency/waxomatic2/WaxOMatic2.java | 2 +- containers/Maps.java | 2 +- containers/build.xml | 1 + control/ListCharacters.java | 2 +- control/VowelsAndConsonants.java | 2 +- control/build.xml | 1 + debugging/SimpleDebugging.java | 11 +- debugging/build.xml | 1 + enumerated/Input.java | 2 +- enumerated/NotClasses.java | 2 +- enumerated/RoShamBo1.java | 6 +- enumerated/RoShamBo2.java | 2 +- enumerated/RoShamBo5.java | 2 +- enumerated/VendingMachine.java | 15 ++- enumerated/build.xml | 1 + exceptions/LoggingExceptions.java | 2 +- exceptions/LoggingExceptions2.java | 2 +- exceptions/build.xml | 1 + generics/Apply.java | 6 +- generics/BankTeller.java | 6 +- generics/BasicBounds.java | 6 +- generics/CaptureConversion.java | 2 +- generics/CheckedList.java | 2 +- generics/ClassCasting.java | 2 +- generics/ClassTypeCapture.java | 2 +- generics/CreatorGeneric.java | 2 +- generics/DogsAndRobots.java | 2 +- generics/DynamicProxyMixin.java | 6 +- generics/ErasureAndInheritance.java | 2 +- generics/FactoryConstraint.java | 2 +- generics/Fill.java | 2 +- generics/Fill2.java | 4 +- generics/Functional.java | 2 +- generics/Generators.java | 2 +- generics/GenericArray.java | 2 +- generics/GenericArray2.java | 2 +- generics/GenericArrayWithTypeToken.java | 2 +- generics/GenericCast.java | 2 +- generics/GenericReading.java | 4 +- generics/GenericWriting.java | 2 +- generics/Holder.java | 2 +- generics/InstantiateGenericType.java | 2 +- generics/IterableFibonacci.java | 2 +- generics/LatentReflection.java | 2 +- generics/LinkedStack.java | 2 +- generics/Mixins.cpp | 2 +- generics/NonCovariantGenerics.java | 2 +- generics/NotSelfBounded.java | 2 +- generics/OrdinaryArguments.java | 2 +- generics/PlainGenericInheritance.java | 2 +- generics/PrimitiveGenericTest.java | 2 +- generics/SelfBounding.java | 2 +- generics/Store.java | 4 +- generics/ThrowGenericException.java | 6 +- generics/TupleList.java | 2 +- generics/TupleTest.java | 2 +- generics/TupleTest2.java | 2 +- generics/UnboundedWildcards1.java | 2 +- generics/UseList.java | 1 - generics/WatercolorSets.java | 4 +- generics/Wildcards.java | 14 +-- generics/build.xml | 1 + generics/coffee/CoffeeGenerator.java | 4 +- generics/decorator/Decoration.java | 4 +- gui/CheckBoxes.java | 1 - gui/ComboBoxes.java | 1 - gui/Dialogs.java | 1 - gui/Faces.java | 1 - gui/HTMLButton.java | 1 - gui/InterruptableLongRunningCallable.java | 1 - gui/InterruptableLongRunningTask.java | 1 - gui/LongRunningTask.java | 1 - gui/Menus.java | 2 +- gui/MessageBoxes.java | 2 +- gui/MonitoredLongRunningCallable.java | 1 - gui/Progress.java | 1 - gui/TabbedPane1.java | 1 - gui/TextArea.java | 1 - gui/TextPane.java | 1 - gui/build.xml | 1 + holding/AdapterMethodIdiom.java | 2 +- holding/ApplesAndOrangesWithGenerics.java | 2 +- holding/ApplesAndOrangesWithoutGenerics.java | 4 +- holding/CollectionSequence.java | 2 +- holding/CrossContainerIteration.java | 2 +- holding/InterfaceVsIterator.java | 4 +- holding/IterableClass.java | 2 +- holding/ListIteration.java | 2 +- holding/MapOfList.java | 4 +- holding/MultiIterableClass.java | 4 +- holding/PrintingContainers.java | 2 +- holding/SimpleIteration.java | 2 +- holding/build.xml | 1 + initialization/Burrito.java | 2 +- initialization/NewVarArgs.java | 2 +- initialization/Overloading.java | 4 +- initialization/build.xml | 1 + innerclasses/AnonymousConstructor.java | 2 +- innerclasses/BigEgg.java | 2 +- innerclasses/BigEgg2.java | 2 +- innerclasses/Callbacks.java | 8 +- innerclasses/Factories.java | 6 +- innerclasses/Games.java | 4 +- innerclasses/GreenhouseController.java | 2 +- innerclasses/GreenhouseControls.java | 12 +- innerclasses/LocalInnerClass.java | 6 +- innerclasses/MultiNestingAccess.java | 2 +- innerclasses/Parcel1.java | 2 +- innerclasses/Parcel10.java | 2 +- innerclasses/Parcel11.java | 2 +- innerclasses/Parcel6.java | 2 +- innerclasses/Sequence.java | 4 +- innerclasses/build.xml | 1 + interfaces/AdaptedRandomDoubles.java | 2 +- interfaces/Adventure.java | 2 +- interfaces/Factories.java | 4 +- interfaces/Games.java | 4 +- interfaces/HorrorShow.java | 4 +- interfaces/RandomWords.java | 2 +- interfaces/build.xml | 1 + interfaces/classprocessor/Apply.java | 4 +- .../interfaceprocessor/FilterProcessor.java | 2 +- .../interfaceprocessor/StringProcessor.java | 4 +- interfaces/music4/Music4.java | 6 +- interfaces/music5/Music5.java | 4 +- interfaces/nesting/NestingInterfaces.java | 8 +- io/AvailableCharSets.java | 2 +- io/MakeDirectories.java | 2 +- io/MappedIO.java | 2 +- io/ZipCompress.java | 2 +- io/build.xml | 1 + logging/ConfigureLogging.java | 73 +++++++++--- logging/CustomHandler.java | 22 +++- logging/EmailLogger.java | 20 ++-- logging/InfoLogging.java | 8 +- logging/InfoLogging2.java | 10 +- logging/LogToFile.java | 12 +- logging/LogToFile2.java | 12 +- logging/LoggingLevelManipulation.java | 109 +++++++++++++++--- logging/LoggingLevels.java | 37 ++++-- logging/MultipleHandlers.java | 14 ++- logging/MultipleHandlers2.java | 12 +- logging/PrintableLogRecord.java | 46 +++++--- logging/SimpleFilter.java | 20 +++- logging/SimpleFormatterExample.java | 13 ++- logging/build.xml | 4 +- logging/log.prop | 8 +- net/build.xml | 2 +- net/mindview/util/Hex.java | 2 +- net/mindview/util/New.java | 2 +- net/mindview/util/Print.java | 2 +- net/mindview/util/ProcessFiles.java | 1 + net/mindview/util/Range.java | 2 +- net/mindview/util/Sets.java | 2 +- net/mindview/util/TypeCounter.java | 2 +- network/ChatterServer.java | 1 - network/MultiSimpleServer.java | 2 +- network/SimpleClient.java | 3 +- network/SimpleServer.java | 2 +- network/build.xml | 2 +- object/HelloDate.java | 2 +- object/build.xml | 1 + operators/Assignment.java | 2 +- operators/BitManipulation.java | 2 +- operators/HelloDate.java | 2 +- operators/Literals.java | 15 ++- operators/build.xml | 1 + patterns/CommandPattern.java | 7 +- patterns/ShapeFactory2.java | 22 ++-- patterns/StateDemo.java | 31 ++--- patterns/build.xml | 1 + patterns/doubledispatch/DDAluminum.java | 4 +- patterns/doubledispatch/DDCardboard.java | 4 +- patterns/doubledispatch/DDGlass.java | 4 +- patterns/doubledispatch/DDPaper.java | 4 +- patterns/doubledispatch/DoubleDispatch.java | 2 +- patterns/dynatrash/DynaTrash.java | 2 +- patterns/factory/ShapeFactory1.java | 28 ++--- patterns/recyclea/RecycleA.java | 3 - patterns/recycleap/RecycleAP.java | 16 +-- patterns/recycleb/RecycleB.java | 32 +++-- patterns/state/StateMachineDemo.java | 3 +- patterns/trash/Fillable.java | 2 +- patterns/trash/FillableList.java | 6 +- patterns/trash/ParseTrash.java | 2 +- patterns/trash/Trash.java | 14 +-- patterns/trashvisitor/TrashVisitor.java | 41 +++---- patterns/visitor/BeeAndFlowers.java | 2 - polymorphism/PolyConstructors.java | 4 +- polymorphism/RTTI.java | 2 +- polymorphism/build.xml | 1 + polymorphism/music3/Music3.java | 6 +- references/AddingClone.java | 25 ++-- references/Alias1.java | 8 +- references/Alias2.java | 6 +- references/CheckCloneable.java | 67 +++++++---- references/Cloning.java | 22 ++-- references/Compete.java | 30 +++-- references/CopyConstructor.java | 40 +++++-- references/DeepCopy.java | 45 +++++--- references/HorrorFlick.java | 12 +- references/Immutable1.java | 9 +- references/Immutable2.java | 26 +++-- references/ImmutableInteger.java | 3 +- references/ImmutableStrings.java | 12 +- references/LocalCopy.java | 10 +- references/MutableInteger.java | 9 +- references/PassReferences.java | 5 +- references/Snake.java | 9 +- references/Stringer.java | 6 +- references/build.xml | 1 + remote/build.xml | 1 + remote/ptime/PerfectTime.java | 1 - reusing/Bath.java | 6 +- reusing/Chess.java | 2 +- reusing/Detergent.java | 4 +- reusing/Orc.java | 4 +- reusing/PlaceSetting.java | 6 +- reusing/SprinklerSystem.java | 4 +- reusing/build.xml | 1 + run.bat | 2 + staticchecking/DogsAndRobots.cpp | 26 +++++ staticchecking/DogsAndRobots.py | 19 +++ staticchecking/NoBasePetSpeak.py | 27 +++++ staticchecking/PetSpeak.py | 21 ++++ staticchecking/build.xml | 16 +++ staticchecking/dr/DogsAndRobots.java | 34 ++++++ .../drc/DogAndRobotCollections.java | 34 ++++++ staticchecking/latent/Latent.java | 51 ++++++++ staticchecking/petspeak/PetSpeak.java | 28 +++++ strings/InfiniteRecursion.java | 1 + strings/TheReplacements.java | 4 +- strings/WhitherStringBuilder.java | 4 +- strings/build.xml | 1 + swt/ShellsAreMainWindows.java | 4 +- swt/build.xml | 1 + tools/Examples.py | 1 + typeinfo/AnonymousImplementation.java | 2 +- typeinfo/FamilyVsExactType.java | 4 +- typeinfo/FilledList.java | 2 +- typeinfo/InnerImplementation.java | 2 +- typeinfo/NullRobot.java | 4 +- typeinfo/Person.java | 2 +- typeinfo/PetCount.java | 4 +- typeinfo/PetCount3.java | 4 +- typeinfo/Position.java | 2 +- typeinfo/RegisteredFactories.java | 12 +- typeinfo/Robot.java | 2 +- typeinfo/SelectingMethods.java | 4 +- typeinfo/Shapes.java | 2 +- typeinfo/SimpleDynamicProxy.java | 4 +- typeinfo/SimpleProxyDemo.java | 4 +- typeinfo/SnowRemovalRobot.java | 4 +- typeinfo/Staff.java | 6 +- typeinfo/SweetShop.java | 2 +- typeinfo/build.xml | 1 + typeinfo/pets/ForNameCreator.java | 2 +- typeinfo/pets/LiteralPetCreator.java | 2 +- typeinfo/pets/PetCreator.java | 2 +- typeinfo/toys/ToyTest.java | 2 +- unittesting/JUnitDemo.java | 67 ++++++----- unittesting/build.xml | 1 + xml/build.xml | 1 + 291 files changed, 1440 insertions(+), 685 deletions(-) create mode 100644 annotations/IfaceExtractorProcessor.java create mode 100644 annotations/simplest/Simple.java create mode 100644 annotations/simplest/SimpleProcessor.java create mode 100644 annotations/simplest/SimpleTest.java create mode 100644 run.bat create mode 100644 staticchecking/DogsAndRobots.cpp create mode 100644 staticchecking/DogsAndRobots.py create mode 100644 staticchecking/NoBasePetSpeak.py create mode 100644 staticchecking/PetSpeak.py create mode 100644 staticchecking/build.xml create mode 100644 staticchecking/dr/DogsAndRobots.java create mode 100644 staticchecking/drc/DogAndRobotCollections.java create mode 100644 staticchecking/latent/Latent.java create mode 100644 staticchecking/petspeak/PetSpeak.java diff --git a/access/build.xml b/access/build.xml index ecd57b0f..1f7f922b 100644 --- a/access/build.xml +++ b/access/build.xml @@ -4,6 +4,7 @@ + diff --git a/annotations/ExtractInterface.java b/annotations/ExtractInterface.java index 27e5b964..29c2d0c9 100644 --- a/annotations/ExtractInterface.java +++ b/annotations/ExtractInterface.java @@ -1,5 +1,5 @@ //: annotations/ExtractInterface.java -// APT-based annotation processing. +// javac-based annotation processing. package annotations; import java.lang.annotation.*; diff --git a/annotations/IfaceExtractorProcessor.java b/annotations/IfaceExtractorProcessor.java new file mode 100644 index 00000000..71b50229 --- /dev/null +++ b/annotations/IfaceExtractorProcessor.java @@ -0,0 +1,68 @@ +//: annotations/IfaceExtractorProcessor.java +// javac-based annotation processing. +package annotations; +import javax.annotation.processing.*; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.*; +import java.util.*; +import java.io.*; + +@SupportedAnnotationTypes( + "annotations.ExtractInterface") +@SupportedSourceVersion(SourceVersion.RELEASE_8) +public class IfaceExtractorProcessor +extends AbstractProcessor { + private ArrayList + interfaceMethods = new ArrayList<>(); + private ProcessingEnvironment processingEnv; + @Override public void + init(ProcessingEnvironment processingEnv) { + this.processingEnv = processingEnv; + } + @Override public boolean + process(Set annotations, + RoundEnvironment env) { + for(Element elem : + env.getElementsAnnotatedWith(ExtractInterface.class)) { + if(elem.getModifiers().contains(Modifier.PUBLIC) && + !(elem.getModifiers().contains(Modifier.STATIC))) + interfaceMethods.add(elem); + if(interfaceMethods.size() > 0) { + for(Element el : interfaceMethods) + System.out.println(el.getKind() + + " : " + el.getModifiers() + + " : " + el.getSimpleName() + + " : " + el.asType()); + try { + try(Writer writer = + processingEnv.getFiler() + .createSourceFile("Filename.txt") + .openWriter()) { + /* writer.write("package " + + typeDecl.getPackage().getQualifiedName() +";"); + writer.write("public interface " + + annot.value() + " {"); + for(MethodDeclaration m : interfaceMethods) { + writer.print(" public "); + writer.print(m.getReturnType() + " "); + writer.print(m.getSimpleName() + " ("); + int i = 0; + for(ParameterDeclaration parm : + m.getParameters()) { + writer.print(parm.getType() + " " + + parm.getSimpleName()); + if(++i < m.getParameters().size()) + writer.print(", "); + } + writer.write(");"); + } + */ writer.write("}"); + } + } catch(Exception e) { + throw new RuntimeException(e); + } + } + } + return false; + } +} ///:~ diff --git a/annotations/Multiplier.java b/annotations/Multiplier.java index d564c154..56f0c1d2 100644 --- a/annotations/Multiplier.java +++ b/annotations/Multiplier.java @@ -1,5 +1,5 @@ //: annotations/Multiplier.java -// APT-based annotation processing. +// javac-based annotation processing. package annotations; @ExtractInterface("IMultiplier") diff --git a/annotations/build.xml b/annotations/build.xml index 543b32e9..c9a05427 100644 --- a/annotations/build.xml +++ b/annotations/build.xml @@ -2,8 +2,9 @@ - + + @@ -18,6 +19,7 @@ + diff --git a/annotations/simplest/Simple.java b/annotations/simplest/Simple.java new file mode 100644 index 00000000..c83851d7 --- /dev/null +++ b/annotations/simplest/Simple.java @@ -0,0 +1,17 @@ +//: annotations/simplest/Simple.java +// A bare-bones annotation. +package annotations.simplest; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.annotation.ElementType; + +@Retention(RetentionPolicy.SOURCE) +@Target({ElementType.TYPE, ElementType.METHOD, + ElementType.CONSTRUCTOR, + ElementType.ANNOTATION_TYPE, + ElementType.PACKAGE, ElementType.FIELD, + ElementType.LOCAL_VARIABLE}) +public @interface Simple { + String value() default "-default-"; +} ///:~ diff --git a/annotations/simplest/SimpleProcessor.java b/annotations/simplest/SimpleProcessor.java new file mode 100644 index 00000000..b905ca2e --- /dev/null +++ b/annotations/simplest/SimpleProcessor.java @@ -0,0 +1,28 @@ +//: annotations/simplest/SimpleProcessor.java +// A bare-bones annotation processor. +package annotations.simplest; +import javax.annotation.processing.*; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.*; +import java.util.*; + +@SupportedAnnotationTypes( + "annotations.simplest.Simple") +@SupportedSourceVersion(SourceVersion.RELEASE_8) +public class SimpleProcessor +extends AbstractProcessor { + @Override public boolean + process(Set annotations, + RoundEnvironment env) { + for(TypeElement t : annotations) + System.out.println(t); + for(Element el : + env.getElementsAnnotatedWith(Simple.class)){ + System.out.println(el.getKind() + + " : " + el.getModifiers() + + " : " + el.getSimpleName() + + " : " + el.asType()); + } + return false; + } +} ///:~ diff --git a/annotations/simplest/SimpleTest.java b/annotations/simplest/SimpleTest.java new file mode 100644 index 00000000..b9369233 --- /dev/null +++ b/annotations/simplest/SimpleTest.java @@ -0,0 +1,21 @@ +//: annotations/simplest/SimpleTest.java +// Test the "Simple" annotation +package annotations.simplest; + +@Simple +public class SimpleTest { + @Simple + int i; + @Simple + public SimpleTest() {} + @Simple + public void foo() { + System.out.println("SimpleTest.foo()"); + } + @Simple + public static void main(String[] args) { + @Simple + SimpleTest st = new SimpleTest(); + st.foo(); + } +} ///:~ diff --git a/arrays/build.xml b/arrays/build.xml index 7ec162d6..d1536883 100644 --- a/arrays/build.xml +++ b/arrays/build.xml @@ -4,6 +4,7 @@ + diff --git a/assertions/Assert1.java b/assertions/Assert1.java index 63ced5f4..bd8f663e 100644 --- a/assertions/Assert1.java +++ b/assertions/Assert1.java @@ -1,6 +1,5 @@ //: assertions/Assert1.java // Non-informative style of assert -// Compile with: javac -source 1.4 Assert1.java // {JVMArgs: -ea} // Must run with -ea // {ThrowsException} diff --git a/assertions/LoaderAssertions.java b/assertions/LoaderAssertions.java index 2dc4699b..d26ec53c 100644 --- a/assertions/LoaderAssertions.java +++ b/assertions/LoaderAssertions.java @@ -1,6 +1,5 @@ //: assertions/LoaderAssertions.java // Using the class loader to enable assertions -// Compile with: javac -source 1.4 LoaderAssertions.java // {ThrowsException} public class LoaderAssertions { diff --git a/assertions/Queue.java b/assertions/Queue.java index bf177318..e3da47f9 100644 --- a/assertions/Queue.java +++ b/assertions/Queue.java @@ -1,9 +1,12 @@ //: assertions/Queue.java // Demonstration of Design by Contract (DBC) combined // with white-box unit testing. -// {Depends: junit.jar} -import junit.framework.*; +// (Install libraries from www.junit.org) import java.util.*; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; public class Queue { private Object[] data; @@ -86,11 +89,10 @@ public class Queue { } // JUnit testing. // As an inner class, this has access to privates: - public static class WhiteBoxTest extends TestCase { + public static class WhiteBoxTest { private Queue queue = new Queue(10); private int i = 0; - public WhiteBoxTest(String name) { - super(name); + public WhiteBoxTest() { while(i < 5) // Preload with some data queue.put("" + i++); } @@ -106,7 +108,8 @@ public class Queue { assertTrue(queue.empty()); System.out.println(queue.dump()); } - public void testFull() { + @Test + public void full() { System.out.println("testFull"); System.out.println(queue.dump()); System.out.println(queue.get()); @@ -123,7 +126,8 @@ public class Queue { assertEquals(msg, "put() into full Queue"); showFullness(); } - public void testEmpty() { + @Test + public void empty() { System.out.println("testEmpty"); while(!queue.empty()) System.out.println(queue.get()); @@ -137,7 +141,8 @@ public class Queue { assertEquals(msg, "get() from empty Queue"); showEmptiness(); } - public void testNullPut() { + @Test + public void nullPut() { System.out.println("testNullPut"); String msg = ""; try { @@ -148,7 +153,8 @@ public class Queue { } assertEquals(msg, "put() null item"); } - public void testCircularity() { + @Test + public void circularity() { System.out.println("testCircularity"); while(!queue.full()) queue.put("" + i++); @@ -167,6 +173,7 @@ public class Queue { } } public static void main(String[] args) { - junit.textui.TestRunner.run(Queue.WhiteBoxTest.class); + org.junit.runner.JUnitCore.runClasses( + Queue.WhiteBoxTest.class); } } ///:~ diff --git a/assertions/build.xml b/assertions/build.xml index 0719f0e6..fb42eb64 100644 --- a/assertions/build.xml +++ b/assertions/build.xml @@ -4,6 +4,7 @@ + diff --git a/concurrency/ActiveObjectDemo.java b/concurrency/ActiveObjectDemo.java index b783b3c9..2e481c76 100644 --- a/concurrency/ActiveObjectDemo.java +++ b/concurrency/ActiveObjectDemo.java @@ -61,7 +61,7 @@ public class ActiveObjectDemo { } d1.shutdown(); } -} /* Output: (85% match) +} /* Output: (85% Match) All asynch calls made starting 0.0 + 0.0 starting 0.2 + 0.2 diff --git a/concurrency/BasicThreads.java b/concurrency/BasicThreads.java index f5bf25c6..545f99a5 100644 --- a/concurrency/BasicThreads.java +++ b/concurrency/BasicThreads.java @@ -7,7 +7,7 @@ public class BasicThreads { t.start(); System.out.println("Waiting for LiftOff"); } -} /* Output: (90% match) +} /* Output: (90% Match) Waiting for LiftOff #0(9), #0(8), #0(7), #0(6), #0(5), #0(4), #0(3), #0(2), #0(1), #0(Liftoff!), *///:~ diff --git a/concurrency/CaptureUncaughtException.java b/concurrency/CaptureUncaughtException.java index 6ca80ba6..d8bb9239 100644 --- a/concurrency/CaptureUncaughtException.java +++ b/concurrency/CaptureUncaughtException.java @@ -41,7 +41,7 @@ public class CaptureUncaughtException { new HandlerThreadFactory()); exec.execute(new ExceptionThread2()); } -} /* Output: (90% match) +} /* Output: (90% Match) HandlerThreadFactory@de6ced creating new Thread created Thread[Thread-0,5,main] eh = MyUncaughtExceptionHandler@1fb8ee3 diff --git a/concurrency/CloseResource.java b/concurrency/CloseResource.java index 2cff7dac..6af608f4 100644 --- a/concurrency/CloseResource.java +++ b/concurrency/CloseResource.java @@ -25,7 +25,7 @@ public class CloseResource { print("Closing " + System.in.getClass().getName()); System.in.close(); // Releases blocked thread } -} /* Output: (85% match) +} /* Output: (85% Match) Waiting for read(): Waiting for read(): Shutting down all threads diff --git a/concurrency/ExchangerDemo.java b/concurrency/ExchangerDemo.java index 467c722a..5c51569f 100644 --- a/concurrency/ExchangerDemo.java +++ b/concurrency/ExchangerDemo.java @@ -1,7 +1,7 @@ //: concurrency/ExchangerDemo.java import java.util.concurrent.*; -import java.util.*; import net.mindview.util.*; +import java.util.*; class ExchangerProducer implements Runnable { private Generator generator; diff --git a/concurrency/ExplicitCriticalSection.java b/concurrency/ExplicitCriticalSection.java index 1191ad7f..645cc0c4 100644 --- a/concurrency/ExplicitCriticalSection.java +++ b/concurrency/ExplicitCriticalSection.java @@ -34,7 +34,7 @@ class ExplicitPairManager2 extends PairManager { } finally { lock.unlock(); } - store(temp); + store(temp); } } diff --git a/concurrency/HorseRace.java b/concurrency/HorseRace.java index 0a090d05..0a2e2123 100644 --- a/concurrency/HorseRace.java +++ b/concurrency/HorseRace.java @@ -1,5 +1,6 @@ //: concurrency/HorseRace.java // Using CyclicBarriers. +// {CheckOutputByHand} import java.util.concurrent.*; import java.util.*; import static net.mindview.util.Print.*; diff --git a/concurrency/Interrupting.java b/concurrency/Interrupting.java index c31858c6..9bcc08f6 100644 --- a/concurrency/Interrupting.java +++ b/concurrency/Interrupting.java @@ -74,7 +74,7 @@ public class Interrupting { print("Aborting with System.exit(0)"); System.exit(0); // ... since last 2 interrupts failed } -} /* Output: (95% match) +} /* Output: (95% Match) Interrupting SleepBlocked InterruptedException Exiting SleepBlocked.run() diff --git a/concurrency/PipedIO.java b/concurrency/PipedIO.java index 038a57bd..706a276c 100644 --- a/concurrency/PipedIO.java +++ b/concurrency/PipedIO.java @@ -53,7 +53,7 @@ public class PipedIO { TimeUnit.SECONDS.sleep(4); exec.shutdownNow(); } -} /* Output: (65% match) +} /* Output: (65% Match) Read: A, Read: B, Read: C, Read: D, Read: E, Read: F, Read: G, Read: H, Read: I, Read: J, Read: K, Read: L, Read: M, java.lang.InterruptedException: sleep interrupted Sender sleep interrupted java.io.InterruptedIOException Receiver read exception *///:~ diff --git a/concurrency/SimpleDaemons.java b/concurrency/SimpleDaemons.java index b17f0d20..9afff3b1 100644 --- a/concurrency/SimpleDaemons.java +++ b/concurrency/SimpleDaemons.java @@ -24,7 +24,7 @@ public class SimpleDaemons implements Runnable { print("All daemons started"); TimeUnit.MILLISECONDS.sleep(175); } -} /* Output: (Sample) +} /* Output: (First 11 Lines) All daemons started Thread[Thread-0,5,main] SimpleDaemons@530daa Thread[Thread-1,5,main] SimpleDaemons@a62fc3 diff --git a/concurrency/SimpleMicroBenchmark.java b/concurrency/SimpleMicroBenchmark.java index ac2a1f49..44e7e986 100644 --- a/concurrency/SimpleMicroBenchmark.java +++ b/concurrency/SimpleMicroBenchmark.java @@ -40,7 +40,7 @@ public class SimpleMicroBenchmark { System.out.printf("Lock/synchronized = %1$.3f", (double)lockTime/(double)synchTime); } -} /* Output: (75% match) +} /* Output: (75% Match) synchronized: 244919117 Lock: 939098964 Lock/synchronized = 3.834 diff --git a/concurrency/SimplePriorities.java b/concurrency/SimplePriorities.java index e20c9167..6acbfed0 100644 --- a/concurrency/SimplePriorities.java +++ b/concurrency/SimplePriorities.java @@ -36,7 +36,7 @@ public class SimplePriorities implements Runnable { new SimplePriorities(Thread.MAX_PRIORITY)); exec.shutdown(); } -} /* Output: (70% match) +} /* Output: (First 10 Lines) (70% Match) Thread[pool-1-thread-6,10,main]: 5 Thread[pool-1-thread-6,10,main]: 4 Thread[pool-1-thread-6,10,main]: 3 diff --git a/concurrency/SynchronizationComparisons.java b/concurrency/SynchronizationComparisons.java index 7fe0d0d9..965d6d56 100644 --- a/concurrency/SynchronizationComparisons.java +++ b/concurrency/SynchronizationComparisons.java @@ -167,42 +167,42 @@ public class SynchronizationComparisons { } Accumulator.exec.shutdown(); } -} /* Output: (Sample) using JDK6u10 +} /* Output: (Sample) Warmup -synch : 129868038 +synch : 94513807 ============================ Cycles : 50000 -synch : 126407922 -Lock : 51207369 -Atomic : 141845223 -synch/Lock : 2.47 -synch/(Atomic-synch) : 8.19 +synch : 94514234 +Lock : 24976352 +Atomic : 98296651 +synch/Lock : 3.78 +synch/(Atomic-synch) : 24.99 ============================ Cycles : 100000 -synch : 251174061 -Lock : 105338114 -Atomic : 279503250 -synch/Lock : 2.38 -synch/(Atomic-synch) : 8.87 +synch : 178531353 +Lock : 46007787 +Atomic : 192372561 +synch/Lock : 3.88 +synch/(Atomic-synch) : 12.90 ============================ Cycles : 200000 -synch : 508778006 -Lock : 214398402 -Atomic : 574464795 -synch/Lock : 2.37 -synch/(Atomic-synch) : 7.75 +synch : 377107591 +Lock : 91051260 +Atomic : 394509274 +synch/Lock : 4.14 +synch/(Atomic-synch) : 21.67 ============================ Cycles : 400000 -synch : 1027003521 -Lock : 428342577 -Atomic : 1115667617 -synch/Lock : 2.40 -synch/(Atomic-synch) : 11.58 +synch : 722152518 +Lock : 184968090 +Atomic : 746950974 +synch/Lock : 3.90 +synch/(Atomic-synch) : 29.12 ============================ Cycles : 800000 -synch : 2179255097 -Lock : 877216314 -Atomic : 2371504710 -synch/Lock : 2.48 -synch/(Atomic-synch) : 11.34 +synch : 1478348925 +Lock : 416729956 +Atomic : 1559738238 +synch/Lock : 3.55 +synch/(Atomic-synch) : 18.16 *///:~ diff --git a/concurrency/build.xml b/concurrency/build.xml index 05f7d977..af619e9b 100644 --- a/concurrency/build.xml +++ b/concurrency/build.xml @@ -4,6 +4,7 @@ + diff --git a/concurrency/waxomatic/WaxOMatic.java b/concurrency/waxomatic/WaxOMatic.java index 74bc51d5..7230d8d7 100644 --- a/concurrency/waxomatic/WaxOMatic.java +++ b/concurrency/waxomatic/WaxOMatic.java @@ -73,7 +73,7 @@ public class WaxOMatic { TimeUnit.SECONDS.sleep(5); // Run for a while... exec.shutdownNow(); // Interrupt all tasks } -} /* Output: (95% match) +} /* Output: (95% Match) Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Exiting via interrupt Ending Wax On task Exiting via interrupt diff --git a/concurrency/waxomatic2/WaxOMatic2.java b/concurrency/waxomatic2/WaxOMatic2.java index 836b301e..f5ad7a3b 100644 --- a/concurrency/waxomatic2/WaxOMatic2.java +++ b/concurrency/waxomatic2/WaxOMatic2.java @@ -94,7 +94,7 @@ public class WaxOMatic2 { TimeUnit.SECONDS.sleep(5); exec.shutdownNow(); } -} /* Output: (90% match) +} /* Output: (90% Match) Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Wax Off! Wax On! Exiting via interrupt Ending Wax Off task Exiting via interrupt diff --git a/containers/Maps.java b/containers/Maps.java index 39520224..03391a59 100644 --- a/containers/Maps.java +++ b/containers/Maps.java @@ -44,7 +44,7 @@ public class Maps { test(new ConcurrentHashMap<>()); test(new WeakHashMap<>()); } -} /* Output: +} /* Output: (First 11 Lines) HashMap Size = 25, Keys: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 16, 19, 18, 21, 20, 23, 22, 24] Values: [A0, B0, C0, D0, E0, F0, G0, H0, I0, J0, K0, L0, M0, N0, O0, P0, R0, Q0, T0, S0, V0, U0, X0, W0, Y0] diff --git a/containers/build.xml b/containers/build.xml index a28e03eb..3ff1942f 100644 --- a/containers/build.xml +++ b/containers/build.xml @@ -4,6 +4,7 @@ + diff --git a/control/ListCharacters.java b/control/ListCharacters.java index 5f519ccd..7bd02126c 100644 --- a/control/ListCharacters.java +++ b/control/ListCharacters.java @@ -9,7 +9,7 @@ public class ListCharacters { System.out.println("value: " + (int)c + " character: " + c); } -} /* Output: +} /* Output: (First 10 Lines) value: 97 character: a value: 98 character: b value: 99 character: c diff --git a/control/VowelsAndConsonants.java b/control/VowelsAndConsonants.java index 2d3d7fec..606a180b 100644 --- a/control/VowelsAndConsonants.java +++ b/control/VowelsAndConsonants.java @@ -23,7 +23,7 @@ public class VowelsAndConsonants { } } } -} /* Output: +} /* Output: (First 13 Lines) y, 121: Sometimes a vowel n, 110: consonant z, 122: consonant diff --git a/control/build.xml b/control/build.xml index ce9084df..1adb5656 100644 --- a/control/build.xml +++ b/control/build.xml @@ -4,6 +4,7 @@ + diff --git a/debugging/SimpleDebugging.java b/debugging/SimpleDebugging.java index cfb082d0..204c1203 100644 --- a/debugging/SimpleDebugging.java +++ b/debugging/SimpleDebugging.java @@ -18,4 +18,13 @@ public class SimpleDebugging { public static void main(String[] args) { foo1(); } -} ///:~ +} /* Output: +In foo1 +In foo2 +In foo3 +Exception in thread "main" java.lang.ArithmeticException: / by zero + at SimpleDebugging.foo3(SimpleDebugging.java:16) + at SimpleDebugging.foo2(SimpleDebugging.java:10) + at SimpleDebugging.foo1(SimpleDebugging.java:6) + at SimpleDebugging.main(SimpleDebugging.java:19) +*///:~ diff --git a/debugging/build.xml b/debugging/build.xml index 019b4dee..4b1b93be 100644 --- a/debugging/build.xml +++ b/debugging/build.xml @@ -4,6 +4,7 @@ + diff --git a/enumerated/Input.java b/enumerated/Input.java index a24b2573..e6e7f3f7 100644 --- a/enumerated/Input.java +++ b/enumerated/Input.java @@ -15,7 +15,7 @@ public enum Input { public int amount() { // Disallow throw new RuntimeException("SHUT_DOWN.amount()"); } - }; + }; int value; // In cents Input(int value) { this.value = value; } Input() {} diff --git a/enumerated/NotClasses.java b/enumerated/NotClasses.java index 55efcc04..d55fea52 100644 --- a/enumerated/NotClasses.java +++ b/enumerated/NotClasses.java @@ -14,7 +14,7 @@ enum LikeClasses { public class NotClasses { // void f1(LikeClasses.WINKEN instance) {} // Nope -} /* Output: +} /* Output: (First 7 Lines) Compiled from "NotClasses.java" abstract class LikeClasses extends java.lang.Enum{ public static final LikeClasses WINKEN; diff --git a/enumerated/RoShamBo1.java b/enumerated/RoShamBo1.java index d92d59b8..cb5deb51 100644 --- a/enumerated/RoShamBo1.java +++ b/enumerated/RoShamBo1.java @@ -22,7 +22,7 @@ class Paper implements Item { public Outcome eval(Rock r) { return LOSE; } @Override public String toString() { return "Paper"; } -} +} class Scissors implements Item { @Override @@ -48,7 +48,7 @@ class Rock implements Item { public Outcome eval(Rock r) { return DRAW; } @Override public String toString() { return "Rock"; } -} +} public class RoShamBo1 { static final int SIZE = 20; @@ -69,7 +69,7 @@ public class RoShamBo1 { for(int i = 0; i < SIZE; i++) match(newItem(), newItem()); } -} /* Output: +} /* Output: Rock vs. Rock: DRAW Paper vs. Rock: WIN Paper vs. Rock: WIN diff --git a/enumerated/RoShamBo2.java b/enumerated/RoShamBo2.java index dca102c9..206b8345 100644 --- a/enumerated/RoShamBo2.java +++ b/enumerated/RoShamBo2.java @@ -12,7 +12,7 @@ public enum RoShamBo2 implements Competitor { this.vPAPER = paper; this.vSCISSORS = scissors; this.vROCK = rock; - } + } @Override public Outcome compete(RoShamBo2 it) { switch(it) { diff --git a/enumerated/RoShamBo5.java b/enumerated/RoShamBo5.java index 741be9fc..29d8fcc8 100644 --- a/enumerated/RoShamBo5.java +++ b/enumerated/RoShamBo5.java @@ -14,7 +14,7 @@ enum RoShamBo5 implements Competitor { initRow(PAPER, DRAW, LOSE, WIN); initRow(SCISSORS, WIN, DRAW, LOSE); initRow(ROCK, LOSE, WIN, DRAW); - } + } static void initRow(RoShamBo5 it, Outcome vPAPER, Outcome vSCISSORS, Outcome vROCK) { EnumMap row = diff --git a/enumerated/VendingMachine.java b/enumerated/VendingMachine.java index 163665bd..a8470e79 100644 --- a/enumerated/VendingMachine.java +++ b/enumerated/VendingMachine.java @@ -3,7 +3,6 @@ // {Args: VendingMachineInput.txt} import java.util.*; import net.mindview.util.*; -import static enumerated.Input.*; import static net.mindview.util.Print.*; enum Category { @@ -12,7 +11,7 @@ enum Category { QUIT_TRANSACTION(ABORT_TRANSACTION), SHUT_DOWN(STOP); private Input[] values; - Category(Input... types) { values = types; } + Category(Input... types) { values = types; } private static EnumMap categories = new EnumMap<>(Input.class); static { @@ -23,7 +22,7 @@ enum Category { public static Category categorize(Input input) { return categories.get(input); } -} +} public class VendingMachine { private static State state = State.RESTING; @@ -44,7 +43,7 @@ public class VendingMachine { default: } } - }, + }, ADDING_MONEY { @Override void next(Input input) { @@ -66,7 +65,7 @@ public class VendingMachine { default: } } - }, + }, DISPENSING(StateDuration.TRANSIENT) { @Override void next() { @@ -84,7 +83,7 @@ public class VendingMachine { } state = RESTING; } - }, + }, TERMINAL {@Override void output() { print("Halted"); } }; private boolean isTransient = false; @@ -99,7 +98,7 @@ public class VendingMachine { "StateDuration.TRANSIENT states"); } void output() { print(amount); } - } + } static void run(Generator gen) { while(state != State.TERMINAL) { state.next(gen.next()); @@ -114,7 +113,7 @@ public class VendingMachine { gen = new FileInputGenerator(args[0]); run(gen); } -} +} // For a basic sanity check: class RandomInputGenerator implements Generator { diff --git a/enumerated/build.xml b/enumerated/build.xml index 9c18961c..ee6d63b8 100644 --- a/enumerated/build.xml +++ b/enumerated/build.xml @@ -4,6 +4,7 @@ + diff --git a/exceptions/LoggingExceptions.java b/exceptions/LoggingExceptions.java index f652b14b..3dd4be7f 100644 --- a/exceptions/LoggingExceptions.java +++ b/exceptions/LoggingExceptions.java @@ -26,7 +26,7 @@ public class LoggingExceptions { System.err.println("Caught " + e); } } -} /* Output: (85% match) +} /* Output: (85% Match) Aug 30, 2005 4:02:31 PM LoggingException SEVERE: LoggingException at LoggingExceptions.main(LoggingExceptions.java:19) diff --git a/exceptions/LoggingExceptions2.java b/exceptions/LoggingExceptions2.java index 05bc3f0c..bd1892d0 100644 --- a/exceptions/LoggingExceptions2.java +++ b/exceptions/LoggingExceptions2.java @@ -18,7 +18,7 @@ public class LoggingExceptions2 { logException(e); } } -} /* Output: (90% match) +} /* Output: (90% Match) Aug 30, 2005 4:07:54 PM LoggingExceptions2 logException SEVERE: java.lang.NullPointerException at LoggingExceptions2.main(LoggingExceptions2.java:16) diff --git a/exceptions/build.xml b/exceptions/build.xml index 39a54c5b..65d2ffd4 100644 --- a/exceptions/build.xml +++ b/exceptions/build.xml @@ -4,6 +4,7 @@ + diff --git a/generics/Apply.java b/generics/Apply.java index 3ae9d630..69a9b1cc 100644 --- a/generics/Apply.java +++ b/generics/Apply.java @@ -17,7 +17,7 @@ public class Apply { throw new RuntimeException(e); } } -} +} class Shape { public void rotate() { print(this + " rotate"); } @@ -39,7 +39,7 @@ class FilledList extends ArrayList { throw new RuntimeException(e); } } -} +} class ApplyTest { public static void main(String[] args) throws Exception { @@ -55,7 +55,7 @@ class ApplyTest { Apply.apply(squares, Shape.class.getMethod("rotate")); Apply.apply(squares, Shape.class.getMethod("resize", int.class), 5); - + Apply.apply(new FilledList<>(Shape.class, 10), Shape.class.getMethod("rotate")); Apply.apply(new FilledList<>(Square.class, 10), diff --git a/generics/BankTeller.java b/generics/BankTeller.java index 5f5abe34..2514922c 100644 --- a/generics/BankTeller.java +++ b/generics/BankTeller.java @@ -13,7 +13,7 @@ class Customer { public static Generator generator() { return () -> new Customer(); } -} +} class Teller { private static long counter = 1; @@ -24,7 +24,7 @@ class Teller { // A single Generator object: public static Generator generator = () -> new Teller(); -} +} public class BankTeller { public static void serve(Teller t, Customer c) { @@ -38,7 +38,7 @@ public class BankTeller { Generators.fill(tellers, Teller.generator, 4); for(Customer c : line) serve(tellers.get(rand.nextInt(tellers.size())), c); - } + } } /* Output: Teller 3 serves Customer 1 Teller 2 serves Customer 2 diff --git a/generics/BasicBounds.java b/generics/BasicBounds.java index 4618e328..8894a482 100644 --- a/generics/BasicBounds.java +++ b/generics/BasicBounds.java @@ -14,7 +14,7 @@ class Dimension { public int x, y, z; } // This won't work -- class must be first, then interfaces: // class ColoredDimension { - + // Multiple bounds: class ColoredDimension { T item; @@ -26,7 +26,7 @@ class ColoredDimension { int getZ() { return item.z; } } -interface Weight { int weight(); } +interface Weight { int weight(); } // As with inheritance, you can have only one // concrete class but multiple interfaces: @@ -47,7 +47,7 @@ extends Dimension implements HasColor, Weight { public java.awt.Color getColor() { return null; } @Override public int weight() { return 0; } -} +} public class BasicBounds { public static void main(String[] args) { diff --git a/generics/CaptureConversion.java b/generics/CaptureConversion.java index f7337f6b..1a43318f 100644 --- a/generics/CaptureConversion.java +++ b/generics/CaptureConversion.java @@ -7,7 +7,7 @@ public class CaptureConversion { } static void f2(Holder holder) { f1(holder); // Call with captured type - } + } @SuppressWarnings("unchecked") public static void main(String[] args) { Holder raw = new Holder<>(1); diff --git a/generics/CheckedList.java b/generics/CheckedList.java index 85dd5a94..b79e37a8 100644 --- a/generics/CheckedList.java +++ b/generics/CheckedList.java @@ -7,7 +7,7 @@ public class CheckedList { @SuppressWarnings("unchecked") static void oldStyleMethod(List probablyDogs) { probablyDogs.add(new Cat()); - } + } public static void main(String[] args) { List dogs1 = new ArrayList<>(); oldStyleMethod(dogs1); // Quietly accepts a Cat diff --git a/generics/ClassCasting.java b/generics/ClassCasting.java index 68eb519b..bb4af2c5 100644 --- a/generics/ClassCasting.java +++ b/generics/ClassCasting.java @@ -9,7 +9,7 @@ public class ClassCasting { new FileInputStream(args[0])); // Won't Compile: // List lw1 = -// List.class.cast(in.readObject()); +// List<>.class.cast(in.readObject()); List lw2 = List.class.cast(in.readObject()); } } ///:~ diff --git a/generics/ClassTypeCapture.java b/generics/ClassTypeCapture.java index 4481a506..1067495d 100644 --- a/generics/ClassTypeCapture.java +++ b/generics/ClassTypeCapture.java @@ -10,7 +10,7 @@ public class ClassTypeCapture { } public boolean f(Object arg) { return kind.isInstance(arg); - } + } public static void main(String[] args) { ClassTypeCapture ctt1 = new ClassTypeCapture<>(Building.class); diff --git a/generics/CreatorGeneric.java b/generics/CreatorGeneric.java index 040f1a9d..5be81f34 100644 --- a/generics/CreatorGeneric.java +++ b/generics/CreatorGeneric.java @@ -14,7 +14,7 @@ class Creator extends GenericWithCreate { void f() { System.out.println(element.getClass().getSimpleName()); } -} +} public class CreatorGeneric { public static void main(String[] args) { diff --git a/generics/DogsAndRobots.java b/generics/DogsAndRobots.java index f2a3c0a9..c93c7bf2 100644 --- a/generics/DogsAndRobots.java +++ b/generics/DogsAndRobots.java @@ -15,7 +15,7 @@ class Robot implements Performs { public void speak() { print("Click!"); } public void sit() { print("Clank!"); } public void oilChange() {} -} +} class Communicate { public static diff --git a/generics/DynamicProxyMixin.java b/generics/DynamicProxyMixin.java index 99f8b4d7..5acf834b 100644 --- a/generics/DynamicProxyMixin.java +++ b/generics/DynamicProxyMixin.java @@ -14,11 +14,11 @@ class MixinProxy implements InvocationHandler { String methodName = method.getName(); // The first interface in the map // implements the method. - if (!delegatesByMethod.containsKey(methodName)) + if(!delegatesByMethod.containsKey(methodName)) delegatesByMethod.put(methodName, pair.first); } } - } + } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { @@ -37,7 +37,7 @@ class MixinProxy implements InvocationHandler { return Proxy.newProxyInstance( cl, interfaces, new MixinProxy(pairs)); } -} +} public class DynamicProxyMixin { public static void main(String[] args) { diff --git a/generics/ErasureAndInheritance.java b/generics/ErasureAndInheritance.java index d487deaa..17a254c5 100644 --- a/generics/ErasureAndInheritance.java +++ b/generics/ErasureAndInheritance.java @@ -13,7 +13,7 @@ class Derived2 extends GenericBase {} // No warning // class Derived3 extends GenericBase {} // Strange error: // unexpected type found : ? -// required: class or interface without bounds +// required: class or interface without bounds public class ErasureAndInheritance { @SuppressWarnings("unchecked") diff --git a/generics/FactoryConstraint.java b/generics/FactoryConstraint.java index 2dbc1a9c..7bf1827b 100644 --- a/generics/FactoryConstraint.java +++ b/generics/FactoryConstraint.java @@ -17,7 +17,7 @@ class IntegerFactory implements FactoryI { public Integer create() { return 0; } -} +} class Widget { public static class Factory implements FactoryI { diff --git a/generics/Fill.java b/generics/Fill.java index dcd84da7..7ca4700e 100644 --- a/generics/Fill.java +++ b/generics/Fill.java @@ -31,7 +31,7 @@ class Contract { } class TitleTransfer extends Contract {} - + class FillTest { public static void main(String[] args) { List contracts = new ArrayList<>(); diff --git a/generics/Fill2.java b/generics/Fill2.java index 4c7c831f..9cd8d5bb 100644 --- a/generics/Fill2.java +++ b/generics/Fill2.java @@ -38,7 +38,7 @@ class AddableCollectionAdapter implements Addable { @Override public void add(T item) { c.add(item); } } - + // A Helper to capture the type automatically: class Adapter { public static @@ -54,7 +54,7 @@ extends SimpleQueue implements Addable { @Override public void add(T item) { super.add(item); } } - + class Fill2Test { public static void main(String[] args) { // Adapt a Collection: diff --git a/generics/Functional.java b/generics/Functional.java index 6dac0a5e..63e2d157 100644 --- a/generics/Functional.java +++ b/generics/Functional.java @@ -11,7 +11,7 @@ interface Collector extends UnaryFunction { T result(); // Extract result of collecting parameter } interface UnaryPredicate { boolean test(T x); } - + public class Functional { // Calls the Combiner object on each element to combine // it with a running result, which is finally returned: diff --git a/generics/Generators.java b/generics/Generators.java index ac1238d8..42ef01e5 100644 --- a/generics/Generators.java +++ b/generics/Generators.java @@ -10,7 +10,7 @@ public class Generators { for(int i = 0; i < n; i++) coll.add(gen.next()); return coll; - } + } public static void main(String[] args) { Collection coffee = fill( new ArrayList<>(), new CoffeeGenerator(), 4); diff --git a/generics/GenericArray.java b/generics/GenericArray.java index 7d2090a9..a737b4f2 100644 --- a/generics/GenericArray.java +++ b/generics/GenericArray.java @@ -11,7 +11,7 @@ public class GenericArray { } public T get(int index) { return array[index]; } // Method that exposes the underlying representation: - public T[] rep() { return array; } + public T[] rep() { return array; } public static void main(String[] args) { GenericArray gai = new GenericArray<>(10); // This causes a ClassCastException: diff --git a/generics/GenericArray2.java b/generics/GenericArray2.java index 792f4259..41dc5b47 100644 --- a/generics/GenericArray2.java +++ b/generics/GenericArray2.java @@ -13,7 +13,7 @@ public class GenericArray2 { @SuppressWarnings("unchecked") public T[] rep() { return (T[])array; // Warning: unchecked cast - } + } public static void main(String[] args) { GenericArray2 gai = new GenericArray2<>(10); diff --git a/generics/GenericArrayWithTypeToken.java b/generics/GenericArrayWithTypeToken.java index 1ad5d0e2..3d1c018b 100644 --- a/generics/GenericArrayWithTypeToken.java +++ b/generics/GenericArrayWithTypeToken.java @@ -12,7 +12,7 @@ public class GenericArrayWithTypeToken { } public T get(int index) { return array[index]; } // Expose the underlying representation: - public T[] rep() { return array; } + public T[] rep() { return array; } public static void main(String[] args) { GenericArrayWithTypeToken gai = new GenericArrayWithTypeToken<>( diff --git a/generics/GenericCast.java b/generics/GenericCast.java index 9c5b711f..f2480013 100644 --- a/generics/GenericCast.java +++ b/generics/GenericCast.java @@ -9,7 +9,7 @@ class FixedSizeStack { public void push(T item) { storage[index++] = item; } @SuppressWarnings("unchecked") public T pop() { return (T)storage[--index]; } -} +} public class GenericCast { public static final int SIZE = 10; diff --git a/generics/GenericReading.java b/generics/GenericReading.java index 65fd0c51..f5bbfe47 100644 --- a/generics/GenericReading.java +++ b/generics/GenericReading.java @@ -17,7 +17,7 @@ public class GenericReading { // established when the class is instantiated: static class Reader { T readExact(List list) { return list.get(0); } - } + } static void f2() { Reader fruitReader = new Reader<>(); Fruit f = fruitReader.readExact(fruit); @@ -35,7 +35,7 @@ public class GenericReading { new CovariantReader<>(); Fruit f = fruitReader.readCovariant(fruit); Fruit a = fruitReader.readCovariant(apples); - } + } public static void main(String[] args) { f1(); f2(); f3(); } diff --git a/generics/GenericWriting.java b/generics/GenericWriting.java index ba315e99..11d5082b 100644 --- a/generics/GenericWriting.java +++ b/generics/GenericWriting.java @@ -14,7 +14,7 @@ public class GenericWriting { static void writeWithWildcard(List list, T item) { list.add(item); - } + } static void f2() { writeWithWildcard(apples, new Apple()); writeWithWildcard(fruit, new Apple()); diff --git a/generics/Holder.java b/generics/Holder.java index 2debd712..b52ba242 100644 --- a/generics/Holder.java +++ b/generics/Holder.java @@ -9,7 +9,7 @@ public class Holder { @Override public boolean equals(Object obj) { return value.equals(obj); - } + } public static void main(String[] args) { Holder Apple = new Holder<>(new Apple()); Apple d = Apple.get(); diff --git a/generics/InstantiateGenericType.java b/generics/InstantiateGenericType.java index 7b9f224f..2c5becd2 100644 --- a/generics/InstantiateGenericType.java +++ b/generics/InstantiateGenericType.java @@ -13,7 +13,7 @@ class ClassAsFactory { } } -class Employee {} +class Employee {} public class InstantiateGenericType { public static void main(String[] args) { diff --git a/generics/IterableFibonacci.java b/generics/IterableFibonacci.java index 26ea9af5..248f7b0d 100644 --- a/generics/IterableFibonacci.java +++ b/generics/IterableFibonacci.java @@ -21,7 +21,7 @@ extends Fibonacci implements Iterable { throw new UnsupportedOperationException(); } }; - } + } public static void main(String[] args) { for(int i : new IterableFibonacci(18)) System.out.print(i + " "); diff --git a/generics/LatentReflection.java b/generics/LatentReflection.java index f359c0b2..ee81bdaa 100644 --- a/generics/LatentReflection.java +++ b/generics/LatentReflection.java @@ -17,7 +17,7 @@ class SmartDog { public void speak() { print("Woof!"); } public void sit() { print("Sitting"); } public void reproduce() {} -} +} class CommunicateReflectively { public static void perform(Object speaker) { diff --git a/generics/LinkedStack.java b/generics/LinkedStack.java index c18c758c..d1725f1f 100644 --- a/generics/LinkedStack.java +++ b/generics/LinkedStack.java @@ -15,7 +15,7 @@ public class LinkedStack { private Node top = new Node<>(); // End sentinel public void push(T item) { top = new Node<>(item, top); - } + } public T pop() { T result = top.item; if(!top.end()) diff --git a/generics/Mixins.cpp b/generics/Mixins.cpp index 0a1e5197..4873b827 100644 --- a/generics/Mixins.cpp +++ b/generics/Mixins.cpp @@ -27,7 +27,7 @@ class Basic { public: void set(string val) { value = val; } string get() { return value; } -}; +}; int main() { TimeStamped > mixin1, mixin2; diff --git a/generics/NonCovariantGenerics.java b/generics/NonCovariantGenerics.java index 55638155..536d16d8 100644 --- a/generics/NonCovariantGenerics.java +++ b/generics/NonCovariantGenerics.java @@ -4,5 +4,5 @@ import java.util.*; public class NonCovariantGenerics { // Compile Error: incompatible types: - List flist = new ArrayList<>(); + List flist = new ArrayList(); } ///:~ diff --git a/generics/NotSelfBounded.java b/generics/NotSelfBounded.java index 34ea333b..bef3be23 100644 --- a/generics/NotSelfBounded.java +++ b/generics/NotSelfBounded.java @@ -14,7 +14,7 @@ class B2 extends NotSelfBounded {} class C2 extends NotSelfBounded { C2 setAndGet(C2 arg) { set(arg); return get(); } -} +} class D2 {} // Now this is OK: diff --git a/generics/OrdinaryArguments.java b/generics/OrdinaryArguments.java index a5b0ab6d..20147e5d 100644 --- a/generics/OrdinaryArguments.java +++ b/generics/OrdinaryArguments.java @@ -10,7 +10,7 @@ class DerivedSetter extends OrdinarySetter { void set(Derived derived) { System.out.println("DerivedSetter.set(Derived)"); } -} +} public class OrdinaryArguments { public static void main(String[] args) { diff --git a/generics/PlainGenericInheritance.java b/generics/PlainGenericInheritance.java index f233e17c..1eb78376 100644 --- a/generics/PlainGenericInheritance.java +++ b/generics/PlainGenericInheritance.java @@ -10,7 +10,7 @@ class DerivedGS extends GenericSetter { void set(Derived derived){ System.out.println("DerivedGS.set(Derived)"); } -} +} public class PlainGenericInheritance { public static void main(String[] args) { diff --git a/generics/PrimitiveGenericTest.java b/generics/PrimitiveGenericTest.java index f06ae44c..efbaccd5 100644 --- a/generics/PrimitiveGenericTest.java +++ b/generics/PrimitiveGenericTest.java @@ -8,7 +8,7 @@ class FArray { a[i] = gen.next(); return a; } -} +} public class PrimitiveGenericTest { public static void main(String[] args) { diff --git a/generics/SelfBounding.java b/generics/SelfBounding.java index db26fd5a..b8cdeeda 100644 --- a/generics/SelfBounding.java +++ b/generics/SelfBounding.java @@ -14,7 +14,7 @@ class B extends SelfBounded {} // Also OK class C extends SelfBounded { C setAndGet(C arg) { set(arg); return get(); } -} +} class D {} // Can't do this: diff --git a/generics/Store.java b/generics/Store.java index c922eb84..e38d3621 100644 --- a/generics/Store.java +++ b/generics/Store.java @@ -35,7 +35,7 @@ class Shelf extends ArrayList { public Shelf(int nProducts) { Generators.fill(this, Product.generator, nProducts); } -} +} class Aisle extends ArrayList { public Aisle(int nShelves, int nProducts) { @@ -69,7 +69,7 @@ public class Store extends ArrayList { public static void main(String[] args) { System.out.println(new Store(14, 5, 10)); } -} /* Output: +} /* Output: (First 8 Lines) 258: Test, price: $400.99 861: Test, price: $160.99 868: Test, price: $417.99 diff --git a/generics/ThrowGenericException.java b/generics/ThrowGenericException.java index f8edbcff..457e5642 100644 --- a/generics/ThrowGenericException.java +++ b/generics/ThrowGenericException.java @@ -13,7 +13,7 @@ extends ArrayList> { processor.process(resultCollector); return resultCollector; } -} +} class Failure1 extends Exception {} @@ -29,7 +29,7 @@ class Processor1 implements Processor { if(count < 0) throw new Failure1(); } -} +} class Failure2 extends Exception {} @@ -46,7 +46,7 @@ class Processor2 implements Processor { if(count < 0) throw new Failure2(); } -} +} public class ThrowGenericException { public static void main(String[] args) { diff --git a/generics/TupleList.java b/generics/TupleList.java index 9513bb5c..e75ea01b 100644 --- a/generics/TupleList.java +++ b/generics/TupleList.java @@ -13,7 +13,7 @@ extends ArrayList> { for(FourTuple i: tl) System.out.println(i); } -} /* Output: (75% match) +} /* Output: (75% Match) (Vehicle@11b86e7, Amphibian@35ce36, hi, 47) (Vehicle@757aef, Amphibian@d9f9c3, hi, 47) *///:~ diff --git a/generics/TupleTest.java b/generics/TupleTest.java index cb9e0f58..199f1517 100644 --- a/generics/TupleTest.java +++ b/generics/TupleTest.java @@ -32,7 +32,7 @@ public class TupleTest { System.out.println(h()); System.out.println(k()); } -} /* Output: (80% match) +} /* Output: (80% Match) (hi, 47) (Amphibian@1f6a7b9, hi, 47) (Vehicle@35ce36, Amphibian@757aef, hi, 47) diff --git a/generics/TupleTest2.java b/generics/TupleTest2.java index d4d6276f..d4fbea60 100644 --- a/generics/TupleTest2.java +++ b/generics/TupleTest2.java @@ -27,7 +27,7 @@ public class TupleTest2 { System.out.println(h()); System.out.println(k()); } -} /* Output: (80% match) +} /* Output: (80% Match) (hi, 47) (hi, 47) (Amphibian@7d772e, hi, 47) diff --git a/generics/UnboundedWildcards1.java b/generics/UnboundedWildcards1.java index 8cbad8a4..a6d5860f 100644 --- a/generics/UnboundedWildcards1.java +++ b/generics/UnboundedWildcards1.java @@ -15,7 +15,7 @@ public class UnboundedWildcards1 { list1 = list; list2 = list; list3 = list; - } + } static void assign3(List list) { list1 = list; list2 = list; diff --git a/generics/UseList.java b/generics/UseList.java index fe8a9bf2..b95ec893 100644 --- a/generics/UseList.java +++ b/generics/UseList.java @@ -1,6 +1,5 @@ //: generics/UseList.java // {CompileTimeError} (Will not compile) -import java.util.*; public class UseList { void f(List v) {} diff --git a/generics/WatercolorSets.java b/generics/WatercolorSets.java index bbce8983..f126ee23 100644 --- a/generics/WatercolorSets.java +++ b/generics/WatercolorSets.java @@ -17,12 +17,12 @@ public class WatercolorSets { Set subset = intersection(set1, set2); print("intersection(set1, set2): " + subset); print("difference(set1, subset): " + - difference(set1, subset)); + difference(set1, subset)); print("difference(set2, subset): " + difference(set2, subset)); print("complement(set1, set2): " + complement(set1, set2)); - } + } } /* Output: (Sample) set1: [BRILLIANT_RED, CRIMSON, MAGENTA, ROSE_MADDER, VIOLET, CERULEAN_BLUE_HUE, PHTHALO_BLUE, ULTRAMARINE, COBALT_BLUE_HUE, PERMANENT_GREEN, VIRIDIAN_HUE] set2: [CERULEAN_BLUE_HUE, PHTHALO_BLUE, ULTRAMARINE, COBALT_BLUE_HUE, PERMANENT_GREEN, VIRIDIAN_HUE, SAP_GREEN, YELLOW_OCHRE, BURNT_SIENNA, RAW_UMBER, BURNT_UMBER] diff --git a/generics/Wildcards.java b/generics/Wildcards.java index 5ac10941..d257c11b 100644 --- a/generics/Wildcards.java +++ b/generics/Wildcards.java @@ -14,7 +14,7 @@ public class Wildcards { // OK, but type information is lost: Object obj = holder.get(); - } + } // Similar to rawArgs(), but errors instead of warnings: static void unboundedArg(Holder holder, Object arg) { // holder.set(arg); // Error: @@ -27,7 +27,7 @@ public class Wildcards { // OK, but type information is lost: Object obj = holder.get(); - } + } static T exact1(Holder holder) { T t = holder.get(); return t; @@ -45,7 +45,7 @@ public class Wildcards { // cannot be applied to (T) T t = holder.get(); return t; - } + } static void wildSupertype(Holder holder, T arg) { holder.set(arg); @@ -68,7 +68,7 @@ public class Wildcards { rawArgs(qualified, lng); rawArgs(unbounded, lng); rawArgs(bounded, lng); - + unboundedArg(raw, lng); unboundedArg(qualified, lng); unboundedArg(unbounded, lng); @@ -81,7 +81,7 @@ public class Wildcards { Long r2 = exact1(qualified); Object r3 = exact1(unbounded); // Must return Object Long r4 = exact1(bounded); - + // Long r5 = exact2(raw, lng); // Warnings: // Unchecked conversion from Holder to Holder // Unchecked method invocation: exact2(Holder,T) @@ -93,7 +93,7 @@ public class Wildcards { // Long r8 = exact2(bounded, lng); // Error: // exact2(Holder,T) cannot be applied // to (Holder,Long) - + // Long r9 = wildSubtype(raw, lng); // Warnings: // Unchecked conversion from Holder // to Holder @@ -104,7 +104,7 @@ public class Wildcards { // OK, but can only return Object: Object r11 = wildSubtype(unbounded, lng); Long r12 = wildSubtype(bounded, lng); - + // wildSupertype(raw, lng); // Warnings: // Unchecked conversion from Holder // to Holder diff --git a/generics/build.xml b/generics/build.xml index 8c0734bb..11f433a3 100644 --- a/generics/build.xml +++ b/generics/build.xml @@ -4,6 +4,7 @@ + diff --git a/generics/coffee/CoffeeGenerator.java b/generics/coffee/CoffeeGenerator.java index c4db7239..09e20ac5 100644 --- a/generics/coffee/CoffeeGenerator.java +++ b/generics/coffee/CoffeeGenerator.java @@ -12,7 +12,7 @@ implements Generator, Iterable { public CoffeeGenerator() {} // For iteration: private int size = 0; - public CoffeeGenerator(int sz) { size = sz; } + public CoffeeGenerator(int sz) { size = sz; } @Override public Coffee next() { try { @@ -37,7 +37,7 @@ implements Generator, Iterable { public void remove() { // Not implemented throw new UnsupportedOperationException(); } - }; + }; @Override public Iterator iterator() { return new CoffeeIterator(); diff --git a/generics/decorator/Decoration.java b/generics/decorator/Decoration.java index 10e7bcd4..52f3ba77 100644 --- a/generics/decorator/Decoration.java +++ b/generics/decorator/Decoration.java @@ -15,7 +15,7 @@ class Decorator extends Basic { public void set(String val) { basic.set(val); } @Override public String get() { return basic.get(); } -} +} class TimeStamped extends Decorator { private final long timeStamp; @@ -31,7 +31,7 @@ class SerialNumbered extends Decorator { private final long serialNumber = counter++; public SerialNumbered(Basic basic) { super(basic); } public long getSerialNumber() { return serialNumber; } -} +} public class Decoration { public static void main(String[] args) { diff --git a/gui/CheckBoxes.java b/gui/CheckBoxes.java index bc129bc1..504b2ca7 100644 --- a/gui/CheckBoxes.java +++ b/gui/CheckBoxes.java @@ -2,7 +2,6 @@ // Using JCheckBoxes. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import static net.mindview.util.SwingConsole.*; public class CheckBoxes extends JFrame { diff --git a/gui/ComboBoxes.java b/gui/ComboBoxes.java index 74d94f0d..e491ffdd 100644 --- a/gui/ComboBoxes.java +++ b/gui/ComboBoxes.java @@ -2,7 +2,6 @@ // Using drop-down lists. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import static net.mindview.util.SwingConsole.*; public class ComboBoxes extends JFrame { diff --git a/gui/Dialogs.java b/gui/Dialogs.java index e07a705e..8fa54856 100644 --- a/gui/Dialogs.java +++ b/gui/Dialogs.java @@ -2,7 +2,6 @@ // Creating and using Dialog Boxes. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import static net.mindview.util.SwingConsole.*; class MyDialog extends JDialog { diff --git a/gui/Faces.java b/gui/Faces.java index e328c9df..efb56438 100644 --- a/gui/Faces.java +++ b/gui/Faces.java @@ -2,7 +2,6 @@ // Icon behavior in JButtons. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import static net.mindview.util.SwingConsole.*; public class Faces extends JFrame { diff --git a/gui/HTMLButton.java b/gui/HTMLButton.java index 2810321d..79d43b82 100644 --- a/gui/HTMLButton.java +++ b/gui/HTMLButton.java @@ -2,7 +2,6 @@ // Putting HTML text on Swing components. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import static net.mindview.util.SwingConsole.*; public class HTMLButton extends JFrame { diff --git a/gui/InterruptableLongRunningCallable.java b/gui/InterruptableLongRunningCallable.java index 8a2119ba..9d668bef 100644 --- a/gui/InterruptableLongRunningCallable.java +++ b/gui/InterruptableLongRunningCallable.java @@ -2,7 +2,6 @@ // Using Callables for long-running tasks. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import java.util.concurrent.*; import net.mindview.util.*; import static net.mindview.util.SwingConsole.*; diff --git a/gui/InterruptableLongRunningTask.java b/gui/InterruptableLongRunningTask.java index 8a99db58..1fc8907d 100644 --- a/gui/InterruptableLongRunningTask.java +++ b/gui/InterruptableLongRunningTask.java @@ -2,7 +2,6 @@ // Long-running tasks in threads. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import java.util.concurrent.*; import static net.mindview.util.SwingConsole.*; diff --git a/gui/LongRunningTask.java b/gui/LongRunningTask.java index 62199de2..3a03346c 100644 --- a/gui/LongRunningTask.java +++ b/gui/LongRunningTask.java @@ -2,7 +2,6 @@ // A badly designed program. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import java.util.concurrent.*; import static net.mindview.util.SwingConsole.*; diff --git a/gui/Menus.java b/gui/Menus.java index 5126679c..2e115485 100644 --- a/gui/Menus.java +++ b/gui/Menus.java @@ -136,7 +136,7 @@ public class Menus extends JFrame { s.setMnemonic(KeyEvent.VK_A); f.add(s); f.setMnemonic(KeyEvent.VK_F); - for (JMenuItem file1 : file) { + for(JMenuItem file1 : file) { file1.addActionListener(ml); f.add(file1); } diff --git a/gui/MessageBoxes.java b/gui/MessageBoxes.java index b75a5627..1a3f033a 100644 --- a/gui/MessageBoxes.java +++ b/gui/MessageBoxes.java @@ -55,7 +55,7 @@ public class MessageBoxes extends JFrame { }; public MessageBoxes() { setLayout(new FlowLayout()); - for (JButton b1 : b) { + for(JButton b1 : b) { b1.addActionListener(al); add(b1); } diff --git a/gui/MonitoredLongRunningCallable.java b/gui/MonitoredLongRunningCallable.java index 7e5c97fc..26b491b3 100644 --- a/gui/MonitoredLongRunningCallable.java +++ b/gui/MonitoredLongRunningCallable.java @@ -2,7 +2,6 @@ // Displaying task progress with ProgressMonitors. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import java.util.concurrent.*; import net.mindview.util.*; import static net.mindview.util.SwingConsole.*; diff --git a/gui/Progress.java b/gui/Progress.java index 2352f568..1aaa3937 100644 --- a/gui/Progress.java +++ b/gui/Progress.java @@ -2,7 +2,6 @@ // Using sliders, progress bars and progress monitors. import javax.swing.*; import javax.swing.border.*; -import javax.swing.event.*; import java.awt.*; import static net.mindview.util.SwingConsole.*; diff --git a/gui/TabbedPane1.java b/gui/TabbedPane1.java index ca44cb42..bf9bcb5f 100644 --- a/gui/TabbedPane1.java +++ b/gui/TabbedPane1.java @@ -1,7 +1,6 @@ //: gui/TabbedPane1.java // Demonstrates the Tabbed Pane. import javax.swing.*; -import javax.swing.event.*; import java.awt.*; import static net.mindview.util.SwingConsole.*; diff --git a/gui/TextArea.java b/gui/TextArea.java index 15c228da..0174312b 100644 --- a/gui/TextArea.java +++ b/gui/TextArea.java @@ -2,7 +2,6 @@ // Using the JTextArea control. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import java.util.*; import net.mindview.util.*; import static net.mindview.util.SwingConsole.*; diff --git a/gui/TextPane.java b/gui/TextPane.java index a8564275..57e20081 100644 --- a/gui/TextPane.java +++ b/gui/TextPane.java @@ -2,7 +2,6 @@ // The JTextPane control is a little editor. import javax.swing.*; import java.awt.*; -import java.awt.event.*; import net.mindview.util.*; import static net.mindview.util.SwingConsole.*; diff --git a/gui/build.xml b/gui/build.xml index bcdb87e9..4064657b 100644 --- a/gui/build.xml +++ b/gui/build.xml @@ -4,6 +4,7 @@ + diff --git a/holding/AdapterMethodIdiom.java b/holding/AdapterMethodIdiom.java index ee572332..4f2aefe2 100644 --- a/holding/AdapterMethodIdiom.java +++ b/holding/AdapterMethodIdiom.java @@ -18,7 +18,7 @@ class ReversibleArrayList extends ArrayList { } }; } -} +} public class AdapterMethodIdiom { public static void main(String[] args) { diff --git a/holding/ApplesAndOrangesWithGenerics.java b/holding/ApplesAndOrangesWithGenerics.java index 3c49bf0a..4d3fbed2 100644 --- a/holding/ApplesAndOrangesWithGenerics.java +++ b/holding/ApplesAndOrangesWithGenerics.java @@ -8,7 +8,7 @@ public class ApplesAndOrangesWithGenerics { apples.add(new Apple()); // Compile-time error: // apples.add(new Orange()); - for (Apple apple : apples) { + for(Apple apple : apples) { System.out.println(apple.id()); } // Using foreach: diff --git a/holding/ApplesAndOrangesWithoutGenerics.java b/holding/ApplesAndOrangesWithoutGenerics.java index 502a7298..f9c5e930 100644 --- a/holding/ApplesAndOrangesWithoutGenerics.java +++ b/holding/ApplesAndOrangesWithoutGenerics.java @@ -9,7 +9,7 @@ class Apple { public long id() { return id; } } -class Orange {} +class Orange {} public class ApplesAndOrangesWithoutGenerics { @SuppressWarnings("unchecked") @@ -19,7 +19,7 @@ public class ApplesAndOrangesWithoutGenerics { apples.add(new Apple()); // Not prevented from adding an Orange to apples: apples.add(new Orange()); - for (Object apple : apples) { + for(Object apple : apples) { ((Apple) apple).id(); // Orange is detected only at run time } diff --git a/holding/CollectionSequence.java b/holding/CollectionSequence.java index d1b87766..2d33ace0 100644 --- a/holding/CollectionSequence.java +++ b/holding/CollectionSequence.java @@ -22,7 +22,7 @@ extends AbstractCollection { throw new UnsupportedOperationException(); } }; - } + } public static void main(String[] args) { CollectionSequence c = new CollectionSequence(); InterfaceVsIterator.display(c); diff --git a/holding/CrossContainerIteration.java b/holding/CrossContainerIteration.java index 88a750e3..d01f9aed 100644 --- a/holding/CrossContainerIteration.java +++ b/holding/CrossContainerIteration.java @@ -9,7 +9,7 @@ public class CrossContainerIteration { System.out.print(p.id() + ":" + p + " "); } System.out.println(); - } + } public static void main(String[] args) { ArrayList pets = Pets.arrayList(8); LinkedList petsLL = new LinkedList<>(pets); diff --git a/holding/InterfaceVsIterator.java b/holding/InterfaceVsIterator.java index 0b9430cb..cdefc4ec 100644 --- a/holding/InterfaceVsIterator.java +++ b/holding/InterfaceVsIterator.java @@ -14,7 +14,7 @@ public class InterfaceVsIterator { for(Pet p : pets) System.out.print(p.id() + ":" + p + " "); System.out.println(); - } + } public static void main(String[] args) { List petList = Pets.arrayList(8); Set petSet = new HashSet<>(petList); @@ -31,7 +31,7 @@ public class InterfaceVsIterator { System.out.println(petMap.keySet()); display(petMap.values()); display(petMap.values().iterator()); - } + } } /* Output: 0:Rat 1:Manx 2:Cymric 3:Mutt 4:Pug 5:Cymric 6:Pug 7:Manx 2:Cymric 1:Manx 0:Rat 6:Pug 5:Cymric 4:Pug 3:Mutt 7:Manx diff --git a/holding/IterableClass.java b/holding/IterableClass.java index 72666127..777cdf79 100644 --- a/holding/IterableClass.java +++ b/holding/IterableClass.java @@ -20,7 +20,7 @@ public class IterableClass implements Iterable { throw new UnsupportedOperationException(); } }; - } + } public static void main(String[] args) { for(String s : new IterableClass()) System.out.print(s + " "); diff --git a/holding/ListIteration.java b/holding/ListIteration.java index df6438c6..9bf818a5 100644 --- a/holding/ListIteration.java +++ b/holding/ListIteration.java @@ -14,7 +14,7 @@ public class ListIteration { while(it.hasPrevious()) System.out.print(it.previous().id() + " "); System.out.println(); - System.out.println(pets); + System.out.println(pets); it = pets.listIterator(3); while(it.hasNext()) { it.next(); diff --git a/holding/MapOfList.java b/holding/MapOfList.java index c60ac649..8b123121 100644 --- a/holding/MapOfList.java +++ b/holding/MapOfList.java @@ -17,7 +17,7 @@ public class MapOfList { Arrays.asList( new Pug("Louie aka Louis Snorkelstein Dupree"), new Cat("Stanford aka Stinky el Negro"), - new Cat("Pinkola"))); + new Cat("Pinkola"))); petPeople.put(new Person("Luke"), Arrays.asList(new Rat("Fuzzy"), new Rat("Fizzy"))); petPeople.put(new Person("Isaac"), @@ -32,7 +32,7 @@ public class MapOfList { print(" " + pet); } } -} /* Output: +} /* Output: People: [Person Marilyn, Person Luke, Person Isaac, Person Kate, Person Dawn] Pets: [[Pug Louie aka Louis Snorkelstein Dupree, Cat Stanford aka Stinky el Negro, Cat Pinkola], [Rat Fuzzy, Rat Fizzy], [Rat Freckly], [Cat Shackleton, Cat Elsie May, Dog Margrett], [Cymric Molly, Mutt Spot]] Person Marilyn has: diff --git a/holding/MultiIterableClass.java b/holding/MultiIterableClass.java index 3fedb240..9b605900 100644 --- a/holding/MultiIterableClass.java +++ b/holding/MultiIterableClass.java @@ -15,7 +15,7 @@ public class MultiIterableClass extends IterableClass { throw new UnsupportedOperationException(); } }; - } + } public Iterable randomized() { return () -> { List shuffled = @@ -23,7 +23,7 @@ public class MultiIterableClass extends IterableClass { Collections.shuffle(shuffled, new Random(47)); return shuffled.iterator(); }; - } + } public static void main(String[] args) { MultiIterableClass mic = new MultiIterableClass(); for(String s : mic.reversed()) diff --git a/holding/PrintingContainers.java b/holding/PrintingContainers.java index 1f5feb87..f2780712 100644 --- a/holding/PrintingContainers.java +++ b/holding/PrintingContainers.java @@ -17,7 +17,7 @@ public class PrintingContainers { map.put("dog", "Bosco"); map.put("dog", "Spot"); return map; - } + } public static void main(String[] args) { print(fill(new ArrayList<>())); print(fill(new LinkedList<>())); diff --git a/holding/SimpleIteration.java b/holding/SimpleIteration.java index f8f74ebc..817291f5 100644 --- a/holding/SimpleIteration.java +++ b/holding/SimpleIteration.java @@ -14,7 +14,7 @@ public class SimpleIteration { // A simpler approach, when possible: for(Pet p : pets) System.out.print(p.id() + ":" + p + " "); - System.out.println(); + System.out.println(); // An Iterator can also remove elements: it = pets.iterator(); for(int i = 0; i < 6; i++) { diff --git a/holding/build.xml b/holding/build.xml index 68994c9d..3f2a2d3c 100644 --- a/holding/build.xml +++ b/holding/build.xml @@ -4,6 +4,7 @@ + diff --git a/initialization/Burrito.java b/initialization/Burrito.java index dab629ca..8be824e8 100644 --- a/initialization/Burrito.java +++ b/initialization/Burrito.java @@ -15,7 +15,7 @@ public class Burrito { case FLAMING: default: System.out.println("maybe too hot."); } - } + } public static void main(String[] args) { Burrito plain = new Burrito(Spiciness.NOT), diff --git a/initialization/NewVarArgs.java b/initialization/NewVarArgs.java index ec7c4d32..85878086 100644 --- a/initialization/NewVarArgs.java +++ b/initialization/NewVarArgs.java @@ -17,7 +17,7 @@ public class NewVarArgs { printArray((Object[])new Integer[]{ 1, 2, 3, 4 }); printArray(); // Empty list is OK } -} /* Output: (75% match) +} /* Output: (75% Match) 47 3.14 11.11 47 3.14 11.11 one two three diff --git a/initialization/Overloading.java b/initialization/Overloading.java index 36fe9465..5c182a4a 100644 --- a/initialization/Overloading.java +++ b/initialization/Overloading.java @@ -13,7 +13,7 @@ class Tree { height = initialHeight; print("Creating new Tree that is " + height + " feet tall"); - } + } void info() { print("Tree is " + height + " feet tall"); } @@ -31,7 +31,7 @@ public class Overloading { } // Overloaded constructor: new Tree(); - } + } } /* Output: Creating new Tree that is 0 feet tall Tree is 0 feet tall diff --git a/initialization/build.xml b/initialization/build.xml index a05dac0a..73b51a2b 100644 --- a/initialization/build.xml +++ b/initialization/build.xml @@ -4,6 +4,7 @@ + diff --git a/innerclasses/AnonymousConstructor.java b/innerclasses/AnonymousConstructor.java index 468fe63c..80af26d0 100644 --- a/innerclasses/AnonymousConstructor.java +++ b/innerclasses/AnonymousConstructor.java @@ -7,7 +7,7 @@ abstract class Base { print("Base constructor, i = " + i); } public abstract void f(); -} +} public class AnonymousConstructor { public static Base getBase(int i) { diff --git a/innerclasses/BigEgg.java b/innerclasses/BigEgg.java index b41b5236..b640530c 100644 --- a/innerclasses/BigEgg.java +++ b/innerclasses/BigEgg.java @@ -11,7 +11,7 @@ class Egg { print("New Egg()"); y = new Yolk(); } -} +} public class BigEgg extends Egg { public class Yolk { diff --git a/innerclasses/BigEgg2.java b/innerclasses/BigEgg2.java index 5bd84e1f..4ff4fc96 100644 --- a/innerclasses/BigEgg2.java +++ b/innerclasses/BigEgg2.java @@ -11,7 +11,7 @@ class Egg2 { public Egg2() { print("New Egg2()"); } public void insertYolk(Yolk yy) { y = yy; } public void g() { y.f(); } -} +} public class BigEgg2 extends Egg2 { public class Yolk extends Egg2.Yolk { diff --git a/innerclasses/Callbacks.java b/innerclasses/Callbacks.java index 1e4dde72..8abc6278 100644 --- a/innerclasses/Callbacks.java +++ b/innerclasses/Callbacks.java @@ -15,12 +15,12 @@ class Callee1 implements Incrementable { i++; print(i); } -} +} class MyIncrement { public void increment() { print("Other operation"); } static void f(MyIncrement mi) { mi.increment(); } -} +} // If your class must implement increment() in // some other way, you must use an inner class: @@ -43,7 +43,7 @@ class Callee2 extends MyIncrement { Incrementable getCallbackReference() { return new Closure(); } -} +} class Caller { private Incrementable callbackReference; @@ -62,7 +62,7 @@ public class Callbacks { caller1.go(); caller2.go(); caller2.go(); - } + } } /* Output: Other operation 1 diff --git a/innerclasses/Factories.java b/innerclasses/Factories.java index 098fe1c4..81e8ef5e 100644 --- a/innerclasses/Factories.java +++ b/innerclasses/Factories.java @@ -8,7 +8,7 @@ interface Service { interface ServiceFactory { Service getService(); -} +} class Implementation1 implements Service { private Implementation1() {} @@ -20,7 +20,7 @@ class Implementation1 implements Service { return new Implementation1(); } }; -} +} class Implementation2 implements Service { private Implementation2() {} @@ -32,7 +32,7 @@ class Implementation2 implements Service { return new Implementation2(); } }; -} +} public class Factories { public static void serviceConsumer(ServiceFactory fact) { diff --git a/innerclasses/Games.java b/innerclasses/Games.java index 50a43ed8..7e53863a 100644 --- a/innerclasses/Games.java +++ b/innerclasses/Games.java @@ -17,7 +17,7 @@ class Checkers implements Game { public static GameFactory factory = new GameFactory() { public Game getGame() { return new Checkers(); } }; -} +} class Chess implements Game { private Chess() {} @@ -30,7 +30,7 @@ class Chess implements Game { public static GameFactory factory = new GameFactory() { public Game getGame() { return new Chess(); } }; -} +} public class Games { public static void playGame(GameFactory factory) { diff --git a/innerclasses/GreenhouseController.java b/innerclasses/GreenhouseController.java index be90ce82..466352a6 100644 --- a/innerclasses/GreenhouseController.java +++ b/innerclasses/GreenhouseController.java @@ -16,7 +16,7 @@ public class GreenhouseController { gc.new WaterOn(600), gc.new WaterOff(800), gc.new ThermostatDay(1400) - }; + }; gc.addEvent(gc.new Restart(2000, eventList)); if(args.length == 1) gc.addEvent( diff --git a/innerclasses/GreenhouseControls.java b/innerclasses/GreenhouseControls.java index bd6f0ded..2de66db2 100644 --- a/innerclasses/GreenhouseControls.java +++ b/innerclasses/GreenhouseControls.java @@ -17,7 +17,7 @@ public class GreenhouseControls extends Controller { } @Override public String toString() { return "Light is on"; } - } + } public class LightOff extends Event { public LightOff(long delayTime) { super(delayTime); } @Override @@ -41,7 +41,7 @@ public class GreenhouseControls extends Controller { public String toString() { return "Greenhouse water is on"; } - } + } public class WaterOff extends Event { public WaterOff(long delayTime) { super(delayTime); } @Override @@ -54,7 +54,7 @@ public class GreenhouseControls extends Controller { return "Greenhouse water is off"; } } - private String thermostat = "Day"; + private String thermostat = "Day"; public class ThermostatNight extends Event { public ThermostatNight(long delayTime) { super(delayTime); @@ -68,7 +68,7 @@ public class GreenhouseControls extends Controller { public String toString() { return "Thermostat on night setting"; } - } + } public class ThermostatDay extends Event { public ThermostatDay(long delayTime) { super(delayTime); @@ -93,7 +93,7 @@ public class GreenhouseControls extends Controller { } @Override public String toString() { return "Bing!"; } - } + } public class Restart extends Event { private Event[] eventList; public Restart(long delayTime, Event[] eventList) { @@ -115,7 +115,7 @@ public class GreenhouseControls extends Controller { public String toString() { return "Restarting system"; } - } + } public static class Terminate extends Event { public Terminate(long delayTime) { super(delayTime); } @Override diff --git a/innerclasses/LocalInnerClass.java b/innerclasses/LocalInnerClass.java index da0852e2..d45ec444 100644 --- a/innerclasses/LocalInnerClass.java +++ b/innerclasses/LocalInnerClass.java @@ -4,7 +4,7 @@ import static net.mindview.util.Print.*; interface Counter { int next(); -} +} public class LocalInnerClass { private int count = 0; @@ -22,7 +22,7 @@ public class LocalInnerClass { } } return new LocalCounter(); - } + } // The same thing with an anonymous inner class: Counter getCounter2(final String name) { return new Counter() { @@ -37,7 +37,7 @@ public class LocalInnerClass { return count++; } }; - } + } public static void main(String[] args) { LocalInnerClass lic = new LocalInnerClass(); Counter diff --git a/innerclasses/MultiNestingAccess.java b/innerclasses/MultiNestingAccess.java index 621b43c4..b2511cc7 100644 --- a/innerclasses/MultiNestingAccess.java +++ b/innerclasses/MultiNestingAccess.java @@ -13,7 +13,7 @@ class MNA { } } } -} +} public class MultiNestingAccess { public static void main(String[] args) { diff --git a/innerclasses/Parcel1.java b/innerclasses/Parcel1.java index 4eb1795a..7ad6db41 100644 --- a/innerclasses/Parcel1.java +++ b/innerclasses/Parcel1.java @@ -12,7 +12,7 @@ public class Parcel1 { label = whereTo; } String readLabel() { return label; } - } + } // Using inner classes looks just like // using any other class, within Parcel1: public void ship(String dest) { diff --git a/innerclasses/Parcel10.java b/innerclasses/Parcel10.java index b2a48448..2b6a648c 100644 --- a/innerclasses/Parcel10.java +++ b/innerclasses/Parcel10.java @@ -17,7 +17,7 @@ public class Parcel10 { @Override public String readLabel() { return label; } }; - } + } public static void main(String[] args) { Parcel10 p = new Parcel10(); Destination d = p.destination("Tasmania", 101.395F); diff --git a/innerclasses/Parcel11.java b/innerclasses/Parcel11.java index 0a2e990e..3476ddc8 100644 --- a/innerclasses/Parcel11.java +++ b/innerclasses/Parcel11.java @@ -14,7 +14,7 @@ public class Parcel11 { label = whereTo; } @Override - public String readLabel() { return label; } + public String readLabel() { return label; } // Nested classes can contain other static elements: public static void f() {} static int x = 10; diff --git a/innerclasses/Parcel6.java b/innerclasses/Parcel6.java index 539e47be..e8c7014e 100644 --- a/innerclasses/Parcel6.java +++ b/innerclasses/Parcel6.java @@ -16,7 +16,7 @@ public class Parcel6 { } // Can't use it here! Out of scope: //! TrackingSlip ts = new TrackingSlip("x"); - } + } public void track() { internalTracking(true); } public static void main(String[] args) { Parcel6 p = new Parcel6(); diff --git a/innerclasses/Sequence.java b/innerclasses/Sequence.java index de24a4dd..d710df7e 100644 --- a/innerclasses/Sequence.java +++ b/innerclasses/Sequence.java @@ -5,7 +5,7 @@ interface Selector { boolean end(); Object current(); void next(); -} +} public class Sequence { private Object[] items; @@ -26,7 +26,7 @@ public class Sequence { } public Selector selector() { return new SequenceSelector(); - } + } public static void main(String[] args) { Sequence sequence = new Sequence(10); for(int i = 0; i < 10; i++) diff --git a/innerclasses/build.xml b/innerclasses/build.xml index 76d9d01c..3d6de3bc 100644 --- a/innerclasses/build.xml +++ b/innerclasses/build.xml @@ -4,6 +4,7 @@ + diff --git a/interfaces/AdaptedRandomDoubles.java b/interfaces/AdaptedRandomDoubles.java index 0e556de5..d775bad7 100644 --- a/interfaces/AdaptedRandomDoubles.java +++ b/interfaces/AdaptedRandomDoubles.java @@ -16,7 +16,7 @@ implements Readable { String result = Double.toString(next()) + " "; cb.append(result); return result.length(); - } + } public static void main(String[] args) { Scanner s = new Scanner(new AdaptedRandomDoubles(7)); while(s.hasNextDouble()) diff --git a/interfaces/Adventure.java b/interfaces/Adventure.java index dc8a1144..1dd05145 100644 --- a/interfaces/Adventure.java +++ b/interfaces/Adventure.java @@ -15,7 +15,7 @@ interface CanFly { class ActionCharacter { public void fight() {} -} +} class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly { diff --git a/interfaces/Factories.java b/interfaces/Factories.java index 58743141..815c4218 100644 --- a/interfaces/Factories.java +++ b/interfaces/Factories.java @@ -14,7 +14,7 @@ class Implementation1 implements Service { Implementation1() {} // Package access public void method1() {print("Implementation1 method1");} public void method2() {print("Implementation1 method2");} -} +} class Implementation1Factory implements ServiceFactory { @Override @@ -34,7 +34,7 @@ class Implementation2Factory implements ServiceFactory { public Service getService() { return new Implementation2(); } -} +} public class Factories { public static void serviceConsumer(ServiceFactory fact) { diff --git a/interfaces/Games.java b/interfaces/Games.java index ab02f3e9..6690db8e 100644 --- a/interfaces/Games.java +++ b/interfaces/Games.java @@ -18,7 +18,7 @@ class Checkers implements Game { class CheckersFactory implements GameFactory { @Override public Game getGame() { return new Checkers(); } -} +} class Chess implements Game { private int moves = 0; @@ -33,7 +33,7 @@ class Chess implements Game { class ChessFactory implements GameFactory { @Override public Game getGame() { return new Chess(); } -} +} public class Games { public static void playGame(GameFactory factory) { diff --git a/interfaces/HorrorShow.java b/interfaces/HorrorShow.java index 574fd435..8d2f262a 100644 --- a/interfaces/HorrorShow.java +++ b/interfaces/HorrorShow.java @@ -18,7 +18,7 @@ class DragonZilla implements DangerousMonster { public void menace() {} @Override public void destroy() {} -} +} interface Vampire extends DangerousMonster, Lethal { void drinkBlood(); @@ -33,7 +33,7 @@ class VeryBadVampire implements Vampire { public void kill() {} @Override public void drinkBlood() {} -} +} public class HorrorShow { static void u(Monster b) { b.menace(); } diff --git a/interfaces/RandomWords.java b/interfaces/RandomWords.java index 6812dffb..853d5084 100644 --- a/interfaces/RandomWords.java +++ b/interfaces/RandomWords.java @@ -12,7 +12,7 @@ public class RandomWords implements Readable { private static final char[] vowels = "aeiou".toCharArray(); private int count; - public RandomWords(int count) { this.count = count; } + public RandomWords(int count) { this.count = count; } @Override public int read(CharBuffer cb) { if(count-- == 0) diff --git a/interfaces/build.xml b/interfaces/build.xml index a1d15ac3..31e7ec04 100644 --- a/interfaces/build.xml +++ b/interfaces/build.xml @@ -4,6 +4,7 @@ + diff --git a/interfaces/classprocessor/Apply.java b/interfaces/classprocessor/Apply.java index a9562ba3..f87317a5 100644 --- a/interfaces/classprocessor/Apply.java +++ b/interfaces/classprocessor/Apply.java @@ -8,7 +8,7 @@ class Processor { return getClass().getSimpleName(); } Object process(Object input) { return input; } -} +} class Upcase extends Processor { @Override @@ -30,7 +30,7 @@ class Splitter extends Processor { // The split() argument divides a String into pieces: return Arrays.toString(((String)input).split(" ")); } -} +} public class Apply { public static void process(Processor p, Object s) { diff --git a/interfaces/interfaceprocessor/FilterProcessor.java b/interfaces/interfaceprocessor/FilterProcessor.java index 9ef68df9..ec3a39f3 100644 --- a/interfaces/interfaceprocessor/FilterProcessor.java +++ b/interfaces/interfaceprocessor/FilterProcessor.java @@ -13,7 +13,7 @@ class FilterAdapter implements Processor { public Waveform process(Object input) { return filter.process((Waveform)input); } -} +} public class FilterProcessor { public static void main(String[] args) { diff --git a/interfaces/interfaceprocessor/StringProcessor.java b/interfaces/interfaceprocessor/StringProcessor.java index 4d2a5944..53113012 100644 --- a/interfaces/interfaceprocessor/StringProcessor.java +++ b/interfaces/interfaceprocessor/StringProcessor.java @@ -16,7 +16,7 @@ public abstract class StringProcessor implements Processor{ Apply.process(new Downcase(), s); Apply.process(new Splitter(), s); } -} +} class Upcase extends StringProcessor { @Override @@ -36,7 +36,7 @@ class Splitter extends StringProcessor { @Override public String process(Object input) { return Arrays.toString(((String)input).split(" ")); - } + } } /* Output: Using Processor Upcase IF SHE WEIGHS THE SAME AS A DUCK, SHE'S MADE OF WOOD diff --git a/interfaces/music4/Music4.java b/interfaces/music4/Music4.java index 1183b194..43f2373f 100644 --- a/interfaces/music4/Music4.java +++ b/interfaces/music4/Music4.java @@ -42,7 +42,7 @@ class Stringed extends Instrument { public String what() { return "Stringed"; } @Override public void adjust() {} -} +} class Brass extends Wind { @Override @@ -60,7 +60,7 @@ class Woodwind extends Wind { } @Override public String what() { return "Woodwind"; } -} +} public class Music4 { // Doesn't care about type, so new types @@ -72,7 +72,7 @@ public class Music4 { static void tuneAll(Instrument[] e) { for(Instrument i : e) tune(i); - } + } public static void main(String[] args) { // Upcasting during addition to the array: Instrument[] orchestra = { diff --git a/interfaces/music5/Music5.java b/interfaces/music5/Music5.java index 7828c88d..d9019cbe 100644 --- a/interfaces/music5/Music5.java +++ b/interfaces/music5/Music5.java @@ -48,7 +48,7 @@ class Stringed implements Instrument { class Brass extends Wind { @Override public String toString() { return "Brass"; } -} +} class Woodwind extends Wind { @Override @@ -65,7 +65,7 @@ public class Music5 { static void tuneAll(Instrument[] e) { for(Instrument i : e) tune(i); - } + } public static void main(String[] args) { // Upcasting during addition to the array: Instrument[] orchestra = { diff --git a/interfaces/nesting/NestingInterfaces.java b/interfaces/nesting/NestingInterfaces.java index 98a356a2..7b18c979 100644 --- a/interfaces/nesting/NestingInterfaces.java +++ b/interfaces/nesting/NestingInterfaces.java @@ -19,7 +19,7 @@ class A { class CImp implements C { @Override public void f() {} - } + } private class CImp2 implements C { @Override public void f() {} @@ -41,7 +41,7 @@ class A { dRef = d; dRef.f(); } -} +} interface E { interface G { @@ -54,7 +54,7 @@ interface E { void g(); // Cannot be private within an interface: //! private interface I {} -} +} public class NestingInterfaces { public class BImp implements A.B { @@ -85,7 +85,7 @@ public class NestingInterfaces { @Override public void f() {} } - } + } public static void main(String[] args) { A a = new A(); // Can't access A.D: diff --git a/io/AvailableCharSets.java b/io/AvailableCharSets.java index 4c9247b6..5aff8897 100644 --- a/io/AvailableCharSets.java +++ b/io/AvailableCharSets.java @@ -24,7 +24,7 @@ public class AvailableCharSets { print(); } } -} /* Output: +} /* Output: (First 7 Lines) Big5: csBig5 Big5-HKSCS: big5-hkscs:unicode3.0, Big5_HKSCS, big5-hkscs, big5hkscs, big5hk EUC-JP: eucjis, Extended_UNIX_Code_Packed_Format_for_Japanese, x-eucjp, eucjp, csEUCPkdFmtjapanese, euc_jp, x-euc-jp diff --git a/io/MakeDirectories.java b/io/MakeDirectories.java index 8251e3cf..17b20be0 100644 --- a/io/MakeDirectories.java +++ b/io/MakeDirectories.java @@ -67,7 +67,7 @@ public class MakeDirectories { fileData(f); } } -} /* Output: (80% match) +} /* Output: (80% Match) created MakeDirectoriesTest Absolute path: d:\aaa-TIJ4\code\io\MakeDirectoriesTest Can read: true diff --git a/io/MappedIO.java b/io/MappedIO.java index f72e96b7..6c62f669 100644 --- a/io/MappedIO.java +++ b/io/MappedIO.java @@ -103,7 +103,7 @@ public class MappedIO { for(Tester test : tests) test.runTest(); } -} /* Output: (90% match) +} /* Output: (90% Match) Stream Write: 0.56 Mapped Write: 0.12 Stream Read: 0.80 diff --git a/io/ZipCompress.java b/io/ZipCompress.java index ca13ed33..60a65773 100644 --- a/io/ZipCompress.java +++ b/io/ZipCompress.java @@ -17,7 +17,7 @@ public class ZipCompress { try (BufferedOutputStream out = new BufferedOutputStream(zos)) { zos.setComment("A test of Java Zipping"); // No corresponding getComment(), though. - for (String arg : args) { + for(String arg : args) { print("Writing file " + arg); try(InputStream in = new BufferedInputStream( new FileInputStream(arg))) { diff --git a/io/build.xml b/io/build.xml index d3255b84..69dd5410 100644 --- a/io/build.xml +++ b/io/build.xml @@ -4,6 +4,7 @@ + diff --git a/logging/ConfigureLogging.java b/logging/ConfigureLogging.java index 4b670cd5..00a861c6 100644 --- a/logging/ConfigureLogging.java +++ b/logging/ConfigureLogging.java @@ -1,19 +1,22 @@ //: logging/ConfigureLogging.java // {JVMArgs: -Djava.util.logging.config.file=log.prop} -// {Clean: java0.log,java0.log.lck} import java.util.logging.*; public class ConfigureLogging { - static Logger lgr = Logger.getLogger("com"), - lgr2 = Logger.getLogger("com.bruceeckel"), - util = Logger.getLogger("com.bruceeckel.util"), - test = Logger.getLogger("com.bruceeckel.test"), - rand = Logger.getLogger("random"); + static Logger + lgr = Logger.getLogger("net"), + lgr2 = Logger.getLogger("net.mindview"), + util= Logger.getLogger("net.mindview.util"), + test= Logger.getLogger("net.mindview.test"), + rand = Logger.getLogger("random"); public ConfigureLogging() { - /* Set Additional formatters, Filters and Handlers for - the loggers here. You cannot specify the Handlers - for loggers except the root logger from the - configuration file. */ + /* + Set Additional formatters, Filters and + Handlers for the loggers here. You cannot + specify the Handlers for loggers except + the root logger from the configuration + file. + */ } public static void main(String[] args) { sendLogMessages(lgr); @@ -22,9 +25,11 @@ public class ConfigureLogging { sendLogMessages(test); sendLogMessages(rand); } - private static void sendLogMessages(Logger logger) { + private static void + sendLogMessages(Logger logger) { System.out.println(" Logger Name : " - + logger.getName() + " Level: " + logger.getLevel()); + + logger.getName() + " Level: " + + logger.getLevel()); logger.finest("Finest"); logger.finer("Finer"); logger.fine("Fine"); @@ -33,4 +38,46 @@ public class ConfigureLogging { logger.warning("Warning"); logger.severe("Severe"); } -} ///:~ +} /* Output: (Sample) + Logger Name : net Level: SEVERE + Logger Name : net.mindview Level: FINEST + Logger Name : net.mindview.util Level: INFO + Logger Name : net.mindview.test Level: FINER + Logger Name : random Level: SEVERE +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +SEVERE: Severe +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +FINEST: Finest +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +FINER: Finer +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +FINE: Fine +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +CONFIG: Config +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +INFO: Info +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +WARNING: Warning +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +SEVERE: Severe +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +INFO: Info +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +WARNING: Warning +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +SEVERE: Severe +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +FINER: Finer +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +FINE: Fine +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +CONFIG: Config +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +INFO: Info +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +WARNING: Warning +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +SEVERE: Severe +May 14, 2015 4:43:34 PM ConfigureLogging sendLogMessages +SEVERE: Severe +*///:~ diff --git a/logging/CustomHandler.java b/logging/CustomHandler.java index 29b85d74..b912f4e0 100644 --- a/logging/CustomHandler.java +++ b/logging/CustomHandler.java @@ -6,15 +6,19 @@ import java.util.*; public class CustomHandler { private static Logger logger = Logger.getLogger("CustomHandler"); - private static List trace = new ArrayList<>(); + private static List trace = + new ArrayList<>(); public static void main(String[] args) { logger.addHandler(new Handler() { @Override public void publish(LogRecord logRecord) { trace.add(logRecord.getLevel() + ":"); - trace.add(logRecord.getSourceClassName()+":"); - trace.add(logRecord.getSourceMethodName()+":"); - trace.add("<" + logRecord.getMessage() + ">"); + trace.add(logRecord.getSourceClassName() + + ":"); + trace.add( + logRecord.getSourceMethodName() +":"); + trace.add("<" + logRecord.getMessage() + + ">"); trace.add("\n"); } @Override @@ -26,4 +30,12 @@ public class CustomHandler { logger.info("Logging Info"); System.out.print(trace); } -} ///:~ +} /* Output: +[WARNING:, CustomHandler:, main:, , +, INFO:, CustomHandler:, main:, , +] +May 14, 2015 3:29:53 PM CustomHandler main +WARNING: Logging Warning +May 14, 2015 3:29:53 PM CustomHandler main +INFO: Logging Info +*///:~ diff --git a/logging/EmailLogger.java b/logging/EmailLogger.java index 3d09cade..d32b48d5 100644 --- a/logging/EmailLogger.java +++ b/logging/EmailLogger.java @@ -11,7 +11,8 @@ import javax.mail.internet.*; public class EmailLogger { private static Logger logger = Logger.getLogger("EmailLogger"); - public static void main(String[] args) throws Exception { + public static void + main(String[] args) throws Exception { logger.setUseParentHandlers(false); Handler conHdlr = new ConsoleHandler(); conHdlr.setFormatter(new Formatter() { @@ -28,7 +29,8 @@ public class EmailLogger { new FileHandler("EmailLoggerOutput.xml")); logger.addHandler(new MailingHandler()); logger.log(Level.INFO, - "Testing Multiple Handlers", "SendMailTrue"); + "Testing Multiple Handlers", + "SendMailTrue"); } } @@ -59,7 +61,8 @@ class MailInfo { private String subject; private String message; public MailInfo(String from, String[] to, - String server, String subject, String message) { + String server, String subject, + String message) { fromAddr = from; toAddr = to; serverAddr = server; @@ -74,14 +77,17 @@ class MailInfo { Session.getDefaultInstance(prop, null); session.setDebug(true); // Create a message - Message mimeMsg = new MimeMessage(session); + Message mimeMsg= new MimeMessage(session); // Set the from and to address - Address addressFrom = new InternetAddress(fromAddr); + Address addressFrom = + new InternetAddress(fromAddr); mimeMsg.setFrom(addressFrom); - Address[] to = new InternetAddress[toAddr.length]; + Address[] to = + new InternetAddress[toAddr.length]; for(int i = 0; i < toAddr.length; i++) to[i] = new InternetAddress(toAddr[i]); - mimeMsg.setRecipients(Message.RecipientType.TO,to); + mimeMsg.setRecipients( + Message.RecipientType.TO,to); mimeMsg.setSubject(subject); mimeMsg.setText(message); Transport.send(mimeMsg); diff --git a/logging/InfoLogging.java b/logging/InfoLogging.java index e062f964..6f15e77d 100644 --- a/logging/InfoLogging.java +++ b/logging/InfoLogging.java @@ -1,11 +1,13 @@ //: logging/InfoLogging.java import java.util.logging.*; -import java.io.*; public class InfoLogging { private static Logger logger = Logger.getLogger("InfoLogging"); public static void main(String[] args) { - logger.info("Logging an INFO-level message"); + logger.info("Logging: INFO-level message"); } -} ///:~ +} /* Output: +May 13, 2015 6:26:41 PM InfoLogging main +INFO: Logging: INFO-level message +*///:~ diff --git a/logging/InfoLogging2.java b/logging/InfoLogging2.java index a20a6952..414d0790 100644 --- a/logging/InfoLogging2.java +++ b/logging/InfoLogging2.java @@ -1,13 +1,15 @@ //: logging/InfoLogging2.java // Guaranteeing proper class and method names import java.util.logging.*; -import java.io.*; public class InfoLogging2 { private static Logger logger = Logger.getLogger("InfoLogging2"); public static void main(String[] args) { - logger.logp(Level.INFO, "InfoLogging2", "main", - "Logging an INFO-level message"); + logger.logp(Level.INFO, "InfoLogging2", + "main", "Logging an INFO-level message"); } -} ///:~ +} /* Output: +May 13, 2015 10:43:36 AM InfoLogging2 main +INFO: Logging an INFO-level message +*///:~ diff --git a/logging/LogToFile.java b/logging/LogToFile.java index 5bdafc3d..75079d6e 100644 --- a/logging/LogToFile.java +++ b/logging/LogToFile.java @@ -1,12 +1,16 @@ //: logging/LogToFile.java -// {Clean: LogToFile.xml,LogToFile.xml.lck} import java.util.logging.*; public class LogToFile { private static Logger logger = Logger.getLogger("LogToFile"); - public static void main(String[] args) throws Exception { - logger.addHandler(new FileHandler("LogToFile.xml")); + public static void + main(String[] args) throws Exception { + logger.addHandler( + new FileHandler("LogToFile.xml")); logger.info("A message logged to the file"); } -} ///:~ +} /* Output: +May 14, 2015 3:29:53 PM LogToFile main +INFO: A message logged to the file +*///:~ diff --git a/logging/LogToFile2.java b/logging/LogToFile2.java index 1fef163a..8ff8567b 100644 --- a/logging/LogToFile2.java +++ b/logging/LogToFile2.java @@ -1,14 +1,18 @@ //: logging/LogToFile2.java -// {Clean: LogToFile2.txt,LogToFile2.txt.lck} import java.util.logging.*; public class LogToFile2 { private static Logger logger = Logger.getLogger("LogToFile2"); - public static void main(String[] args) throws Exception { - FileHandler logFile= new FileHandler("LogToFile2.txt"); + public static void + main(String[] args) throws Exception { + FileHandler logFile = + new FileHandler("LogToFile2.txt"); logFile.setFormatter(new SimpleFormatter()); logger.addHandler(logFile); logger.info("A message logged to the file"); } -} ///:~ +} /* Output: +May 14, 2015 3:29:53 PM LogToFile2 main +INFO: A message logged to the file +*///:~ diff --git a/logging/LoggingLevelManipulation.java b/logging/LoggingLevelManipulation.java index 8b5099e5..c5cd1d1e 100644 --- a/logging/LoggingLevelManipulation.java +++ b/logging/LoggingLevelManipulation.java @@ -1,23 +1,21 @@ //: logging/LoggingLevelManipulation.java import java.util.logging.Level; import java.util.logging.Logger; -import java.util.logging.Handler; -import java.util.logging.LogManager; public class LoggingLevelManipulation { private static Logger - lgr = Logger.getLogger("com"), - lgr2 = Logger.getLogger("com.bruceeckel"), - util = Logger.getLogger("com.bruceeckel.util"), - test = Logger.getLogger("com.bruceeckel.test"), - rand = Logger.getLogger("random"); + lgr = Logger.getLogger("net"), + lgr2 = Logger.getLogger("net.mindview"), + util= Logger.getLogger("net.mindview.util"), + test= Logger.getLogger("net.mindview.test"), + rand = Logger.getLogger("random"); static void printLogMessages(Logger logger) { logger.finest(logger.getName() + " Finest"); logger.finer(logger.getName() + " Finer"); logger.fine(logger.getName() + " Fine"); logger.config(logger.getName() + " Config"); logger.info(logger.getName() + " Info"); - logger.warning(logger.getName() + " Warning"); + logger.warning(logger.getName()+" Warning"); logger.severe(logger.getName() + " Severe"); } static void logMessages() { @@ -29,17 +27,22 @@ public class LoggingLevelManipulation { } static void printLevels() { System.out.println(" -- printing levels -- " - + lgr.getName() + " : " + lgr.getLevel() - + " " + lgr2.getName() + " : " + lgr2.getLevel() - + " " + util.getName() + " : " + util.getLevel() - + " " + test.getName() + " : " + test.getLevel() - + " " + rand.getName() + " : " + rand.getLevel()); + + lgr.getName() + + " : " + lgr.getLevel() + + " " + lgr2.getName() + + " : " + lgr2.getLevel() + + " " + util.getName() + + " : " + util.getLevel() + + " " + test.getName() + + " : " + test.getLevel() + + " " + rand.getName() + + " : " + rand.getLevel()); } public static void main(String[] args) { printLevels(); lgr.setLevel(Level.SEVERE); printLevels(); - System.out.println("com level: SEVERE"); + System.out.println("net level: SEVERE"); logMessages(); util.setLevel(Level.FINEST); test.setLevel(Level.FINEST); @@ -50,7 +53,81 @@ public class LoggingLevelManipulation { logMessages(); lgr.setLevel(Level.FINEST); printLevels(); - System.out.println("com level: FINEST"); + System.out.println("net level: FINEST"); logMessages(); } -} ///:~ +} /* Output: +-- printing levels -- net : null net.mindview : null net.mindview.util : null net.mindview.test : null random : null + -- printing levels -- net : SEVERE net.mindview : null net.mindview.util : null net.mindview.test : null random : null +net level: SEVERE + -- printing levels -- net : SEVERE net.mindview : null net.mindview.util : FINEST net.mindview.test : FINEST random : FINEST +individual loggers set to FINEST + -- printing levels -- net : FINEST net.mindview : null net.mindview.util : FINEST net.mindview.test : FINEST random : FINEST +net level: FINEST +May 14, 2015 4:21:45 PM LoggingLevelManipulation printLogMessages +SEVERE: net Severe +May 14, 2015 4:21:45 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview Severe +May 14, 2015 4:21:45 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview.util Severe +May 14, 2015 4:21:45 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview.test Severe +May 14, 2015 4:21:45 PM LoggingLevelManipulation printLogMessages +INFO: random Info +May 14, 2015 4:21:45 PM LoggingLevelManipulation printLogMessages +WARNING: random Warning +May 14, 2015 4:21:45 PM LoggingLevelManipulation printLogMessages +SEVERE: random Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: net Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +INFO: net.mindview.util Info +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +WARNING: net.mindview.util Warning +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview.util Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +INFO: net.mindview.test Info +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +WARNING: net.mindview.test Warning +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview.test Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +INFO: random Info +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +WARNING: random Warning +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: random Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +INFO: net Info +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +WARNING: net Warning +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: net Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +INFO: net.mindview Info +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +WARNING: net.mindview Warning +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +INFO: net.mindview.util Info +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +WARNING: net.mindview.util Warning +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview.util Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +INFO: net.mindview.test Info +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +WARNING: net.mindview.test Warning +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: net.mindview.test Severe +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +INFO: random Info +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +WARNING: random Warning +May 14, 2015 4:21:46 PM LoggingLevelManipulation printLogMessages +SEVERE: random Severe +*///:~ diff --git a/logging/LoggingLevels.java b/logging/LoggingLevels.java index 25edb735..988c2545 100644 --- a/logging/LoggingLevels.java +++ b/logging/LoggingLevels.java @@ -1,16 +1,14 @@ //: logging/LoggingLevels.java import java.util.logging.Level; import java.util.logging.Logger; -import java.util.logging.Handler; -import java.util.logging.LogManager; public class LoggingLevels { private static Logger - lgr = Logger.getLogger("com"), - lgr2 = Logger.getLogger("com.bruceeckel"), - util = Logger.getLogger("com.bruceeckel.util"), - test = Logger.getLogger("com.bruceeckel.test"), - rand = Logger.getLogger("random"); + lgr = Logger.getLogger("com"), + lgr2 = Logger.getLogger("com.bruceeckel"), + util= Logger.getLogger("com.bruceeckel.util"), + test= Logger.getLogger("com.bruceeckel.test"), + rand = Logger.getLogger("random"); private static void logMessages() { lgr.info("com : info"); lgr2.info("com.bruceeckel : info"); @@ -25,10 +23,31 @@ public class LoggingLevels { util.setLevel(Level.FINEST); test.setLevel(Level.FINEST); rand.setLevel(Level.FINEST); - System.out.println("individual loggers set to FINEST"); + System.out.println( + "individual loggers set to FINEST"); logMessages(); lgr.setLevel(Level.SEVERE); System.out.println("com level: SEVERE"); logMessages(); } -} ///:~ +} /* Output: +com level: SEVERE +individual loggers set to FINEST +com level: SEVERE +May 13, 2015 10:43:36 AM LoggingLevels logMessages +SEVERE: test : severe +May 13, 2015 10:43:36 AM LoggingLevels logMessages +INFO: random : info +May 13, 2015 10:43:36 AM LoggingLevels logMessages +INFO: util : info +May 13, 2015 10:43:36 AM LoggingLevels logMessages +SEVERE: test : severe +May 13, 2015 10:43:36 AM LoggingLevels logMessages +INFO: random : info +May 13, 2015 10:43:36 AM LoggingLevels logMessages +INFO: util : info +May 13, 2015 10:43:36 AM LoggingLevels logMessages +SEVERE: test : severe +May 13, 2015 10:43:36 AM LoggingLevels logMessages +INFO: random : info +*///:~ diff --git a/logging/MultipleHandlers.java b/logging/MultipleHandlers.java index 1f2cba70..96a3b2b6 100644 --- a/logging/MultipleHandlers.java +++ b/logging/MultipleHandlers.java @@ -1,15 +1,21 @@ //: logging/MultipleHandlers.java -// {Clean: MultipleHandlers.xml,MultipleHandlers.xml.lck} import java.util.logging.*; public class MultipleHandlers { private static Logger logger = Logger.getLogger("MultipleHandlers"); - public static void main(String[] args) throws Exception { + public static void + main(String[] args) throws Exception { FileHandler logFile = new FileHandler("MultipleHandlers.xml"); logger.addHandler(logFile); logger.addHandler(new ConsoleHandler()); - logger.warning("Output to multiple handlers"); + logger.warning( + "Output to multiple handlers"); } -} ///:~ +} /* Output: +May 14, 2015 3:29:53 PM MultipleHandlers main +WARNING: Output to multiple handlers +May 14, 2015 3:29:53 PM MultipleHandlers main +WARNING: Output to multiple handlers +*///:~ diff --git a/logging/MultipleHandlers2.java b/logging/MultipleHandlers2.java index fa7e7674..97057fca 100644 --- a/logging/MultipleHandlers2.java +++ b/logging/MultipleHandlers2.java @@ -1,16 +1,20 @@ //: logging/MultipleHandlers2.java -// {Clean: MultipleHandlers2.xml,MultipleHandlers2.xml.lck} import java.util.logging.*; public class MultipleHandlers2 { private static Logger logger = Logger.getLogger("MultipleHandlers2"); - public static void main(String[] args) throws Exception { + public static void + main(String[] args) throws Exception { FileHandler logFile = new FileHandler("MultipleHandlers2.xml"); logger.addHandler(logFile); logger.addHandler(new ConsoleHandler()); logger.setUseParentHandlers(false); - logger.warning("Output to multiple handlers"); + logger.warning( + "Output to multiple handlers"); } -} ///:~ +} /* Output: +May 14, 2015 3:29:53 PM MultipleHandlers2 main +WARNING: Output to multiple handlers +*///:~ diff --git a/logging/PrintableLogRecord.java b/logging/PrintableLogRecord.java index 6d1a61d1..cef3892b 100644 --- a/logging/PrintableLogRecord.java +++ b/logging/PrintableLogRecord.java @@ -1,15 +1,16 @@ //: logging/PrintableLogRecord.java // Override LogRecord toString() -import java.util.ResourceBundle; import java.util.logging.*; -public class PrintableLogRecord extends LogRecord { - public PrintableLogRecord(Level level, String str) { +public class +PrintableLogRecord extends LogRecord { + public + PrintableLogRecord(Level level, String str) { super(level, str); } @Override public String toString() { - String result = "Level<" + getLevel() + ">\n" + String result = "Level<" + getLevel()+ ">\n" + "LoggerName<" + getLoggerName() + ">\n" + "Message<" + getMessage() + ">\n" + "CurrentMillis<" + getMillis() + ">\n" @@ -19,20 +20,39 @@ public class PrintableLogRecord extends LogRecord { result += "\n"; else for(int i = 0; i < objParams.length; i++) - result += " Param # <" + i + " value " + + result += " Param # <" + i + " value "+ objParams[i].toString() + ">\n"; - result += "ResourceBundle<" + getResourceBundle() - + ">\nResourceBundleName<" + getResourceBundleName() - + ">\nSequenceNumber<" + getSequenceNumber() - + ">\nSourceClassName<" + getSourceClassName() - + ">\nSourceMethodName<" + getSourceMethodName() + result += "ResourceBundle<" + + getResourceBundle() + + ">\nResourceBundleName<" + + getResourceBundleName() + + ">\nSequenceNumber<" + + getSequenceNumber() + + ">\nSourceClassName<" + + getSourceClassName() + + ">\nSourceMethodName<" + + getSourceMethodName() + ">\nThread Id<" + getThreadID() + ">\nThrown<" + getThrown() + ">"; return result; } public static void main(String[] args) { - PrintableLogRecord logRecord = new PrintableLogRecord( - Level.FINEST, "Simple Log Record"); + PrintableLogRecord logRecord = + new PrintableLogRecord( + Level.FINEST, "Simple Log Record"); System.out.println(logRecord); } -} ///:~ +} /* Output: +Level +LoggerName +Message +CurrentMillis<1431539016784> +Params +ResourceBundle +ResourceBundleName +SequenceNumber<0> +SourceClassName +SourceMethodName +Thread Id<1> +Thrown +*///:~ diff --git a/logging/SimpleFilter.java b/logging/SimpleFilter.java index 98ba6a90..53d98b5f 100644 --- a/logging/SimpleFilter.java +++ b/logging/SimpleFilter.java @@ -15,11 +15,14 @@ public class SimpleFilter { public static void main(String[] args) { sendLogMessages(); logger.setFilter(new Filter() { - public boolean isLoggable(LogRecord record) { - Object[] params = record.getParameters(); + public boolean + isLoggable(LogRecord record) { + Object[] params = + record.getParameters(); if(params == null) return true; // No parameters - if(record.getParameters()[0] instanceof Duck) + if(record.getParameters()[0] + instanceof Duck) return true; // Only log Ducks return false; } @@ -27,4 +30,13 @@ public class SimpleFilter { logger.info("After setting filter.."); sendLogMessages(); } -} ///:~ +} /* Output: +May 14, 2015 3:29:53 PM SimpleFilter sendLogMessages +WARNING: A duck in the house! +May 14, 2015 3:29:54 PM SimpleFilter sendLogMessages +WARNING: A Wombat at large! +May 14, 2015 3:29:54 PM SimpleFilter main +INFO: After setting filter.. +May 14, 2015 3:29:54 PM SimpleFilter sendLogMessages +WARNING: A duck in the house! +*///:~ diff --git a/logging/SimpleFormatterExample.java b/logging/SimpleFormatterExample.java index b621a7e9..9f0e32f4 100644 --- a/logging/SimpleFormatterExample.java +++ b/logging/SimpleFormatterExample.java @@ -1,7 +1,5 @@ //: logging/SimpleFormatterExample.java -// {CompileTimeError} import java.util.logging.*; -import java.util.*; public class SimpleFormatterExample { private static Logger logger = @@ -16,12 +14,17 @@ public class SimpleFormatterExample { conHdlr.setFormatter(new Formatter() { public String format(LogRecord record) { return record.getLevel() + " : " - + record.getSourceClassName() + " -:- " - + record.getSourceMethodName() + " -:- " + + record.getSourceClassName() + + " -:- " + + record.getSourceMethodName() + + " -:- " + record.getMessage() + "\n"; } }); logger.addHandler(conHdlr); logMessages(); } -} ///:~ +} /* Output: +INFO : SimpleFormatterExample -:- logMessages -:- Line One +INFO : SimpleFormatterExample -:- logMessages -:- Line Two +*///:~ diff --git a/logging/build.xml b/logging/build.xml index 69d6a2a2..17f9ed6b 100644 --- a/logging/build.xml +++ b/logging/build.xml @@ -2,8 +2,9 @@ - + + @@ -18,6 +19,7 @@ + diff --git a/logging/log.prop b/logging/log.prop index 7b4fae70..68e11480 100644 --- a/logging/log.prop +++ b/logging/log.prop @@ -25,9 +25,9 @@ java.util.logging.ConsoleHandler.level = FINEST java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # Set Logger Levels # -com.level=SEVERE -com.bruceeckel.level = FINEST -com.bruceeckel.util.level = INFO -com.bruceeckel.test.level = FINER +net.level=SEVERE +net.mindview.level = FINEST +net.mindview.util.level = INFO +net.mindview.test.level = FINER random.level= SEVERE ///:~ diff --git a/net/build.xml b/net/build.xml index 5eb50f1c..5a8880f8 100644 --- a/net/build.xml +++ b/net/build.xml @@ -4,10 +4,10 @@ + - diff --git a/net/mindview/util/Hex.java b/net/mindview/util/Hex.java index 3fba2ff5..a1c47b5b 100644 --- a/net/mindview/util/Hex.java +++ b/net/mindview/util/Hex.java @@ -25,7 +25,7 @@ public class Hex { System.out.println( format(BinaryFile.read(new File(args[0])))); } -} /* Output: (Sample) +} /* Output: (First 6 Lines) 00000: CA FE BA BE 00 00 00 31 00 52 0A 00 05 00 22 07 00010: 00 23 0A 00 02 00 22 08 00 24 07 00 25 0A 00 26 00020: 00 27 0A 00 28 00 29 0A 00 02 00 2A 08 00 2B 0A diff --git a/net/mindview/util/New.java b/net/mindview/util/New.java index ea9a78ca..d76928ce 100644 --- a/net/mindview/util/New.java +++ b/net/mindview/util/New.java @@ -16,7 +16,7 @@ public class New { } public static Set set() { return new HashSet<>(); - } + } public static Queue queue() { return new LinkedList<>(); } diff --git a/net/mindview/util/Print.java b/net/mindview/util/Print.java index 8738c864..4e7a74ea 100644 --- a/net/mindview/util/Print.java +++ b/net/mindview/util/Print.java @@ -1,6 +1,6 @@ //: net/mindview/util/Print.java // Print methods that can be used without -// qualifiers, using Java 5 static imports: +// qualifiers, using static imports: package net.mindview.util; import java.io.*; diff --git a/net/mindview/util/ProcessFiles.java b/net/mindview/util/ProcessFiles.java index 72443803..1a73569b 100644 --- a/net/mindview/util/ProcessFiles.java +++ b/net/mindview/util/ProcessFiles.java @@ -1,4 +1,5 @@ //: net/mindview/util/ProcessFiles.java +// {CheckOutputByHand} package net.mindview.util; import java.io.*; diff --git a/net/mindview/util/Range.java b/net/mindview/util/Range.java index 1b1279b3..202d7ad0 100644 --- a/net/mindview/util/Range.java +++ b/net/mindview/util/Range.java @@ -1,6 +1,6 @@ //: net/mindview/util/Range.java // Array creation methods that can be used without -// qualifiers, using Java 5 static imports: +// qualifiers, using static imports: package net.mindview.util; public class Range { diff --git a/net/mindview/util/Sets.java b/net/mindview/util/Sets.java index adcfe6fd..f98379b9 100644 --- a/net/mindview/util/Sets.java +++ b/net/mindview/util/Sets.java @@ -13,7 +13,7 @@ public class Sets { Set result = new HashSet<>(a); result.retainAll(b); return result; - } + } // Subtract subset from superset: public static Set difference(Set superset, Set subset) { diff --git a/net/mindview/util/TypeCounter.java b/net/mindview/util/TypeCounter.java index 410afc3a..f63a8bc2 100644 --- a/net/mindview/util/TypeCounter.java +++ b/net/mindview/util/TypeCounter.java @@ -15,7 +15,7 @@ public class TypeCounter extends HashMap,Integer>{ + type + ", should be type or subtype of " + baseType); countClass(type); - } + } private void countClass(Class type) { Integer quantity = get(type); put(type, quantity == null ? 1 : quantity + 1); diff --git a/network/ChatterServer.java b/network/ChatterServer.java index 38993354..08ec7bf5 100644 --- a/network/ChatterServer.java +++ b/network/ChatterServer.java @@ -3,7 +3,6 @@ // A server that echoes datagrams import java.net.*; import java.io.*; -import java.util.*; public class ChatterServer { static final int INPORT = 1711; diff --git a/network/MultiSimpleServer.java b/network/MultiSimpleServer.java index 2445119b..38c9d6d0 100644 --- a/network/MultiSimpleServer.java +++ b/network/MultiSimpleServer.java @@ -33,7 +33,7 @@ class ServeOneSimple extends Thread { try { while (true) { String str = in.readLine(); - if (str.equals("END")) break; + if(str.equals("END")) break; System.out.println("Echoing: " + str); out.println(str); } diff --git a/network/SimpleClient.java b/network/SimpleClient.java index a8d32826..3803f23f 100644 --- a/network/SimpleClient.java +++ b/network/SimpleClient.java @@ -2,8 +2,7 @@ // Very simple client that just sends // lines to the server and reads lines // that the server sends. -// {ThrowsException} (When run standalone, -// during testing). +// {RunByHand} import java.net.*; import java.io.*; diff --git a/network/SimpleServer.java b/network/SimpleServer.java index 0992ef69..766c8c4d 100644 --- a/network/SimpleServer.java +++ b/network/SimpleServer.java @@ -31,7 +31,7 @@ public class SimpleServer { socket.getOutputStream())),true); while (true) { String str = in.readLine(); - if (str.equals("END")) break; + if(str.equals("END")) break; System.out.println("Echoing: " + str); out.println(str); } diff --git a/network/build.xml b/network/build.xml index 5ed28d2f..fb927805 100644 --- a/network/build.xml +++ b/network/build.xml @@ -4,13 +4,13 @@ + - diff --git a/object/HelloDate.java b/object/HelloDate.java index 9f393c73..30eeaddd 100644 --- a/object/HelloDate.java +++ b/object/HelloDate.java @@ -16,7 +16,7 @@ public class HelloDate { System.out.println("Hello, it's: "); System.out.println(new Date()); } -} /* Output: (55% match) +} /* Output: (55% Match) Hello, it's: Wed Oct 05 14:39:36 MDT 2005 *///:~ diff --git a/object/build.xml b/object/build.xml index 698923bb..debd24b3 100644 --- a/object/build.xml +++ b/object/build.xml @@ -4,6 +4,7 @@ + diff --git a/operators/Assignment.java b/operators/Assignment.java index 7efe5216..65e7a8d1 100644 --- a/operators/Assignment.java +++ b/operators/Assignment.java @@ -4,7 +4,7 @@ import static net.mindview.util.Print.*; class Tank { int level; -} +} public class Assignment { public static void main(String[] args) { diff --git a/operators/BitManipulation.java b/operators/BitManipulation.java index c303b4fc..640ae32c 100644 --- a/operators/BitManipulation.java +++ b/operators/BitManipulation.java @@ -56,7 +56,7 @@ public class BitManipulation { print(s + ", long: " + l + ", binary:\n " + Long.toBinaryString(l)); } -} /* Output: +} /* Output: (First 32 Lines) -1, int: -1, binary: 11111111111111111111111111111111 +1, int: 1, binary: diff --git a/operators/HelloDate.java b/operators/HelloDate.java index 3fe9e8ae..dfbacd3f 100644 --- a/operators/HelloDate.java +++ b/operators/HelloDate.java @@ -7,7 +7,7 @@ public class HelloDate { print("Hello, it's: "); print(new Date()); } -} /* Output: (55% match) +} /* Output: (55% Match) Hello, it's: Wed Oct 05 14:39:05 MDT 2005 *///:~ diff --git a/operators/Literals.java b/operators/Literals.java index aecdabe6..33a0d8a6 100644 --- a/operators/Literals.java +++ b/operators/Literals.java @@ -11,13 +11,22 @@ public class Literals { print("i3: " + Integer.toBinaryString(i3)); char c = 0xffff; // max char hex value print("c: " + Integer.toBinaryString(c)); - byte b = 0x7f; // max byte hex value + byte b = 0x7f; // max byte hex value10101111; print("b: " + Integer.toBinaryString(b)); short s = 0x7fff; // max short hex value print("s: " + Integer.toBinaryString(s)); long n1 = 200L; // long suffix long n2 = 200l; // long suffix (but can be confusing) long n3 = 200; + // Java 7 Binary Literals: + byte blb = (byte)0b00110101; + print("blb: " + Integer.toBinaryString(blb)); + short bls = (short)0b0010111110101111; + print("bls: " + Integer.toBinaryString(bls)); + int bli = 0b00101111101011111010111110101111; + print("bli: " + Integer.toBinaryString(bli)); + long bll = 0b00101111101011111010111110101111; + print("bll: " + Long.toBinaryString(bll)); float f1 = 1; float f2 = 1F; // float suffix float f3 = 1f; // float suffix @@ -32,4 +41,8 @@ i3: 1111111 c: 1111111111111111 b: 1111111 s: 111111111111111 +blb: 110101 +bls: 10111110101111 +bli: 101111101011111010111110101111 +bll: 101111101011111010111110101111 *///:~ diff --git a/operators/build.xml b/operators/build.xml index 18db0b80..5282f175 100644 --- a/operators/build.xml +++ b/operators/build.xml @@ -4,6 +4,7 @@ + diff --git a/patterns/CommandPattern.java b/patterns/CommandPattern.java index 11f050cc..b6e3f9c3 100644 --- a/patterns/CommandPattern.java +++ b/patterns/CommandPattern.java @@ -28,14 +28,13 @@ class IAm implements Command { // A Command object that holds commands: class Macro implements Command { - private ArrayList commands = + private ArrayList commands = new ArrayList<>(); public void add(Command c) { commands.add(c); } @Override public void execute() { - Iterator it = commands.iterator(); - while(it.hasNext()) - it.next().execute(); + for(Command c : commands) + c.execute(); } } diff --git a/patterns/ShapeFactory2.java b/patterns/ShapeFactory2.java index 750a1c1d..6e126069 100644 --- a/patterns/ShapeFactory2.java +++ b/patterns/ShapeFactory2.java @@ -1,6 +1,7 @@ //: patterns/ShapeFactory2.java // Polymorphic factory methods. import java.util.*; +import static net.mindview.util.Print.*; class BadShapeCreation extends Exception { BadShapeCreation(String msg) { @@ -35,12 +36,8 @@ abstract class ShapeFactory { class Circle implements Shape { private Circle() {} - public void draw() { - System.out.println("Circle.draw"); - } - public void erase() { - System.out.println("Circle.erase"); - } + public void draw() { print("Circle.draw"); } + public void erase() { print("Circle.erase"); } static class Factory extends ShapeFactory { @Override protected Shape create() { @@ -55,12 +52,8 @@ class Circle implements Shape { class Square implements Shape { private Square() {} - public void draw() { - System.out.println("Square.draw"); - } - public void erase() { - System.out.println("Square.erase"); - } + public void draw() { print("Square.draw"); } + public void erase() { print("Square.erase"); } static class Factory extends ShapeFactory { @Override protected Shape create() { @@ -79,8 +72,9 @@ public class ShapeFactory2 { "Square", "Circle", "Circle", "Square" }; ArrayList shapes = new ArrayList<>(); try { - for (String shlist1 : shlist) { - shapes.add(ShapeFactory.createShape(shlist1)); + for(String shlist1 : shlist) { + shapes.add( + ShapeFactory.createShape(shlist1)); } } catch(BadShapeCreation e) { e.printStackTrace(); diff --git a/patterns/StateDemo.java b/patterns/StateDemo.java index ac763b7f..87157d12 100644 --- a/patterns/StateDemo.java +++ b/patterns/StateDemo.java @@ -1,5 +1,6 @@ //: patterns/StateDemo.java // Simple demonstration of the State pattern. +import static net.mindview.util.Print.*; interface StateBase { void f(); @@ -10,8 +11,8 @@ interface StateBase { class State implements StateBase { private StateBase implementation; - public State(StateBase imp) { - implementation = imp; + public State(StateBase imp) { + implementation = imp; } @Override public void changeImp(StateBase newImp) { @@ -28,16 +29,16 @@ class State implements StateBase { class Implementation1 implements StateBase { @Override - public void f() { - System.out.println("Implementation1.f()"); + public void f() { + print("Implementation1.f()"); } @Override - public void g() { - System.out.println("Implementation1.g()"); + public void g() { + print("Implementation1.g()"); } @Override - public void h() { - System.out.println("Implementation1.h()"); + public void h() { + print("Implementation1.h()"); } @Override public void changeImp(StateBase newImp) {} @@ -45,16 +46,16 @@ class Implementation1 implements StateBase { class Implementation2 implements StateBase { @Override - public void f() { - System.out.println("Implementation2.f()"); + public void f() { + print("Implementation2.f()"); } @Override - public void g() { - System.out.println("Implementation2.g()"); + public void g() { + print("Implementation2.g()"); } @Override - public void h() { - System.out.println("Implementation2.h()"); + public void h() { + print("Implementation2.h()"); } @Override public void changeImp(StateBase newImp) {} @@ -67,7 +68,7 @@ public class StateDemo { b.h(); } public static void main(String args[]) { - StateBase b = + StateBase b = new State(new Implementation1()); test(b); b.changeImp(new Implementation2()); diff --git a/patterns/build.xml b/patterns/build.xml index 7caafa83..1c408c6c 100644 --- a/patterns/build.xml +++ b/patterns/build.xml @@ -4,6 +4,7 @@ + diff --git a/patterns/doubledispatch/DDAluminum.java b/patterns/doubledispatch/DDAluminum.java index cfd13172..af0c0a37 100644 --- a/patterns/doubledispatch/DDAluminum.java +++ b/patterns/doubledispatch/DDAluminum.java @@ -8,8 +8,8 @@ public class DDAluminum extends Aluminum public DDAluminum(double wt) { super(wt); } @Override public boolean addToBin(TypedBin[] tb) { - for (TypedBin tb1 : tb) { - if (tb1.add(this)) { + for(TypedBin tb1 : tb) { + if(tb1.add(this)) { return true; } } diff --git a/patterns/doubledispatch/DDCardboard.java b/patterns/doubledispatch/DDCardboard.java index 8d38845a..c155569c 100644 --- a/patterns/doubledispatch/DDCardboard.java +++ b/patterns/doubledispatch/DDCardboard.java @@ -8,8 +8,8 @@ public class DDCardboard extends Cardboard public DDCardboard(double wt) { super(wt); } @Override public boolean addToBin(TypedBin[] tb) { - for (TypedBin tb1 : tb) { - if (tb1.add(this)) { + for(TypedBin tb1 : tb) { + if(tb1.add(this)) { return true; } } diff --git a/patterns/doubledispatch/DDGlass.java b/patterns/doubledispatch/DDGlass.java index d2720c30..0f779eb4 100644 --- a/patterns/doubledispatch/DDGlass.java +++ b/patterns/doubledispatch/DDGlass.java @@ -8,8 +8,8 @@ public class DDGlass extends Glass public DDGlass(double wt) { super(wt); } @Override public boolean addToBin(TypedBin[] tb) { - for (TypedBin tb1 : tb) { - if (tb1.add(this)) { + for(TypedBin tb1 : tb) { + if(tb1.add(this)) { return true; } } diff --git a/patterns/doubledispatch/DDPaper.java b/patterns/doubledispatch/DDPaper.java index 9160e593..e798d8dc 100644 --- a/patterns/doubledispatch/DDPaper.java +++ b/patterns/doubledispatch/DDPaper.java @@ -8,8 +8,8 @@ public class DDPaper extends Paper public DDPaper(double wt) { super(wt); } @Override public boolean addToBin(TypedBin[] tb) { - for (TypedBin tb1 : tb) { - if (tb1.add(this)) { + for(TypedBin tb1 : tb) { + if(tb1.add(this)) { return true; } } diff --git a/patterns/doubledispatch/DoubleDispatch.java b/patterns/doubledispatch/DoubleDispatch.java index 68923ec1..c8acc1b8 100644 --- a/patterns/doubledispatch/DoubleDispatch.java +++ b/patterns/doubledispatch/DoubleDispatch.java @@ -63,7 +63,7 @@ public class DoubleDispatch { bins.sortIntoBins(bin); TypedBin[] tb = bins.binSet(); // Perform sumValue for each bin... - for (TypedBin tb1 : tb) { + for(TypedBin tb1 : tb) { Trash.sumValue(tb1.v); } // ... and for the master bin diff --git a/patterns/dynatrash/DynaTrash.java b/patterns/dynatrash/DynaTrash.java index 323cdac1..a041d815 100644 --- a/patterns/dynatrash/DynaTrash.java +++ b/patterns/dynatrash/DynaTrash.java @@ -1,5 +1,5 @@ //: patterns/dynatrash/DynaTrash.java -// Using a HashMap of ArrayLists and RTTI +// Using a Map of Lists and RTTI // to automatically sort trash into // vectors. This solution, despite the // use of RTTI, is extensible. diff --git a/patterns/factory/ShapeFactory1.java b/patterns/factory/ShapeFactory1.java index 5d076ebf..004ffc75 100644 --- a/patterns/factory/ShapeFactory1.java +++ b/patterns/factory/ShapeFactory1.java @@ -2,6 +2,7 @@ // A simple static factory method. package patterns.factory; import java.util.*; +import static net.mindview.util.Print.*; class BadShapeCreation extends Exception { BadShapeCreation(String msg) { @@ -14,34 +15,29 @@ abstract class Shape { public abstract void erase(); static Shape factory(String type) throws BadShapeCreation { - if("Circle".equals(type)) return new Circle(); - if("Square".equals(type)) return new Square(); - throw new BadShapeCreation(type); + switch(type) { + case "Circle": return new Circle(); + case "Square": return new Square(); + default: + throw new BadShapeCreation(type); + } } } class Circle extends Shape { Circle() {} // Friendly constructor @Override - public void draw() { - System.out.println("Circle.draw"); - } + public void draw() { print("Circle.draw"); } @Override - public void erase() { - System.out.println("Circle.erase"); - } + public void erase() { print("Circle.erase"); } } class Square extends Shape { Square() {} // Friendly constructor @Override - public void draw() { - System.out.println("Square.draw"); - } + public void draw() { print("Square.draw"); } @Override - public void erase() { - System.out.println("Square.erase"); - } + public void erase() { print("Square.erase"); } } public class ShapeFactory1 { @@ -50,7 +46,7 @@ public class ShapeFactory1 { "Square", "Circle", "Circle", "Square" }; List shapes = new ArrayList<>(); try { - for (String shlist1 : shlist) { + for(String shlist1 : shlist) { shapes.add(Shape.factory(shlist1)); } } catch(BadShapeCreation e) { diff --git a/patterns/recyclea/RecycleA.java b/patterns/recyclea/RecycleA.java index 4c1a5111..a25b6f89 100644 --- a/patterns/recyclea/RecycleA.java +++ b/patterns/recyclea/RecycleA.java @@ -2,7 +2,6 @@ // Recycling with RTTI. package patterns.recyclea; import java.util.*; -import java.io.*; abstract class Trash { private double weight; @@ -14,8 +13,6 @@ abstract class Trash { Iterator e = bin.iterator(); double val = 0.0f; while(e.hasNext()) { - // One kind of RTTI: - // A dynamically-checked cast Trash t = e.next(); // Polymorphism in action: val += t.weight() * t.value(); diff --git a/patterns/recycleap/RecycleAP.java b/patterns/recycleap/RecycleAP.java index 084118c8..5726f4e6 100644 --- a/patterns/recycleap/RecycleAP.java +++ b/patterns/recycleap/RecycleAP.java @@ -1,4 +1,4 @@ -//: patterns/recycleap/RecycleAP.java +//: patterns/recycleap/RecycleAP.java // Recycling with RTTI and Prototypes. package patterns.recycleap; import patterns.trash.*; @@ -6,17 +6,17 @@ import java.util.*; public class RecycleAP { public static void main(String[] args) { - ArrayList bin = new ArrayList(); + ArrayList bin = new ArrayList<>(); // Fill up the Trash bin: ParseTrash.fillBin("Trash.dat", bin); - ArrayList - glassBin = new ArrayList(), - paperBin = new ArrayList(), - alBin = new ArrayList(); - Iterator sorter = bin.iterator(); + ArrayList + glassBin = new ArrayList<>(), + paperBin = new ArrayList<>(), + alBin = new ArrayList<>(); + Iterator sorter = bin.iterator(); // Sort the Trash: while(sorter.hasNext()) { - Object t = sorter.next(); + Trash t = sorter.next(); // RTTI to show class membership: if(t instanceof Aluminum) alBin.add(t); diff --git a/patterns/recycleb/RecycleB.java b/patterns/recycleb/RecycleB.java index b98c6c32..c64ee386 100644 --- a/patterns/recycleb/RecycleB.java +++ b/patterns/recycleb/RecycleB.java @@ -5,12 +5,12 @@ import patterns.trash.*; import java.util.*; // A vector that admits only the right type: -class Tbin extends ArrayList { +class Tbin extends ArrayList { Class binType; - Tbin(Class binType) { - this.binType = binType; + Tbin() { + this.binType = binType; } - boolean grab(Trash t) { + boolean grab(T t) { // Comparing class types: if(t.getClass().equals(binType)) { add(t); @@ -21,6 +21,7 @@ class Tbin extends ArrayList { } class TbinList extends ArrayList { //(*1*) + @SuppressWarnings("unchecked") boolean sort(Trash t) { Iterator e = iterator(); while(e.hasNext()) { @@ -38,29 +39,24 @@ class TbinList extends ArrayList { //(*1*) } public class RecycleB { - static Tbin bin = new Tbin(Trash.class); + static Tbin bin = new Tbin<>(); + @SuppressWarnings("unchecked") public static void main(String[] args) { // Fill up the Trash bin: ParseTrash.fillBin("Trash.dat", bin); TbinList trashBins = new TbinList(); - trashBins.add( - new Tbin(Aluminum.class)); - trashBins.add( - new Tbin(Paper.class)); - trashBins.add( - new Tbin(Glass.class)); + trashBins.add(new Tbin()); + trashBins.add(new Tbin()); + trashBins.add(new Tbin()); // add one line here: (*3*) - trashBins.add( - new Tbin(Cardboard.class)); + trashBins.add(new Tbin()); trashBins.sortBin(bin); // (*4*) - Iterator e = trashBins.iterator(); - while(e.hasNext()) { - Tbin b = (Tbin)e.next(); - Trash.sumValue(b); - } + Iterator e = trashBins.iterator(); + while(e.hasNext()) + Trash.sumValue(e.next()); Trash.sumValue(bin); } } ///:~ diff --git a/patterns/state/StateMachineDemo.java b/patterns/state/StateMachineDemo.java index 332f9b57..da9b44fd 100644 --- a/patterns/state/StateMachineDemo.java +++ b/patterns/state/StateMachineDemo.java @@ -2,7 +2,6 @@ // Demonstrates StateMachine pattern // and Template method. package patterns.state; -import java.util.*; interface State { void run(); @@ -62,7 +61,7 @@ class Washer extends StateMachine { public boolean changeState() { if(i < states.length) { // Change the state by setting the - // surrogate handle to a new object: + // surrogate reference to a new object: currentState = states[i++]; return true; } else diff --git a/patterns/trash/Fillable.java b/patterns/trash/Fillable.java index ffaa8e4a..dd2ae91e 100644 --- a/patterns/trash/Fillable.java +++ b/patterns/trash/Fillable.java @@ -1,4 +1,4 @@ -//: patterns/trash/Fillable.java +//: patterns/trash/Fillable.java // Any object that can be filled with Trash. package patterns.trash; diff --git a/patterns/trash/FillableList.java b/patterns/trash/FillableList.java index cbbd8c7c..a0fbac3a 100644 --- a/patterns/trash/FillableList.java +++ b/patterns/trash/FillableList.java @@ -5,8 +5,10 @@ import java.util.*; public class FillableList implements Fillable { - private ArrayList v; - public FillableList(ArrayList vv) { v = vv; } + private ArrayList v; + public FillableList(ArrayList vv) { + v = vv; + } @Override public void addTrash(Trash t) { v.add(t); } } ///:~ diff --git a/patterns/trash/ParseTrash.java b/patterns/trash/ParseTrash.java index 731c4bc1..6a1f115d 100644 --- a/patterns/trash/ParseTrash.java +++ b/patterns/trash/ParseTrash.java @@ -34,7 +34,7 @@ public class ParseTrash { } // Special case to handle ArrayList: public static void - fillBin(String filename, ArrayList bin) { + fillBin(String filename, ArrayList bin) { fillBin(filename, new FillableList(bin)); } } ///:~ diff --git a/patterns/trash/Trash.java b/patterns/trash/Trash.java index 79ab6e6d..cb5194fd 100644 --- a/patterns/trash/Trash.java +++ b/patterns/trash/Trash.java @@ -15,12 +15,9 @@ public abstract class Trash { Iterator e = bin.iterator(); double val = 0.0f; while(e.hasNext()) { - // One kind of RTTI: - // A dynamically-checked cast Trash t = e.next(); val += t.weight() * t.value(); - System.out.println( - "weight of " + + System.out.println("weight of " + // Using RTTI to get type // information about the class: t.getClass().getName() + @@ -40,17 +37,16 @@ public abstract class Trash { public static Trash factory(Info info) throws PrototypeNotFoundException, CannotCreateTrashException { - for (Class trashType : trashTypes) { + for(Class trashType : trashTypes) { // Somehow determine the new type // to create, and create one: Class tc = trashType; - if (tc.getName().contains(info.id)) { + if(tc.getName().contains(info.id)) { try { // Get the dynamic constructor method // that takes a double argument: - Constructor ctor = - tc.getConstructor( - new Class[] {double.class}); + Constructor ctor = tc.getConstructor( + new Class[] {double.class}); // Call the constructor to create a // new object: return (Trash)ctor.newInstance( diff --git a/patterns/trashvisitor/TrashVisitor.java b/patterns/trashvisitor/TrashVisitor.java index 4dd86ecb..1562d658 100644 --- a/patterns/trashvisitor/TrashVisitor.java +++ b/patterns/trashvisitor/TrashVisitor.java @@ -1,8 +1,9 @@ -//: patterns/trashvisitor/TrashVisitor.java +//: patterns/trashvisitor/TrashVisitor.java // The "visitor" pattern. package patterns.trashvisitor; import patterns.trash.*; import java.util.*; +import static net.mindview.util.Print.*; // Specific group of algorithms packaged // in each implementation of Visitor: @@ -14,33 +15,29 @@ class PriceVisitor implements Visitor { @Override public void visit(VAluminum al) { double v = al.weight() * al.value(); - System.out.println( - "value of Aluminum= " + v); + print("value of Aluminum= " + v); alSum += v; } @Override public void visit(VPaper p) { double v = p.weight() * p.value(); - System.out.println( - "value of Paper= " + v); + print("value of Paper= " + v); pSum += v; } @Override public void visit(VGlass g) { double v = g.weight() * g.value(); - System.out.println( - "value of Glass= " + v); + print("value of Glass= " + v); gSum += v; } @Override public void visit(VCardboard c) { double v = c.weight() * c.value(); - System.out.println( - "value of Cardboard = " + v); + print("value of Cardboard = " + v); cSum += v; } void total() { - System.out.println( + print( "Total Aluminum: $" + alSum + "\n" + "Total Paper: $" + pSum + "\n" + "Total Glass: $" + gSum + "\n" + @@ -56,36 +53,28 @@ class WeightVisitor implements Visitor { @Override public void visit(VAluminum al) { alSum += al.weight(); - System.out.println("weight of Aluminum = " - + al.weight()); + print("Aluminum weight = " + al.weight()); } @Override public void visit(VPaper p) { pSum += p.weight(); - System.out.println("weight of Paper = " - + p.weight()); + print("Paper weight = " + p.weight()); } @Override public void visit(VGlass g) { gSum += g.weight(); - System.out.println("weight of Glass = " - + g.weight()); + print("Glass weight = " + g.weight()); } @Override public void visit(VCardboard c) { cSum += c.weight(); - System.out.println("weight of Cardboard = " - + c.weight()); + print("Cardboard weight = " + c.weight()); } void total() { - System.out.println("Total weight Aluminum:" - + alSum); - System.out.println("Total weight Paper:" - + pSum); - System.out.println("Total weight Glass:" - + gSum); - System.out.println("Total weight Cardboard:" - + cSum); + print("Total weight Aluminum:" + alSum); + print("Total weight Paper:" + pSum); + print("Total weight Glass:" + gSum); + print("Total weight Cardboard:" + cSum); } } diff --git a/patterns/visitor/BeeAndFlowers.java b/patterns/visitor/BeeAndFlowers.java index 40983ba6..4aa8c53a 100644 --- a/patterns/visitor/BeeAndFlowers.java +++ b/patterns/visitor/BeeAndFlowers.java @@ -80,8 +80,6 @@ public class BeeAndFlowers { List flowers = new ArrayList<>(); for(int i = 0; i < 10; i++) flowers.add(FlowerFactory.newFlower()); - // It's almost as if I had added a function - // to produce a Flower string representation: StringVal sval = new StringVal(); Iterator it = flowers.iterator(); while(it.hasNext()) { diff --git a/polymorphism/PolyConstructors.java b/polymorphism/PolyConstructors.java index 76238cf9..f0f36c3d 100644 --- a/polymorphism/PolyConstructors.java +++ b/polymorphism/PolyConstructors.java @@ -10,7 +10,7 @@ class Glyph { draw(); print("Glyph() after draw()"); } -} +} class RoundGlyph extends Glyph { private int radius = 1; @@ -22,7 +22,7 @@ class RoundGlyph extends Glyph { void draw() { print("RoundGlyph.draw(), radius = " + radius); } -} +} public class PolyConstructors { public static void main(String[] args) { diff --git a/polymorphism/RTTI.java b/polymorphism/RTTI.java index 798ef8db..d5602201 100644 --- a/polymorphism/RTTI.java +++ b/polymorphism/RTTI.java @@ -15,7 +15,7 @@ class MoreUseful extends Useful { public void u() {} public void v() {} public void w() {} -} +} public class RTTI { public static void main(String[] args) { diff --git a/polymorphism/build.xml b/polymorphism/build.xml index 76685bc9..31699aad 100644 --- a/polymorphism/build.xml +++ b/polymorphism/build.xml @@ -4,6 +4,7 @@ + diff --git a/polymorphism/music3/Music3.java b/polymorphism/music3/Music3.java index bcc784ea..ffb439ba 100644 --- a/polymorphism/music3/Music3.java +++ b/polymorphism/music3/Music3.java @@ -17,7 +17,7 @@ class Wind extends Instrument { String what() { return "Wind"; } @Override void adjust() { print("Adjusting Wind"); } -} +} class Percussion extends Instrument { @Override @@ -49,7 +49,7 @@ class Woodwind extends Wind { void play(Note n) { print("Woodwind.play() " + n); } @Override String what() { return "Woodwind"; } -} +} public class Music3 { // Doesn't care about type, so new types @@ -61,7 +61,7 @@ public class Music3 { public static void tuneAll(Instrument[] e) { for(Instrument i : e) tune(i); - } + } public static void main(String[] args) { // Upcasting during addition to the array: Instrument[] orchestra = { diff --git a/references/AddingClone.java b/references/AddingClone.java index 3e683ee4..f4105a42 100644 --- a/references/AddingClone.java +++ b/references/AddingClone.java @@ -8,7 +8,9 @@ class Int2 implements Cloneable { public Int2(int ii) { i = ii; } public void increment() { i++; } @Override - public String toString() { return Integer.toString(i); } + public String toString() { + return Integer.toString(i); + } @Override public Object clone() { Object o = null; @@ -33,23 +35,30 @@ public class AddingClone { Int2 x = new Int2(10); Int2 x2 = (Int2)x.clone(); x2.increment(); - System.out.println("x = " + x + ", x2 = " + x2); + System.out.println( + "x = " + x + ", x2 = " + x2); // Anything inherited is also cloneable: Int3 x3 = new Int3(7); x3 = (Int3)x3.clone(); - ArrayList v = new ArrayList(); + ArrayList v = new ArrayList<>(); for(int i = 0; i < 10; i++ ) v.add(new Int2(i)); System.out.println("v: " + v); - ArrayList v2 = (ArrayList)v.clone(); + ArrayList v2 = + (ArrayList)v.clone(); // Now clone each element: for(int i = 0; i < v.size(); i++) - v2.set(i, ((Int2)v2.get(i)).clone()); + v2.set(i, (Int2)v2.get(i).clone()); // Increment all v2's elements: - for(Iterator e = v2.iterator(); e.hasNext(); ) - ((Int2)e.next()).increment(); + for(Int2 i2 : v2) + i2.increment(); System.out.println("v2: " + v2); // See if it changed v's elements: System.out.println("v: " + v); } -} ///:~ +} /* Output: +x = 10, x2 = 11 +v: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +v2: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +v: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +*///:~ diff --git a/references/Alias1.java b/references/Alias1.java index d1e4998a..a9457746 100644 --- a/references/Alias1.java +++ b/references/Alias1.java @@ -14,4 +14,10 @@ public class Alias1 { System.out.println("x: " + x.i); System.out.println("y: " + y.i); } -} ///:~ +} /* Output: +x: 7 +y: 7 +Incrementing x +x: 8 +y: 8 +*///:~ diff --git a/references/Alias2.java b/references/Alias2.java index b0ee0778..efe2b964 100644 --- a/references/Alias2.java +++ b/references/Alias2.java @@ -12,4 +12,8 @@ public class Alias2 { f(x); System.out.println("x: " + x.i); } -} ///:~ +} /* Output: +x: 7 +Calling f(x) +x: 8 +*///:~ diff --git a/references/CheckCloneable.java b/references/CheckCloneable.java index e0f2a890..399fe588 100644 --- a/references/CheckCloneable.java +++ b/references/CheckCloneable.java @@ -1,36 +1,37 @@ //: references/CheckCloneable.java -// Checking to see if a reference can be cloned. +// Check to see if a reference can be cloned. -// Can't clone this because it doesn't override clone(): +// Can't clone this -- doesn't override clone(): class Ordinary {} -// Overrides clone, but doesn't implement Cloneable: +// Overrides clone, doesn't implement Cloneable: class WrongClone extends Ordinary { - @Override - public Object clone() throws CloneNotSupportedException { + @Override public Object clone() + throws CloneNotSupportedException { return super.clone(); // Throws exception } } // Does all the right things for cloning: -class IsCloneable extends Ordinary implements Cloneable { - @Override - public Object clone() throws CloneNotSupportedException { +class IsCloneable extends Ordinary +implements Cloneable { + @Override public Object clone() + throws CloneNotSupportedException { return super.clone(); } } // Turn off cloning by throwing the exception: class NoMore extends IsCloneable { - @Override - public Object clone() throws CloneNotSupportedException { + @Override public Object clone() + throws CloneNotSupportedException { throw new CloneNotSupportedException(); } } class TryMore extends NoMore { - @Override - public Object clone() throws CloneNotSupportedException { + @Override public Object clone() + throws CloneNotSupportedException { // Calls NoMore.clone(), throws exception: return super.clone(); } @@ -38,8 +39,8 @@ class TryMore extends NoMore { class BackOn extends NoMore { private BackOn duplicate(BackOn b) { - // Somehow make a copy of b and return that copy. - // This is a dummy copy, just to make the point: + // Somehow make a copy of b and return that + // copy. A dummy copy, just to make a point: return new BackOn(); } @Override @@ -49,24 +50,27 @@ class BackOn extends NoMore { } } -// You can't inherit from this, so you can't override -// the clone method as you can in BackOn: +// You can't inherit from this, so you can't +// override clone() as you can in BackOn: final class ReallyNoMore extends NoMore {} public class CheckCloneable { - public static Ordinary tryToClone(Ordinary ord) { + public static + Ordinary tryToClone(Ordinary ord) { String id = ord.getClass().getName(); System.out.println("Attempting " + id); Ordinary x = null; if(ord instanceof Cloneable) { try { - x = (Ordinary)((IsCloneable)ord).clone(); + x= (Ordinary)((IsCloneable)ord).clone(); System.out.println("Cloned " + id); } catch(CloneNotSupportedException e) { - System.err.println("Could not clone " + id); + System.err.println( + "Could not clone " + id); } } else { - System.out.println("Doesn't implement Cloneable"); + System.out.println( + "Doesn't implement Cloneable"); } return x; } @@ -81,11 +85,26 @@ public class CheckCloneable { new ReallyNoMore(), }; Ordinary x = new Ordinary(); - // This won't compile; clone() is protected in Object: + // This won't compile; + // clone() is protected in Object: //! x = (Ordinary)x.clone(); - // Checks first to see if a class implements Cloneable: - for (Ordinary ord1 : ord) { + // Checks first to see if a class + // implements Cloneable: + for(Ordinary ord1 : ord) { tryToClone(ord1); } } -} ///:~ +} /* Output: +Attempting IsCloneable +Cloned IsCloneable +Attempting WrongClone +Doesn't implement Cloneable +Attempting NoMore +Could not clone NoMore +Attempting TryMore +Could not clone TryMore +Attempting BackOn +Cloned BackOn +Attempting ReallyNoMore +Could not clone ReallyNoMore +*///:~ diff --git a/references/Cloning.java b/references/Cloning.java index 582208cd..65604e39 100644 --- a/references/Cloning.java +++ b/references/Cloning.java @@ -8,22 +8,26 @@ class Int { public Int(int ii) { i = ii; } public void increment() { i++; } @Override - public String toString() { return Integer.toString(i); } + public String toString() { + return Integer.toString(i); + } } public class Cloning { - @SuppressWarnings("unchecked") public static void main(String[] args) { - ArrayList v = new ArrayList(); + ArrayList v = new ArrayList<>(); for(int i = 0; i < 10; i++ ) - v.add(new Int(i)); + v.add(new Int(i)); System.out.println("v: " + v); - ArrayList v2 = (ArrayList)v.clone(); + @SuppressWarnings("unchecked") + ArrayList v2 = (ArrayList)v.clone(); // Increment all v2's elements: - for(Iterator e = v2.iterator(); - e.hasNext(); ) - ((Int)e.next()).increment(); + for(Int e : v2) + e.increment(); // See if it changed v's elements: System.out.println("v: " + v); } -} ///:~ +} /* Output: +v: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +v: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +*///:~ diff --git a/references/Compete.java b/references/Compete.java index 7c3af4d2..a4d5d3b3 100644 --- a/references/Compete.java +++ b/references/Compete.java @@ -36,8 +36,9 @@ class Thing4 implements Cloneable { } public class Compete { - public static final int SIZE = 25000; - public static void main(String[] args) throws Exception { + public static final int SIZE = 100000; + public static void + main(String[] args) throws Exception { Thing2[] a = new Thing2[SIZE]; for(int i = 0; i < a.length; i++) a[i] = new Thing2(); @@ -45,19 +46,24 @@ public class Compete { for(int i = 0; i < b.length; i++) b[i] = new Thing4(); long t1 = System.currentTimeMillis(); - ByteArrayOutputStream buf= new ByteArrayOutputStream(); - ObjectOutputStream o = new ObjectOutputStream(buf); - for (Thing2 a1 : a) { + ByteArrayOutputStream buf = + new ByteArrayOutputStream(); + ObjectOutputStream o = + new ObjectOutputStream(buf); + for(Thing2 a1 : a) { o.writeObject(a1); } // Now get copies: - ObjectInputStream in = new ObjectInputStream( - new ByteArrayInputStream(buf.toByteArray())); + ObjectInputStream in = + new ObjectInputStream( + new ByteArrayInputStream( + buf.toByteArray())); Thing2[] c = new Thing2[SIZE]; for(int i = 0; i < c.length; i++) c[i] = (Thing2)in.readObject(); long t2 = System.currentTimeMillis(); - System.out.println("Duplication via serialization: " + + System.out.println( + "Duplication via serialization: " + (t2 - t1) + " Milliseconds"); // Now try cloning: t1 = System.currentTimeMillis(); @@ -65,7 +71,11 @@ public class Compete { for(int i = 0; i < d.length; i++) d[i] = (Thing4)b[i].clone(); t2 = System.currentTimeMillis(); - System.out.println("Duplication via cloning: " + + System.out.println( + "Duplication via cloning: " + (t2 - t1) + " Milliseconds"); } -} ///:~ +} /* Output: +Duplication via serialization: 250 Milliseconds +Duplication via cloning: 15 Milliseconds +*///:~ diff --git a/references/CopyConstructor.java b/references/CopyConstructor.java index e48192fd..1a32220c 100644 --- a/references/CopyConstructor.java +++ b/references/CopyConstructor.java @@ -1,5 +1,5 @@ //: references/CopyConstructor.java -// A constructor for copying an object of the same +// A constructor to copy an object of the same // type, as an attempt to create a local copy. import java.lang.reflect.*; @@ -10,7 +10,8 @@ class FruitQualities { private int ripeness; private int smell; // etc. - public FruitQualities() { // Default constructor + // Default constructor: + public FruitQualities() { // Do something meaningful... } // Other constructors: @@ -36,7 +37,7 @@ class Fruit { private FruitQualities fq; private int seeds; private Seed[] s; - public Fruit(FruitQualities q, int seedCount) { + public Fruit(FruitQualities q, int seedCount){ fq = q; seeds = seedCount; s = new Seed[seeds]; @@ -57,7 +58,7 @@ class Fruit { } // To allow derived constructors (or other // methods) to put in different qualities: - protected void addQualities(FruitQualities q) { + protected void addQualities(FruitQualities q){ fq = q; } protected FruitQualities getQualities() { @@ -70,14 +71,15 @@ class Tomato extends Fruit { super(new FruitQualities(), 100); } public Tomato(Tomato t) { // Copy-constructor - super(t); // Upcast for base copy-constructor + super(t); // Upcast to base copy-constructor // Other copy-construction activities... } } class ZebraQualities extends FruitQualities { private int stripedness; - public ZebraQualities() { // Default constructor + // Default constructor: + public ZebraQualities() { super(); // do something meaningful... } @@ -97,7 +99,8 @@ class GreenZebra extends Tomato { addQualities(new ZebraQualities()); } public void evaluate() { - ZebraQualities zq = (ZebraQualities)getQualities(); + ZebraQualities zq = + (ZebraQualities)getQualities(); // Do something with the qualities // ... } @@ -120,8 +123,10 @@ public class CopyConstructor { try { Class c = t.getClass(); // Use the "copy constructor": - Constructor ct = c.getConstructor(new Class[] { c }); - Object obj = ct.newInstance(new Object[] { t }); + Constructor ct = + c.getConstructor(new Class[] { c }); + Object obj = + ct.newInstance(new Object[] { t }); System.out.println("In ripen2, t is a " + obj.getClass().getName()); } catch(NoSuchMethodException | @@ -137,8 +142,10 @@ public class CopyConstructor { public static void slice2(Fruit f) { try { Class c = f.getClass(); - Constructor ct = c.getConstructor(new Class[] { c }); - Object obj = ct.newInstance(new Object[] { f }); + Constructor ct = + c.getConstructor(new Class[] { c }); + Object obj = + ct.newInstance(new Object[] { f }); System.out.println("In slice2, f is a " + obj.getClass().getName()); } catch(NoSuchMethodException | @@ -163,4 +170,13 @@ public class CopyConstructor { slice2(g); // OK g.evaluate(); } -} ///:~ +} /* Output: +In ripen, t is a Tomato +In slice, f is a Fruit +In ripen2, t is a Tomato +In slice2, f is a Tomato +In ripen, t is a Tomato +In slice, f is a Fruit +In ripen2, t is a GreenZebra +In slice2, f is a GreenZebra +*///:~ diff --git a/references/DeepCopy.java b/references/DeepCopy.java index a2c19422..5b144d14 100644 --- a/references/DeepCopy.java +++ b/references/DeepCopy.java @@ -1,12 +1,14 @@ //: references/DeepCopy.java // Cloning a composed object. -// {Depends: junit.jar} +// (Install libraries from www.junit.org) import org.junit.Test; -import org.junit.Assert.*; +import static org.junit.Assert.assertEquals; class DepthReading implements Cloneable { private double depth; - public DepthReading(double depth) { this.depth = depth; } + public DepthReading(double depth) { + this.depth = depth; + } @Override public Object clone() { Object o = null; @@ -18,15 +20,19 @@ class DepthReading implements Cloneable { return o; } public double getDepth() { return depth; } - public void setDepth(double depth){ this.depth = depth; } + public void setDepth(double depth){ + this.depth = depth; + } @Override - public String toString() { return String.valueOf(depth);} + public String toString() { + return String.valueOf(depth); + } } class TemperatureReading implements Cloneable { private long time; private double temperature; - public TemperatureReading(double temperature) { + public TemperatureReading(double temperature){ time = System.currentTimeMillis(); this.temperature = temperature; } @@ -40,9 +46,11 @@ class TemperatureReading implements Cloneable { } return o; } - public double getTemperature() { return temperature; } - public void setTemperature(double temperature) { - this.temperature = temperature; + public double getTemperature() { + return temperature; + } + public void setTemperature(double temp) { + this.temperature = temp; } @Override public String toString() { @@ -53,7 +61,8 @@ class TemperatureReading implements Cloneable { class OceanReading implements Cloneable { private DepthReading depth; private TemperatureReading temperature; - public OceanReading(double tdata, double ddata) { + public + OceanReading(double tdata, double ddata) { temperature = new TemperatureReading(tdata); depth = new DepthReading(ddata); } @@ -91,21 +100,25 @@ class OceanReading implements Cloneable { public class DeepCopy { @Test public void testClone() { - OceanReading reading = new OceanReading(33.9, 100.5); + OceanReading reading = + new OceanReading(33.9, 100.5); // Now clone it: - OceanReading clone = (OceanReading)reading.clone(); - TemperatureReading tr = clone.getTemperatureReading(); + OceanReading clone = + (OceanReading)reading.clone(); + TemperatureReading tr = + clone.getTemperatureReading(); tr.setTemperature(tr.getTemperature() + 1); clone.setTemperatureReading(tr); DepthReading dr = clone.getDepthReading(); dr.setDepth(dr.getDepth() + 1); clone.setDepthReading(dr); - org.junit.Assert.assertEquals(reading.toString(), + assertEquals(reading.toString(), "temperature: 33.9, depth: 100.5"); - org.junit.Assert.assertEquals(clone.toString(), + assertEquals(clone.toString(), "temperature: 34.9, depth: 101.5"); } public static void main(String[] args) { - org.junit.runner.JUnitCore.runClasses(DeepCopy.class); + org.junit.runner.JUnitCore.runClasses( + DeepCopy.class); } } ///:~ diff --git a/references/HorrorFlick.java b/references/HorrorFlick.java index f7a450df..00b8eae0 100644 --- a/references/HorrorFlick.java +++ b/references/HorrorFlick.java @@ -1,19 +1,23 @@ //: references/HorrorFlick.java -// You can insert Cloneability at any level of inheritance. -import java.util.*; +// You can insert Cloneability +// at any level of inheritance. class Person {} + class Hero extends Person {} -class Scientist extends Person implements Cloneable { + +class Scientist extends Person +implements Cloneable { public Object clone() { try { return super.clone(); } catch(CloneNotSupportedException e) { - // This should never happen: It's Cloneable already! + // Should never happen; it's Cloneable: throw new RuntimeException(e); } } } + class MadScientist extends Scientist {} public class HorrorFlick { diff --git a/references/Immutable1.java b/references/Immutable1.java index e8d0b1d8..a32cc030 100644 --- a/references/Immutable1.java +++ b/references/Immutable1.java @@ -1,5 +1,5 @@ //: references/Immutable1.java -// Objects that cannot be modified are immune to aliasing. +// Immutable objects are immune to aliasing. public class Immutable1 { private int data; @@ -22,4 +22,9 @@ public class Immutable1 { f(x); System.out.println("x = " + x.read()); } -} ///:~ +} /* Output: +x = 47 +i1 = 47 +quad = 188 +x = 47 +*///:~ diff --git a/references/Immutable2.java b/references/Immutable2.java index 1820f1db..26e66d7a 100644 --- a/references/Immutable2.java +++ b/references/Immutable2.java @@ -1,9 +1,11 @@ //: references/Immutable2.java -// A companion class to modify immutable objects. +// A companion class to modify immutable objects class Mutable { private int data; - public Mutable(int initVal) { data = initVal; } + public Mutable(int initVal) { + data = initVal; + } public Mutable add(int x) { data += x; return this; @@ -19,9 +21,13 @@ class Mutable { public class Immutable2 { private int data; - public Immutable2(int initVal) { data = initVal; } + public Immutable2(int initVal) { + data = initVal; + } public int read() { return data; } - public boolean nonzero() { return data != 0; } + public boolean nonzero() { + return data != 0; + } public Immutable2 add(int x) { return new Immutable2(data + x); } @@ -31,7 +37,8 @@ public class Immutable2 { public Mutable makeMutable() { return new Mutable(data); } - public static Immutable2 modify1(Immutable2 y) { + public static + Immutable2 modify1(Immutable2 y) { Immutable2 val = y.add(12); val = val.multiply(3); val = val.add(11); @@ -39,7 +46,8 @@ public class Immutable2 { return val; } // This produces the same result: - public static Immutable2 modify2(Immutable2 y) { + public static + Immutable2 modify2(Immutable2 y) { Mutable m = y.makeMutable(); m.add(12).multiply(3).add(11).multiply(2); return m.makeImmutable2(); @@ -52,4 +60,8 @@ public class Immutable2 { System.out.println("r1 = " + r1.read()); System.out.println("r2 = " + r2.read()); } -} ///:~ +} /* Output: +i2 = 47 +r1 = 376 +r2 = 376 +*///:~ diff --git a/references/ImmutableInteger.java b/references/ImmutableInteger.java index 4383b7da..e5cb62a9 100644 --- a/references/ImmutableInteger.java +++ b/references/ImmutableInteger.java @@ -7,6 +7,7 @@ public class ImmutableInteger { List v = new ArrayList<>(); for(int i = 0; i < 10; i++) v.add(new Integer(i)); - // But how do you change the int inside the Integer? + // But how do you change the int + // inside the Integer? } } ///:~ diff --git a/references/ImmutableStrings.java b/references/ImmutableStrings.java index 2eeac760..d72ffa85 100644 --- a/references/ImmutableStrings.java +++ b/references/ImmutableStrings.java @@ -4,14 +4,18 @@ public class ImmutableStrings { public static void main(String[] args) { String foo = "foo"; - String s = "abc" + foo + "def" + Integer.toString(47); + String s = "abc" + foo + "def" + + Integer.toString(47); System.out.println(s); // The "equivalent" using StringBuffer: StringBuffer sb = - new StringBuffer("abc"); // Creates String! + new StringBuffer("abc"); // Creates String sb.append(foo); - sb.append("def"); // Creates String! + sb.append("def"); // Creates String sb.append(Integer.toString(47)); System.out.println(sb); } -} ///:~ +} /* Output: +abcfoodef47 +abcfoodef47 +*///:~ diff --git a/references/LocalCopy.java b/references/LocalCopy.java index 2dd5c8f8..1bdb8cce 100644 --- a/references/LocalCopy.java +++ b/references/LocalCopy.java @@ -1,6 +1,5 @@ //: references/LocalCopy.java // Creating local copies with clone(). -import java.util.*; class MyObject implements Cloneable { private int n; @@ -44,4 +43,11 @@ public class LocalCopy { System.out.println("c == d: " + (c == d) + "\nc = " + c + "\nd = " + d); } -} ///:~ +} /* Output: +a == b: true +a = 12 +b = 12 +c == d: false +c = 47 +d = 48 +*///:~ diff --git a/references/MutableInteger.java b/references/MutableInteger.java index 2e4b2e2c..295ea2b7 100644 --- a/references/MutableInteger.java +++ b/references/MutableInteger.java @@ -9,7 +9,9 @@ class IntValue { public void setValue(int n) { this.n = n; } public void increment() { n++; } @Override - public String toString() { return Integer.toString(n); } + public String toString() { + return Integer.toString(n); + } } public class MutableInteger { @@ -22,4 +24,7 @@ public class MutableInteger { v.get(i).increment(); System.out.println(v); } -} ///:~ +} /* Output: +[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +*///:~ diff --git a/references/PassReferences.java b/references/PassReferences.java index de153d5d..e399244a 100644 --- a/references/PassReferences.java +++ b/references/PassReferences.java @@ -10,4 +10,7 @@ public class PassReferences { System.out.println("p inside main(): " + p); f(p); } -} ///:~ +} /* Output: +p inside main(): PassReferences@19e0bfd +h inside f(): PassReferences@19e0bfd +*///:~ diff --git a/references/Snake.java b/references/Snake.java index ac171a99..f04804c8 100644 --- a/references/Snake.java +++ b/references/Snake.java @@ -39,6 +39,11 @@ public class Snake implements Cloneable { Snake s2 = (Snake)s.clone(); System.out.println("s2 = " + s2); s.increment(); - System.out.println("after s.increment, s2 = " + s2); + System.out.println( + "after s.increment, s2 = " + s2); } -} ///:~ +} /* Output: +s = :a:b:c:d:e +s2 = :a:b:c:d:e +after s.increment, s2 = :a:c:d:e:f +*///:~ diff --git a/references/Stringer.java b/references/Stringer.java index 8b9a261a..a01104f7 100644 --- a/references/Stringer.java +++ b/references/Stringer.java @@ -11,4 +11,8 @@ public class Stringer { System.out.println(qq); // HOWDY System.out.println(q); // howdy } -} ///:~ +} /* Output: +howdy +HOWDY +howdy +*///:~ diff --git a/references/build.xml b/references/build.xml index e6295a68..df98d9ab 100644 --- a/references/build.xml +++ b/references/build.xml @@ -4,6 +4,7 @@ + diff --git a/remote/build.xml b/remote/build.xml index ade93e83..14d6fe16 100644 --- a/remote/build.xml +++ b/remote/build.xml @@ -4,6 +4,7 @@ + diff --git a/remote/ptime/PerfectTime.java b/remote/ptime/PerfectTime.java index 5f20a6a6..50eb05ab 100644 --- a/remote/ptime/PerfectTime.java +++ b/remote/ptime/PerfectTime.java @@ -5,7 +5,6 @@ package remote.ptime; import java.rmi.*; import java.rmi.server.*; -import java.rmi.registry.*; import java.net.*; public class PerfectTime diff --git a/reusing/Bath.java b/reusing/Bath.java index 98e3eb6e..1b04769d 100644 --- a/reusing/Bath.java +++ b/reusing/Bath.java @@ -10,7 +10,7 @@ class Soap { } @Override public String toString() { return s; } -} +} public class Bath { private String // Initializing at point of definition: @@ -25,7 +25,7 @@ public class Bath { s3 = "Joy"; toy = 3.14f; castille = new Soap(); - } + } // Instance initialization: { i = 47; } @Override @@ -40,7 +40,7 @@ public class Bath { "i = " + i + "\n" + "toy = " + toy + "\n" + "castille = " + castille; - } + } public static void main(String[] args) { Bath b = new Bath(); print(b); diff --git a/reusing/Chess.java b/reusing/Chess.java index dc523515..ec42bf90 100644 --- a/reusing/Chess.java +++ b/reusing/Chess.java @@ -13,7 +13,7 @@ class BoardGame extends Game { super(i); print("BoardGame constructor"); } -} +} public class Chess extends BoardGame { Chess() { diff --git a/reusing/Detergent.java b/reusing/Detergent.java index c595b6ed..29ca2460 100644 --- a/reusing/Detergent.java +++ b/reusing/Detergent.java @@ -15,7 +15,7 @@ class Cleanser { x.dilute(); x.apply(); x.scrub(); print(x); } -} +} public class Detergent extends Cleanser { // Change a method: @@ -36,7 +36,7 @@ public class Detergent extends Cleanser { print(x); print("Testing base class:"); Cleanser.main(args); - } + } } /* Output: Cleanser dilute() apply() Detergent.scrub() scrub() foam() Testing base class: diff --git a/reusing/Orc.java b/reusing/Orc.java index a2fe6510..b34ccb84 100644 --- a/reusing/Orc.java +++ b/reusing/Orc.java @@ -10,7 +10,7 @@ class Villain { public String toString() { return "I'm a Villain and my name is " + name; } -} +} public class Orc extends Villain { private int orcNumber; @@ -25,7 +25,7 @@ public class Orc extends Villain { @Override public String toString() { return "Orc " + orcNumber + ": " + super.toString(); - } + } public static void main(String[] args) { Orc orc = new Orc("Limburger", 12); print(orc); diff --git a/reusing/PlaceSetting.java b/reusing/PlaceSetting.java index 4b58f3d9..ee9c6163 100644 --- a/reusing/PlaceSetting.java +++ b/reusing/PlaceSetting.java @@ -13,7 +13,7 @@ class DinnerPlate extends Plate { super(i); print("DinnerPlate constructor"); } -} +} class Utensil { Utensil(int i) { @@ -33,7 +33,7 @@ class Fork extends Utensil { super(i); print("Fork constructor"); } -} +} class Knife extends Utensil { Knife(int i) { @@ -47,7 +47,7 @@ class Custom { Custom(int i) { print("Custom constructor"); } -} +} public class PlaceSetting extends Custom { private Spoon sp; diff --git a/reusing/SprinklerSystem.java b/reusing/SprinklerSystem.java index f9d62799..00021604 100644 --- a/reusing/SprinklerSystem.java +++ b/reusing/SprinklerSystem.java @@ -9,7 +9,7 @@ class WaterSource { } @Override public String toString() { return s; } -} +} public class SprinklerSystem { private String valve1, valve2, valve3, valve4; @@ -25,7 +25,7 @@ public class SprinklerSystem { "valve4 = " + valve4 + "\n" + "i = " + i + " " + "f = " + f + " " + "source = " + source; - } + } public static void main(String[] args) { SprinklerSystem sprinklers = new SprinklerSystem(); System.out.println(sprinklers); diff --git a/reusing/build.xml b/reusing/build.xml index d125b521..dee96edf 100644 --- a/reusing/build.xml +++ b/reusing/build.xml @@ -4,6 +4,7 @@ + diff --git a/run.bat b/run.bat new file mode 100644 index 00000000..625414d7 --- /dev/null +++ b/run.bat @@ -0,0 +1,2 @@ +python ..\Validate.py -p +powershell .\runall.ps1 diff --git a/staticchecking/DogsAndRobots.cpp b/staticchecking/DogsAndRobots.cpp new file mode 100644 index 00000000..4b876ea9 --- /dev/null +++ b/staticchecking/DogsAndRobots.cpp @@ -0,0 +1,26 @@ +//: staticchecking/DogsAndRobots.cpp +#include +using namespace std; + +class Dog { +public: + void talk() { cout << "Arf!" << endl; } + void reproduce() {} +}; + +class Robot { +public: + void talk() { cout << "Click!" << endl; } + void oilChange() {} +}; + +template void speak(T speaker) { + speaker.talk(); +} + +int main() { + Dog d; + Robot r; + speak(d); + speak(r); +} ///:~ diff --git a/staticchecking/DogsAndRobots.py b/staticchecking/DogsAndRobots.py new file mode 100644 index 00000000..ce8eb2a2 --- /dev/null +++ b/staticchecking/DogsAndRobots.py @@ -0,0 +1,19 @@ +#: staticchecking/DogsAndRobots.py + +def speak(anything): + anything.talk() + +class Dog: + def talk(self): print("Arf!") + def reproduce(self): pass + +class Robot: + def talk(self): print("Click!") + def oilChange(self): pass + +a = Dog() +b = Robot() + +speak(a) +speak(b) +#:~ diff --git a/staticchecking/NoBasePetSpeak.py b/staticchecking/NoBasePetSpeak.py new file mode 100644 index 00000000..2ab63aaf --- /dev/null +++ b/staticchecking/NoBasePetSpeak.py @@ -0,0 +1,27 @@ +#: staticchecking/NoBasePetSpeak.py +# Speaking pets without base classes: + +class Cat: + def speak(self): + print("meow!") + +class Dog: + def speak(self): + print("woof!") + +class Bob: + def bow(self): + print("thank you, thank you!") + def speak(self): + print("Welcome to the neighborhood!") + def drive(self): + print("beep, beep!") + +def command(pet): + pet.speak() + +pets = [ Cat(), Dog(), Bob() ] + +for pet in pets: + command(pet) +#:~ diff --git a/staticchecking/PetSpeak.py b/staticchecking/PetSpeak.py new file mode 100644 index 00000000..7a9a4c91 --- /dev/null +++ b/staticchecking/PetSpeak.py @@ -0,0 +1,21 @@ +#: staticchecking/PetSpeak.py +# Speaking pets in Python + +class Pet: + def speak(self): pass + +class Cat(Pet): + def speak(self): + print("meow!") + +class Dog(Pet): + def speak(self): + print("woof!") + +def command(pet): + pet.speak() + +pets = [ Cat(), Dog() ] +for pet in pets: + command(pet) +#:~ diff --git a/staticchecking/build.xml b/staticchecking/build.xml new file mode 100644 index 00000000..4ce49ca9 --- /dev/null +++ b/staticchecking/build.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/staticchecking/dr/DogsAndRobots.java b/staticchecking/dr/DogsAndRobots.java new file mode 100644 index 00000000..43117357 --- /dev/null +++ b/staticchecking/dr/DogsAndRobots.java @@ -0,0 +1,34 @@ +//: staticchecking/dr/DogsAndRobots.java +package staticchecking.dr; + +interface Speaks { void talk(); } + +class Dog implements Speaks { + public void talk() { + System.out.println("Woof!"); + } + public void reproduce() { } +} + +class Robot implements Speaks { + public void talk() { + System.out.println("Click!"); + } + public void oilChange() { } +} + +class Communicate { + public static + void speak(T speaker) { + speaker.talk(); + } +} + +public class DogsAndRobots { + public static void main(String[] args) { + Dog d = new Dog(); + Robot r = new Robot(); + Communicate.speak(d); + Communicate.speak(r); + } +} ///:~ diff --git a/staticchecking/drc/DogAndRobotCollections.java b/staticchecking/drc/DogAndRobotCollections.java new file mode 100644 index 00000000..32911fa7 --- /dev/null +++ b/staticchecking/drc/DogAndRobotCollections.java @@ -0,0 +1,34 @@ +//: staticchecking/drc/DogAndRobotCollections.java +package staticchecking.drc; +import java.util.*; + +class Dog { + public void talk() { + System.out.println("Woof!"); + } + public void reproduce() { } +} + +class Robot { + public void talk() { + System.out.println("Click!"); + } + public void oilChange() { } +} + +public class DogAndRobotCollections { + public static void main(String[] args) { + List dogList = new ArrayList(); + List robotList = new ArrayList(); + for(int i = 0; i < 10; i++) + dogList.add(new Dog()); + // dogList.add(new Robot()); // Compile-time error + for(int i = 0; i < 10; i++) + robotList.add(new Robot()); + // robotList.add(new Dog()); // Compile-time error + for(Dog d : dogList) + d.talk(); // No cast necessary + for(Robot r: robotList) + r.talk(); // No cast necessary + } +} ///:~ diff --git a/staticchecking/latent/Latent.java b/staticchecking/latent/Latent.java new file mode 100644 index 00000000..e1a94247 --- /dev/null +++ b/staticchecking/latent/Latent.java @@ -0,0 +1,51 @@ +//: staticchecking/latent/Latent.java +package staticchecking.latent; +import java.lang.reflect.*; + +class Dog { + public void talk() { + System.out.println("Woof!"); + } + public void reproduce() {} +} + +class Robot { + public void talk() { + System.out.println("Click!"); + } + public void oilChange() {} +} + +class Mime { + public void walkAgainstTheWind() {} + public String toString() { return "Mime"; } +} + +class Communicate { + public static void speak(Object speaker) { + try { + Class spkr = + speaker.getClass(); + Method talk = + spkr.getMethod("talk", (Class[])null); + talk.invoke(speaker, new Object[]{}); + } catch(NoSuchMethodException e) { + System.err.println( + speaker + " cannot talk"); + } catch(IllegalAccessException e) { + System.err.println( + speaker + " IllegalAccessException"); + } catch(InvocationTargetException e) { + System.err.println( + speaker + " InvocationTargetException"); + } + } +} + +public class Latent { + public static void main(String[] args) { + Communicate.speak(new Dog()); + Communicate.speak(new Robot()); + Communicate.speak(new Mime()); + } +} ///:~ diff --git a/staticchecking/petspeak/PetSpeak.java b/staticchecking/petspeak/PetSpeak.java new file mode 100644 index 00000000..1cde5aa5 --- /dev/null +++ b/staticchecking/petspeak/PetSpeak.java @@ -0,0 +1,28 @@ +//: staticchecking/petspeak/PetSpeak.java +// Speaking pets in Java +package staticchecking.petspeak; + +interface Pet { + void speak(); +} + +class Cat implements Pet { + public void speak() { + System.out.println("meow!"); + } +} + +class Dog implements Pet { + public void speak() { + System.out.println("woof!"); + } +} + +public class PetSpeak { + static void command(Pet p) { p.speak(); } + public static void main(String[] args) { + Pet[] pets = { new Cat(), new Dog() }; + for(int i = 0; i < pets.length; i++) + command(pets[i]); + } +} ///:~ diff --git a/strings/InfiniteRecursion.java b/strings/InfiniteRecursion.java index 6803a5be..d2c1c690 100644 --- a/strings/InfiniteRecursion.java +++ b/strings/InfiniteRecursion.java @@ -1,6 +1,7 @@ //: strings/InfiniteRecursion.java // Accidental recursion. // {ThrowsException} +// {ValidateByHand} import java.util.*; public class InfiniteRecursion { diff --git a/strings/TheReplacements.java b/strings/TheReplacements.java index 9da6440c..bf87ca74 100644 --- a/strings/TheReplacements.java +++ b/strings/TheReplacements.java @@ -4,7 +4,7 @@ import net.mindview.util.*; import static net.mindview.util.Print.*; /*! Here's a block of text to use as input to - the regular expression matcher. Note that we'll + the regular expression matcher. Note that we first extract the block of text by looking for the special delimiters, then process the extracted block. !*/ @@ -38,7 +38,7 @@ public class TheReplacements { } } /* Output: Here's a block of text to use as input to -the regular expression matcher. Note that we'll +the regular expression matcher. Note that we first extract the block of text by looking for the special delimiters, then process the extracted block. diff --git a/strings/WhitherStringBuilder.java b/strings/WhitherStringBuilder.java index 50e4e055..2c59a881 100644 --- a/strings/WhitherStringBuilder.java +++ b/strings/WhitherStringBuilder.java @@ -3,14 +3,14 @@ public class WhitherStringBuilder { public String implicit(String[] fields) { String result = ""; - for (String field : fields) { + for(String field : fields) { result += field; } return result; } public String explicit(String[] fields) { StringBuilder result = new StringBuilder(); - for (String field : fields) { + for(String field : fields) { result.append(field); } return result.toString(); diff --git a/strings/build.xml b/strings/build.xml index ba1348a4..2caa02b2 100644 --- a/strings/build.xml +++ b/strings/build.xml @@ -4,6 +4,7 @@ + diff --git a/swt/ShellsAreMainWindows.java b/swt/ShellsAreMainWindows.java index 29bee835..db32d2d8 100644 --- a/swt/ShellsAreMainWindows.java +++ b/swt/ShellsAreMainWindows.java @@ -16,8 +16,8 @@ public class ShellsAreMainWindows { display.dispose(); } static boolean shellsDisposed() { - for (Shell shell : shells) { - if (shell.isDisposed()) { + for(Shell shell : shells) { + if(shell.isDisposed()) { return true; } } diff --git a/swt/build.xml b/swt/build.xml index cbd0e50d..33ba2321 100644 --- a/swt/build.xml +++ b/swt/build.xml @@ -4,6 +4,7 @@ + diff --git a/tools/Examples.py b/tools/Examples.py index 6268c658..067ed5d4 100644 --- a/tools/Examples.py +++ b/tools/Examples.py @@ -60,6 +60,7 @@ def extractExamples(): codeListing.write(listing) codeListing.write("\n") + @CmdLine("x") def clean(): "Remove ExtractedExamples directory" diff --git a/typeinfo/AnonymousImplementation.java b/typeinfo/AnonymousImplementation.java index 6075f25e..41b8ec3c 100644 --- a/typeinfo/AnonymousImplementation.java +++ b/typeinfo/AnonymousImplementation.java @@ -13,7 +13,7 @@ class AnonymousA { private void w() { print("private C.w()"); } }; } -} +} public class AnonymousImplementation { public static void main(String[] args) throws Exception { diff --git a/typeinfo/FamilyVsExactType.java b/typeinfo/FamilyVsExactType.java index 1cbe2e1b..aed9441a 100644 --- a/typeinfo/FamilyVsExactType.java +++ b/typeinfo/FamilyVsExactType.java @@ -4,7 +4,7 @@ package typeinfo; import static net.mindview.util.Print.*; class Base {} -class Derived extends Base {} +class Derived extends Base {} public class FamilyVsExactType { static void test(Object x) { @@ -26,7 +26,7 @@ public class FamilyVsExactType { public static void main(String[] args) { test(new Base()); test(new Derived()); - } + } } /* Output: Testing x of type class typeinfo.Base x instanceof Base true diff --git a/typeinfo/FilledList.java b/typeinfo/FilledList.java index a3c6a115..375b9041 100644 --- a/typeinfo/FilledList.java +++ b/typeinfo/FilledList.java @@ -10,7 +10,7 @@ class CountedInteger { public class FilledList { private Class type; - public FilledList(Class type) { this.type = type; } + public FilledList(Class type) { this.type = type; } public List create(int nElements) { List result = new ArrayList<>(); try { diff --git a/typeinfo/InnerImplementation.java b/typeinfo/InnerImplementation.java index 5054ae23..0c00e481 100644 --- a/typeinfo/InnerImplementation.java +++ b/typeinfo/InnerImplementation.java @@ -12,7 +12,7 @@ class InnerA { private void w() { print("private C.w()"); } } public static A makeA() { return new C(); } -} +} public class InnerImplementation { public static void main(String[] args) throws Exception { diff --git a/typeinfo/NullRobot.java b/typeinfo/NullRobot.java index 327017eb..d0cf1846 100644 --- a/typeinfo/NullRobot.java +++ b/typeinfo/NullRobot.java @@ -19,7 +19,7 @@ class NullRobotProxyHandler implements InvocationHandler { public List operations() { return Collections.emptyList(); } - } + } @Override public Object invoke(Object proxy, Method method, Object[] args) @@ -35,7 +35,7 @@ public class NullRobot { NullRobot.class.getClassLoader(), new Class[]{ Null.class, Robot.class }, new NullRobotProxyHandler(type)); - } + } public static void main(String[] args) { Robot[] bots = { new SnowRemovalRobot("SnowBee"), diff --git a/typeinfo/Person.java b/typeinfo/Person.java index 98fbbe57..0db3d2a3 100644 --- a/typeinfo/Person.java +++ b/typeinfo/Person.java @@ -11,7 +11,7 @@ class Person { this.first = first; this.last = last; this.address = address; - } + } @Override public String toString() { return "Person: " + first + " " + last + " " + address; diff --git a/typeinfo/PetCount.java b/typeinfo/PetCount.java index 072e1452..5a19d0a4 100644 --- a/typeinfo/PetCount.java +++ b/typeinfo/PetCount.java @@ -13,7 +13,7 @@ public class PetCount { else put(type, quantity + 1); } - } + } public static void countPets(PetCreator creator) { PetCounter counter= new PetCounter(); @@ -48,7 +48,7 @@ public class PetCount { // Show the counts: print(); print(counter); - } + } public static void main(String[] args) { countPets(new ForNameCreator()); } diff --git a/typeinfo/PetCount3.java b/typeinfo/PetCount3.java index cc5726bf..c03061c6 100644 --- a/typeinfo/PetCount3.java +++ b/typeinfo/PetCount3.java @@ -17,7 +17,7 @@ public class PetCount3 { : entrySet()) if(pair.getKey().isInstance(pet)) put(pair.getKey(), pair.getValue() + 1); - } + } @Override public String toString() { StringBuilder result = new StringBuilder("{"); @@ -32,7 +32,7 @@ public class PetCount3 { result.append("}"); return result.toString(); } - } + } public static void main(String[] args) { PetCounter petCount = new PetCounter(); for(Pet pet : Pets.createArray(20)) { diff --git a/typeinfo/Position.java b/typeinfo/Position.java index 9ec187e7..5de0c8c3 100644 --- a/typeinfo/Position.java +++ b/typeinfo/Position.java @@ -12,7 +12,7 @@ class Position { public Position(String jobTitle) { title = jobTitle; person = Person.NULL; - } + } public String getTitle() { return title; } public void setTitle(String newTitle) { title = newTitle; diff --git a/typeinfo/RegisteredFactories.java b/typeinfo/RegisteredFactories.java index 0895219c..d482820c 100644 --- a/typeinfo/RegisteredFactories.java +++ b/typeinfo/RegisteredFactories.java @@ -9,7 +9,7 @@ class Part { return getClass().getSimpleName(); } static List> partFactories = - new ArrayList<>(); + new ArrayList<>(); static { // Collections.addAll() gives an "unchecked generic // array creation ... for varargs parameter" warning. @@ -26,7 +26,7 @@ class Part { int n = rand.nextInt(partFactories.size()); return partFactories.get(n).create(); } -} +} class Filter extends Part {} @@ -45,7 +45,7 @@ class AirFilter extends Filter { @Override public AirFilter create() { return new AirFilter(); } } -} +} class CabinAirFilter extends Filter { public static class Factory @@ -63,7 +63,7 @@ class OilFilter extends Filter { @Override public OilFilter create() { return new OilFilter(); } } -} +} class Belt extends Part {} @@ -83,7 +83,7 @@ class GeneratorBelt extends Belt { return new GeneratorBelt(); } } -} +} class PowerSteeringBelt extends Belt { public static class Factory @@ -93,7 +93,7 @@ class PowerSteeringBelt extends Belt { return new PowerSteeringBelt(); } } -} +} public class RegisteredFactories { public static void main(String[] args) { diff --git a/typeinfo/Robot.java b/typeinfo/Robot.java index 04b690b6..5e110fc2 100644 --- a/typeinfo/Robot.java +++ b/typeinfo/Robot.java @@ -1,6 +1,6 @@ //: typeinfo/Robot.java -import java.util.*; import net.mindview.util.*; +import java.util.*; public interface Robot { String name(); diff --git a/typeinfo/SelectingMethods.java b/typeinfo/SelectingMethods.java index d5da6add..b627c37f 100644 --- a/typeinfo/SelectingMethods.java +++ b/typeinfo/SelectingMethods.java @@ -16,7 +16,7 @@ class MethodSelector implements InvocationHandler { print("Proxy detected the interesting method"); return method.invoke(proxied, args); } -} +} interface SomeMethods { void boring1(); @@ -36,7 +36,7 @@ class Implementation implements SomeMethods { } @Override public void boring3() { print("boring3"); } -} +} class SelectingMethods { public static void main(String[] args) { diff --git a/typeinfo/Shapes.java b/typeinfo/Shapes.java index d1a179f6..cabab9a3 100644 --- a/typeinfo/Shapes.java +++ b/typeinfo/Shapes.java @@ -20,7 +20,7 @@ class Square extends Shape { class Triangle extends Shape { @Override public String toString() { return "Triangle"; } -} +} public class Shapes { public static void main(String[] args) { diff --git a/typeinfo/SimpleDynamicProxy.java b/typeinfo/SimpleDynamicProxy.java index 7249db32..281ae985 100644 --- a/typeinfo/SimpleDynamicProxy.java +++ b/typeinfo/SimpleDynamicProxy.java @@ -17,7 +17,7 @@ class DynamicProxyHandler implements InvocationHandler { System.out.println(" " + arg); return method.invoke(proxied, args); } -} +} class SimpleDynamicProxy { public static void consumer(Interface iface) { @@ -34,7 +34,7 @@ class SimpleDynamicProxy { new DynamicProxyHandler(real)); consumer(proxy); } -} /* Output: (95% match) +} /* Output: (95% Match) doSomething somethingElse bonobo **** proxy: class $Proxy0, method: public abstract void Interface.doSomething(), args: null diff --git a/typeinfo/SimpleProxyDemo.java b/typeinfo/SimpleProxyDemo.java index 39cae9b0..169b2481 100644 --- a/typeinfo/SimpleProxyDemo.java +++ b/typeinfo/SimpleProxyDemo.java @@ -13,7 +13,7 @@ class RealObject implements Interface { public void somethingElse(String arg) { print("somethingElse " + arg); } -} +} class SimpleProxy implements Interface { private Interface proxied; @@ -30,7 +30,7 @@ class SimpleProxy implements Interface { print("SimpleProxy somethingElse " + arg); proxied.somethingElse(arg); } -} +} class SimpleProxyDemo { public static void consumer(Interface iface) { diff --git a/typeinfo/SnowRemovalRobot.java b/typeinfo/SnowRemovalRobot.java index e4b5489c..051b9a6b 100644 --- a/typeinfo/SnowRemovalRobot.java +++ b/typeinfo/SnowRemovalRobot.java @@ -19,7 +19,7 @@ public class SnowRemovalRobot implements Robot { public void command() { System.out.println(name + " shoveling snow"); } - }, + }, new Operation() { @Override public String description() { @@ -41,7 +41,7 @@ public class SnowRemovalRobot implements Robot { } } ); - } + } public static void main(String[] args) { Robot.Test.test(new SnowRemovalRobot("Slusher")); } diff --git a/typeinfo/Staff.java b/typeinfo/Staff.java index d75ab5e3..53f1b0a2 100644 --- a/typeinfo/Staff.java +++ b/typeinfo/Staff.java @@ -16,7 +16,7 @@ public class Staff extends ArrayList { position.getPerson() == Person.NULL) return true; return false; - } + } public void fillPosition(String title, Person hire) { for(Position position : this) if(position.getTitle().equals(title) && @@ -26,7 +26,7 @@ public class Staff extends ArrayList { } throw new RuntimeException( "Position " + title + " not available"); - } + } public static void main(String[] args) { Staff staff = new Staff("President", "CTO", "Marketing Manager", "Product Manager", @@ -43,6 +43,6 @@ public class Staff extends ArrayList { new Person("Bob", "Coder", "Bright Light City")); System.out.println(staff); } -} /* Output: +} /* Output: [Position: President Person: Me Last The Top, Lonely At, Position: CTO NullPerson, Position: Marketing Manager NullPerson, Position: Product Manager NullPerson, Position: Project Lead Person: Janet Planner The Burbs, Position: Software Engineer Person: Bob Coder Bright Light City, Position: Software Engineer NullPerson, Position: Software Engineer NullPerson, Position: Software Engineer NullPerson, Position: Test Engineer NullPerson, Position: Technical Writer NullPerson] *///:~ diff --git a/typeinfo/SweetShop.java b/typeinfo/SweetShop.java index 6a30bb41..a6e68421 100644 --- a/typeinfo/SweetShop.java +++ b/typeinfo/SweetShop.java @@ -15,7 +15,7 @@ class Cookie { } public class SweetShop { - public static void main(String[] args) { + public static void main(String[] args) { print("inside main"); new Candy(); print("After creating Candy"); diff --git a/typeinfo/build.xml b/typeinfo/build.xml index 2c400f50..d738f8a4 100644 --- a/typeinfo/build.xml +++ b/typeinfo/build.xml @@ -4,6 +4,7 @@ + diff --git a/typeinfo/pets/ForNameCreator.java b/typeinfo/pets/ForNameCreator.java index acd632eb..f934fce9 100644 --- a/typeinfo/pets/ForNameCreator.java +++ b/typeinfo/pets/ForNameCreator.java @@ -15,7 +15,7 @@ public class ForNameCreator extends PetCreator { "typeinfo.pets.Rat", "typeinfo.pets.Mouse", "typeinfo.pets.Hamster" - }; + }; @SuppressWarnings("unchecked") private static void loader() { try { diff --git a/typeinfo/pets/LiteralPetCreator.java b/typeinfo/pets/LiteralPetCreator.java index fe37bdab..4f619e3d 100644 --- a/typeinfo/pets/LiteralPetCreator.java +++ b/typeinfo/pets/LiteralPetCreator.java @@ -18,7 +18,7 @@ public class LiteralPetCreator extends PetCreator { @Override public List> types() { return types; - } + } public static void main(String[] args) { System.out.println(types); } diff --git a/typeinfo/pets/PetCreator.java b/typeinfo/pets/PetCreator.java index f12b80ca..a4bb8f91 100644 --- a/typeinfo/pets/PetCreator.java +++ b/typeinfo/pets/PetCreator.java @@ -15,7 +15,7 @@ public abstract class PetCreator { IllegalAccessException e) { throw new RuntimeException(e); } - } + } public Pet[] createArray(int size) { Pet[] result = new Pet[size]; for(int i = 0; i < size; i++) diff --git a/typeinfo/toys/ToyTest.java b/typeinfo/toys/ToyTest.java index 5c842287..1ab7fa98 100644 --- a/typeinfo/toys/ToyTest.java +++ b/typeinfo/toys/ToyTest.java @@ -34,7 +34,7 @@ public class ToyTest { print("Can't find FancyToy"); System.exit(1); } - printInfo(c); + printInfo(c); for(Class face : c.getInterfaces()) printInfo(face); Class up = c.getSuperclass(); diff --git a/unittesting/JUnitDemo.java b/unittesting/JUnitDemo.java index bb1b414f..0491fde3 100644 --- a/unittesting/JUnitDemo.java +++ b/unittesting/JUnitDemo.java @@ -1,9 +1,11 @@ //: unittesting/JUnitDemo.java // Simple use of JUnit to test ArrayList -// {Depends: junit.jar} +// (Install libraries from www.junit.org) import java.util.*; import org.junit.Test; -import org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static java.lang.System.out; // So we can see the list objects being created, // and keep track of when they are cleaned up: @@ -11,7 +13,7 @@ class CountedList extends ArrayList { private static int counter = 0; private int id = counter++; public CountedList() { - System.out.println("CountedList #" + id); + out.println("CountedList #" + id); } public int getId() { return id; } } @@ -26,65 +28,66 @@ public class JUnitDemo { // Thus, setUp() is optional, but is run right // before the test: protected void setUp() { - System.out.println("Set up for " + list.getId()); + out.println("Set up for " + list.getId()); } // tearDown() is also optional, and is called after // each test. setUp() and tearDown() can be either // protected or public: public void tearDown() { - System.out.println("Tearing down " + list.getId()); + out.println("Tearing down " + list.getId()); } - // All tests have method names beginning with "test": + // All tests are marked with the @Test annotation: @Test - public void testInsert() { - System.out.println("Running testInsert()"); - org.junit.Assert.assertEquals(list.size(), 3); + public void insert() { + out.println("Running testInsert()"); + assertEquals(list.size(), 3); list.add(1, "Insert"); - org.junit.Assert.assertEquals(list.size(), 4); - org.junit.Assert.assertEquals(list.get(1), "Insert"); + assertEquals(list.size(), 4); + assertEquals(list.get(1), "Insert"); } @Test - public void testReplace() { - System.out.println("Running testReplace()"); - org.junit.Assert.assertEquals(list.size(), 3); + public void replace() { + out.println("Running testReplace()"); + assertEquals(list.size(), 3); list.set(1, "Replace"); - org.junit.Assert.assertEquals(list.size(), 3); - org.junit.Assert.assertEquals(list.get(1), "Replace"); + assertEquals(list.size(), 3); + assertEquals(list.get(1), "Replace"); } - // A "helper" method to reduce code duplication. As long - // as the name doesn't start with "test," it will not + // A helper method to reduce code duplication. As long + // as it isn't annotated with @Test, it will not // be automatically executed by JUnit. - private void compare(ArrayList lst, String[] strs) { - Object[] array = lst.toArray(); - org.junit.Assert.assertTrue("Arrays not the same length", + private void compare(ArrayList lst, String[] strs) { + String[] array = (String[])lst.toArray(); + assertTrue("Arrays not the same length", array.length == strs.length); for(int i = 0; i < array.length; i++) - org.junit.Assert.assertEquals(strs[i], (String)array[i]); + assertEquals(strs[i], array[i]); } @Test - public void testOrder() { - System.out.println("Running testOrder()"); + public void order() { + out.println("Running testOrder()"); compare(list, new String[] { "0", "1", "2" }); } @Test - public void testRemove() { - System.out.println("Running testRemove()"); - org.junit.Assert.assertEquals(list.size(), 3); + public void remove() { + out.println("Running testRemove()"); + assertEquals(list.size(), 3); list.remove(1); - org.junit.Assert.assertEquals(list.size(), 2); + assertEquals(list.size(), 2); compare(list, new String[] { "0", "2" }); } @Test - public void testAddAll() { - System.out.println("Running testAddAll()"); + public void addAll() { + out.println("Running testAddAll()"); list.addAll(Arrays.asList(new String[] { "An", "African", "Swallow"})); - org.junit.Assert.assertEquals(list.size(), 6); + assertEquals(list.size(), 6); compare(list, new String[] { "0", "1", "2", "An", "African", "Swallow" }); } public static void main(String[] args) { // Invoke JUnit on the class: - org.junit.runner.JUnitCore.runClasses(JUnitDemo.class); + org.junit.runner.JUnitCore.runClasses( + JUnitDemo.class); } } ///:~ diff --git a/unittesting/build.xml b/unittesting/build.xml index 9c8d3f37..8505f2b5 100644 --- a/unittesting/build.xml +++ b/unittesting/build.xml @@ -4,6 +4,7 @@ + diff --git a/xml/build.xml b/xml/build.xml index 0cb36772..89894a0f 100644 --- a/xml/build.xml +++ b/xml/build.xml @@ -4,6 +4,7 @@ +