Simple (non bulletproof) version:
public class Resource {
public enum Mode { READ, WRITE }
public Resource(String fileName) { ... }
public void open(Mode m, boolean autoFlush) { ... }
public char read() { ... }
public void write(char c) { ... }
}
Legal usage:
Resource res = ... ;
res.open(Resource.Mode.READ, false);
char c = res.read();
Illegal usage:
Resource res = ... ;
res.open(Resource.Mode.READ, false);
res.write('a'); // Runtime error:
// Resource was opened for READ
The bulletproofing technique remains the same: introduce new classes to make it possible for the compiler to distinguish between the different variants.
public class Readable {
public char read() { ... }
}
public class Writable {
public void write(char c) { ... }
}
public class Resource {
public Resource(String fileName) { ... }
public Readable openRead(boolean autoFlush) { ... }
public Writable openWrite(boolean autoFlush) { ... }
}
0 comments :: Bulletprooof - II
Post a Comment