/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static <T
extends Calculator
> void computeWithClass
(Class
<T
> calcClass
) throws Exception { Calculator calc = calcClass.newInstance();
calc.setA(123);
calc.setB(321);
System.
out.
println(calc.
compute()); }
computeWithClass(Adder.class);
computeWithClass(Multiplier.class);
}
}
interface Calculator {
void setA(int a);
void setB(int b);
int compute();
}
class Adder implements Calculator {
private int a,b;
public void setA(int a) {this.a=a;}
public void setB(int b) {this.b=b;}
public int compute() {return a+b;}
}
class Multiplier implements Calculator {
private int a,b;
public void setA(int a) {this.a=a;}
public void setB(int b) {this.b=b;}
public int compute() {return a*b;}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICAgICAgICBzdGF0aWMgPFQgZXh0ZW5kcyBDYWxjdWxhdG9yPiB2b2lkIGNvbXB1dGVXaXRoQ2xhc3MoQ2xhc3M8VD4gY2FsY0NsYXNzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgICAgIENhbGN1bGF0b3IgY2FsYyA9IGNhbGNDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgY2FsYy5zZXRBKDEyMyk7CiAgICAgICAgICAgICBjYWxjLnNldEIoMzIxKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjYWxjLmNvbXB1dGUoKSk7CiAgICAgICAgfQogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAgICBjb21wdXRlV2l0aENsYXNzKEFkZGVyLmNsYXNzKTsKICAgICAgICAgICAgY29tcHV0ZVdpdGhDbGFzcyhNdWx0aXBsaWVyLmNsYXNzKTsKICAgICAgICB9Cn0KCgogICAgaW50ZXJmYWNlIENhbGN1bGF0b3IgewogICAgICAgIHZvaWQgc2V0QShpbnQgYSk7CiAgICAgICAgdm9pZCBzZXRCKGludCBiKTsKICAgICAgICBpbnQgY29tcHV0ZSgpOwogICAgfQogICAgY2xhc3MgQWRkZXIgaW1wbGVtZW50cyBDYWxjdWxhdG9yIHsKICAgICAgICBwcml2YXRlIGludCBhLGI7CiAgICAgICAgcHVibGljIHZvaWQgc2V0QShpbnQgYSkge3RoaXMuYT1hO30KICAgICAgICBwdWJsaWMgdm9pZCBzZXRCKGludCBiKSB7dGhpcy5iPWI7fQogICAgICAgIHB1YmxpYyBpbnQgY29tcHV0ZSgpIHtyZXR1cm4gYStiO30KICAgIH0KICAgIGNsYXNzIE11bHRpcGxpZXIgaW1wbGVtZW50cyBDYWxjdWxhdG9yIHsKICAgICAgICBwcml2YXRlIGludCBhLGI7CiAgICAgICAgcHVibGljIHZvaWQgc2V0QShpbnQgYSkge3RoaXMuYT1hO30KICAgICAgICBwdWJsaWMgdm9pZCBzZXRCKGludCBiKSB7dGhpcy5iPWI7fQogICAgICAgIHB1YmxpYyBpbnQgY29tcHV0ZSgpIHtyZXR1cm4gYSpiO30KICAgIH0=