The real story about how Anakin Skywalker became Darth Vader (Java Version)
Kirill Grouchnikov's Blog: The real story about how Anakin Skywalker became Darth Vader: "
Kirill Grouchnikov's Blog describe us the last Star Wars episode with the point of view of a Java Developer. It is a really funny history...
The real story about how Anakin Skywalker became Darth Vader:
Here it is - the JDK 5.0-compliant story behind 'Revenge of the Sith'. See it in all its glory, using the new java.util.concurrency package:
public class Princess implements ExecutorService {
public static final Princess PADME = new Princess();
// private member
private StarShip ship;
private Princess() {
this.setDefaultLocale(Locale.EN);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
Princess.this.changeHairStyle();
Princess.this.changeClothes();
}
};
timer.scheduleAtFixedRate(task, new Date(), 1000);
}
}
public class JediKnight implements ExecutorService {
public static final JediKnight ANAKIN = new JediKnight(false);
public static final JediKnight OBI_WAN = new JediKnight(false);
public static final JediKnight YODA = new JediKnight(true);
private JediKnight(boolean isYoda) {
if (!isYoda) {
this.setDefaultLocale(Locale.EN);
}
else {
Locale yodaLocale = Locale.EN;
this.setDefaultLocale(Utils.shuffle(yodaLocale));
}
this.setLightSabre(LightSabreFactory.getInstance());
this.setGoodLooking(!isYoda);
}
}
public class Sith {
public static final Sith LORD = new Sith();
private Sith() {
this.setDefaultLocale(Locale.EN);
this.setClothes(DarkRobeFactory.getInstance());
this.setLightSabre(LightSabreFactory.getInstance());
}
}
public static main() {
// The following line has been commented out so as not
// to confuse fans who never did it
// Utils.initChildren(JediKnight.ANAKIN, Princess.PADME);
// Use JDK 5.0 concurrency package
Future> padmeFuture = Princess.PADME.submit(
new Callable>() {
public Set call() {
try {
int weeks = (int)(36+4.0*Math.random());
wait(weeks*7*24*60*60*1000);
this = null;
System.gc();
}
finally() {
Child boy = new Child("Luke");
Child girl = new Child("Leia");
Set result = new HashSet();
result.add(boy);
result.add(girl);
return result;
}
}
}
);
if (JediKnight.ANAKIN.poll(padmeFuture) instanceof ThreadDeath) {
JediKnight.ANAKIN.alarm();
// use some marketing ideas
Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("object.restore.afterGC"));
Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.power.dark.*"));
Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.power.*"));
Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.*"));
JediKnight.ANAKIN.setInternalName("Darth Vader");
JediKnight.ANAKIN.promise(Princess.PADME, new RuntimePermission("*"));
Princess.PADME.alarm();
Princess.PADME.boardShip();
// Use JDK 5.0 concurrency package
Future anakinFuture =
JediKnight.OBI_WAN.submit(
new Callable() {
public RuntimePermission call() {
try {
Class princessClass = Princess.getClass();
Field shipField = princessClass.getDeclaredField("ship");
// will never throw SecurityException on Jedi Knight
shipField.setAccessible(true);
JediKnight.this.add(new RuntimePermission("object.ship.board.*"));
return (StarShip)shipField.get(Princess.PADME);
}
catch (SecurityException se) {
// never supposed to happen to Jedi Knight
System.out.println("Internal error. Contact George Lucas.");
System.reboot();
}
}
}
);
StarShip padmeShip = anakinFuture.call();
padmeShip.put(JediKnight.OBI_WAN);
JediKnight.ANAKIN.see(Princess.PADME);
Princess.PADME.removeLove(JediKnight.ANAKIN);
JediKnight.ANAKIN.see(JediKnight.OBI_WAN);
JediKnight.ANAKIN.removeLove(Princess.PADME);
JediKnight.OBI_WAN.removeLimbs(JediKnight.ANAKIN);
// note - absolutely no need for GC, Anakin will be collected automatically.
ReferenceQueue sithWatchList = new ReferenceQueue();
PhantomReference anakinRef = sithWatchList.remove();
JediKnight anakinPhantom = anakinRef.get();
Sith DARTH_VADER = Sith.LORD.assemble(anakinPhantom, LimbFactory.getSpareInstances());
MouthPiece newMouthPiece = MouthPieceFactory.getInstance();
// no need to check that it works - guaranteed to work with no noise
DARTH_VADER.add(newMouthPiece);
DARTH_VADER.rise();
}
else {
// TODO - create alternative scenario for Sith revenge
}
}
Kirill Grouchnikov's Blog describe us the last Star Wars episode with the point of view of a Java Developer. It is a really funny history...
The real story about how Anakin Skywalker became Darth Vader:
Here it is - the JDK 5.0-compliant story behind 'Revenge of the Sith'. See it in all its glory, using the new java.util.concurrency package:
public class Princess implements ExecutorService {
public static final Princess PADME = new Princess();
// private member
private StarShip ship;
private Princess() {
this.setDefaultLocale(Locale.EN);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
Princess.this.changeHairStyle();
Princess.this.changeClothes();
}
};
timer.scheduleAtFixedRate(task, new Date(), 1000);
}
}
public class JediKnight implements ExecutorService {
public static final JediKnight ANAKIN = new JediKnight(false);
public static final JediKnight OBI_WAN = new JediKnight(false);
public static final JediKnight YODA = new JediKnight(true);
private JediKnight(boolean isYoda) {
if (!isYoda) {
this.setDefaultLocale(Locale.EN);
}
else {
Locale yodaLocale = Locale.EN;
this.setDefaultLocale(Utils.shuffle(yodaLocale));
}
this.setLightSabre(LightSabreFactory.getInstance());
this.setGoodLooking(!isYoda);
}
}
public class Sith {
public static final Sith LORD = new Sith();
private Sith() {
this.setDefaultLocale(Locale.EN);
this.setClothes(DarkRobeFactory.getInstance());
this.setLightSabre(LightSabreFactory.getInstance());
}
}
public static main() {
// The following line has been commented out so as not
// to confuse fans who never did it
// Utils.initChildren(JediKnight.ANAKIN, Princess.PADME);
// Use JDK 5.0 concurrency package
Future
new Callable
public Set
try {
int weeks = (int)(36+4.0*Math.random());
wait(weeks*7*24*60*60*1000);
this = null;
System.gc();
}
finally() {
Child boy = new Child("Luke");
Child girl = new Child("Leia");
Set
result.add(boy);
result.add(girl);
return result;
}
}
}
);
if (JediKnight.ANAKIN.poll(padmeFuture) instanceof ThreadDeath) {
JediKnight.ANAKIN.alarm();
// use some marketing ideas
Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("object.restore.afterGC"));
Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.power.dark.*"));
Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.power.*"));
Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.*"));
JediKnight.ANAKIN.setInternalName("Darth Vader");
JediKnight.ANAKIN.promise(Princess.PADME, new RuntimePermission("*"));
Princess.PADME.alarm();
Princess.PADME.boardShip();
// Use JDK 5.0 concurrency package
Future
JediKnight.OBI_WAN.submit(
new Callable
public RuntimePermission call() {
try {
Class princessClass = Princess.getClass();
Field shipField = princessClass.getDeclaredField("ship");
// will never throw SecurityException on Jedi Knight
shipField.setAccessible(true);
JediKnight.this.add(new RuntimePermission("object.ship.board.*"));
return (StarShip)shipField.get(Princess.PADME);
}
catch (SecurityException se) {
// never supposed to happen to Jedi Knight
System.out.println("Internal error. Contact George Lucas.");
System.reboot();
}
}
}
);
StarShip padmeShip = anakinFuture.call();
padmeShip.put(JediKnight.OBI_WAN);
JediKnight.ANAKIN.see(Princess.PADME);
Princess.PADME.removeLove(JediKnight.ANAKIN);
JediKnight.ANAKIN.see(JediKnight.OBI_WAN);
JediKnight.ANAKIN.removeLove(Princess.PADME);
JediKnight.OBI_WAN.removeLimbs(JediKnight.ANAKIN);
// note - absolutely no need for GC, Anakin will be collected automatically.
ReferenceQueue
PhantomReference
JediKnight anakinPhantom = anakinRef.get();
Sith DARTH_VADER = Sith.LORD.assemble(anakinPhantom, LimbFactory.getSpareInstances());
MouthPiece newMouthPiece = MouthPieceFactory.getInstance();
// no need to check that it works - guaranteed to work with no noise
DARTH_VADER.add(newMouthPiece);
DARTH_VADER.rise();
}
else {
// TODO - create alternative scenario for Sith revenge
}
}