/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
interface IMarker { }
interface IWorker { public void work( ) ; }
class UnmarkedWorker implements IWorker {
public void work
( ) { System .
out .
println ( "work work" ) ; } }
class MarkedWorker implements IWorker, IMarker {
public void work
( ) { System .
out .
println ( "work work" ) ; } }
class PromotedWorker implements IWorker, IMarker {
private final IWorker worker;
public PromotedWorker( IWorker worker) {
this .worker = worker;
}
public void work( ) { worker.work ( ) ; }
}
class Foreman {
public void drive( IWorker worker) {
if ( worker instanceof IMarker) {
}
worker.work ( ) ;
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Foreman bob = new Foreman( ) ;
System .
out .
println ( "Foreman bob drives an UnmarkedWorker:" ) ; bob.drive ( new UnmarkedWorker( ) ) ;
System .
out .
println ( "Foreman bob drives a MarkedWorker:" ) ; bob.drive ( new MarkedWorker( ) ) ;
System .
out .
println ( "Foreman bob drives a promoted UnmarkedWorker:" ) ; bob.drive ( new PromotedWorker( new UnmarkedWorker( ) ) ) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbnRlcmZhY2UgSU1hcmtlciB7IH0KaW50ZXJmYWNlIElXb3JrZXIgeyBwdWJsaWMgdm9pZCB3b3JrKCk7IH0KCmNsYXNzIFVubWFya2VkV29ya2VyIGltcGxlbWVudHMgSVdvcmtlciB7CglwdWJsaWMgdm9pZCB3b3JrKCkgeyBTeXN0ZW0ub3V0LnByaW50bG4oIndvcmsgd29yayIpOyB9Cn0KCmNsYXNzIE1hcmtlZFdvcmtlciBpbXBsZW1lbnRzIElXb3JrZXIsIElNYXJrZXIgewoJcHVibGljIHZvaWQgd29yaygpIHsgU3lzdGVtLm91dC5wcmludGxuKCJ3b3JrIHdvcmsiKTsgfQp9CgpjbGFzcyBQcm9tb3RlZFdvcmtlciBpbXBsZW1lbnRzIElXb3JrZXIsIElNYXJrZXIgewoJcHJpdmF0ZSBmaW5hbCBJV29ya2VyIHdvcmtlcjsKCglwdWJsaWMgUHJvbW90ZWRXb3JrZXIoSVdvcmtlciB3b3JrZXIpIHsKCQl0aGlzLndvcmtlciA9IHdvcmtlcjsKCX0KCQoJcHVibGljIHZvaWQgd29yaygpIHsgd29ya2VyLndvcmsoKTsgfQp9CgpjbGFzcyBGb3JlbWFuIHsKCXB1YmxpYyB2b2lkIGRyaXZlKElXb3JrZXIgd29ya2VyKSB7CgkJaWYod29ya2VyIGluc3RhbmNlb2YgSU1hcmtlcikgewoJCQlTeXN0ZW0ub3V0LnByaW50KCIqOiAiKTsKCQl9CgkJd29ya2VyLndvcmsoKTsKCX0KfQoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlGb3JlbWFuIGJvYiA9IG5ldyBGb3JlbWFuKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJGb3JlbWFuIGJvYiBkcml2ZXMgYW4gVW5tYXJrZWRXb3JrZXI6Iik7CgkJYm9iLmRyaXZlKG5ldyBVbm1hcmtlZFdvcmtlcigpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvcmVtYW4gYm9iIGRyaXZlcyBhIE1hcmtlZFdvcmtlcjoiKTsKCQlib2IuZHJpdmUobmV3IE1hcmtlZFdvcmtlcigpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvcmVtYW4gYm9iIGRyaXZlcyBhIHByb21vdGVkIFVubWFya2VkV29ya2VyOiIpOwoJCWJvYi5kcml2ZShuZXcgUHJvbW90ZWRXb3JrZXIobmV3IFVubWFya2VkV29ya2VyKCkpKTsKCX0KfQ==