JAVA
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
];
}
}