immutable.zip

Immutable/.classpath

Immutable/.project

Immutable org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature

Immutable/.settings/org.eclipse.jdt.core.prefs

eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.8

Immutable/src/Immutable.java

Immutable/src/Immutable.java

public   class   Immutable
{
     public   static   void  main ( String []  args )  
     {
         new   Immutable (). immutableTest ();
     }
    
     public   void  immutableTest ()
     {
         MutableMirroredCharacter  mutableMirroredCharacter  =   new   MutableMirroredCharacter ( 'A' );
        
         ImmutableMirroredCharacter  immutableMirroredCharacter  =   new   ImmutableMirroredCharacter ( mutableMirroredCharacter );
        
         //validate should print 'true' for all tests - look at console output to verify
        
         //test 1
        validate ( mutableMirroredCharacter . getValue   (),   'A' );
        validate ( immutableMirroredCharacter . getValue (),   'A' );

         //test 2
        mutableMirroredCharacter . lowercase ();
        validate ( mutableMirroredCharacter . getValue (),     'a' );
        validate ( immutableMirroredCharacter . getValue (),   'A' );

         //test 3
        immutableMirroredCharacter . uppercase ();
        validate ( mutableMirroredCharacter . getValue   (),   'a' );
        validate ( immutableMirroredCharacter . getValue (),   'A' );

         //test 4
        mutableMirroredCharacter . change ( 'Z' );
        validate ( mutableMirroredCharacter . getValue   (),   'Z' );
        validate ( immutableMirroredCharacter . getValue (),   'A' );

         //test 5
        immutableMirroredCharacter . change ( 'N' );
        validate ( mutableMirroredCharacter . getValue   (),   'Z' );
        validate ( immutableMirroredCharacter . getValue (),   'A' );        
}
    
     private   void  validate ( char  have ,   char  expect )
     {
         System . out . println ( have  ==  expect );      
     }
}

Immutable/src/ImmutableMirroredCharacter.java

Immutable/src/ImmutableMirroredCharacter.java

//you can change the class attributes as necessary
public   class   ImmutableMirroredCharacter
{
     //you must keep the type but you can change any attributes and assignment necessary
     private   MutableMirroredCharacter  mutableMirroredCharacter  =   null ;
    
     public   ImmutableMirroredCharacter ( MutableMirroredCharacter  value )
     {
         //you may change this logic but not the signature of the constructor
        mutableMirroredCharacter  =  value ;
     }
    
     public   ImmutableMirroredCharacter ( char  value )
     {
         //you may change this logic but not the signature of the constructor
        mutableMirroredCharacter  =   new   MutableMirroredCharacter ( value );
     }
    
     public   void  uppercase ()
     {
         //you may change this return type and logic - but not the signature of the constructor
        mutableMirroredCharacter . uppercase ();
     }
    
     public   void  lowercase ()
     {
         //you may change this return type and logic - but not the signature of the constructor
        mutableMirroredCharacter . lowercase ();
     }
    
     public   void  change ( char  value )
     {
         //you may change this return type and logic - but not the signature of the constructor
        mutableMirroredCharacter . change ( value );
     }
    
     //you may change these return type and logic - but not the signature of the method
     public   char  getValue ()
     {
         return  mutableMirroredCharacter . getValue ();
     }
    
     //you may add anything else if necessary
}

Immutable/src/MutableMirroredCharacter.java

Immutable/src/MutableMirroredCharacter.java

//you may not change this class or anything in it
public   class   MutableMirroredCharacter
{
     private   char   []  data  =   new   char [ 2 ];
    
     public   MutableMirroredCharacter ( char  value )
     {
        data [ 0 ]   =  data [ 1 ]   =  value ;
     }
    
     public   void  uppercase ()
     {
        data [ 0 ]   =  data [ 1 ]   =   Character . toUpperCase ( data [ 1 ]);
     }
    
     public   void  lowercase ()
     {
        data [ 0 ]   =  data [ 1 ]   =   Character . toLowerCase ( data [ 1 ]);
     }

     public   void  change ( char  value )
     {
        data [ 0 ]   =  data [ 1 ]   =  value ;
     }

     public   char  getValue ()
     {
         return  data [ 0 ];
     }
}