Interview Code Questions


Interview Code Questions

Class invariant - Immutable Class
What's problem in the following immutable class? is it really immutable? Can client violate its immutablity, and make start date of an object greater than end date of it?
or ask interviewee to write a class represent time period, and guarantee its start time is less than its end time.
public class TimeInterval{
private final Date start;
private final Date end;
public TimeInterval(Date s, Date e) {
start = s;
end = e;
if (this.start.compareTo(this.end) > 0)
throw new IllegalArgumentException(start + " after " + end);
}
public Date getStart() {
return start;
}
public Date getEnd() {
return end;
}
}
Is it safe to use the clone method of Date to make a defensive copy in constructor?
What would happen if we use long to represent internal time?
Hints:
It is essential to make a defensive copy of each mutable parameter in constructor.
Defensive copies should be made before checking the validity of the parameters, and the validity check is performed on the copies rather than on the originals.
We can also use the primitive long returned by Date.getTime() as an internal time representation instead of using a Date reference, as long is immutable.


Resources:

Labels

adsense (5) Algorithm (69) Algorithm Series (35) Android (7) ANT (6) bat (8) Big Data (7) Blogger (14) Bugs (6) Cache (5) Chrome (19) Code Example (29) Code Quality (7) Coding Skills (5) Database (7) Debug (16) Design (5) Dev Tips (63) Eclipse (32) Git (5) Google (33) Guava (7) How to (9) Http Client (8) IDE (7) Interview (88) J2EE (13) J2SE (49) Java (186) JavaScript (27) JSON (7) Learning code (9) Lesson Learned (6) Linux (26) Lucene-Solr (112) Mac (10) Maven (8) Network (9) Nutch2 (18) Performance (9) PowerShell (11) Problem Solving (11) Programmer Skills (6) regex (5) Scala (6) Security (9) Soft Skills (38) Spring (22) System Design (11) Testing (7) Text Mining (14) Tips (17) Tools (24) Troubleshooting (29) UIMA (9) Web Development (19) Windows (21) xml (5)