/* 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 GenericClass<T> {
}
abstract class AbstractClass<T, G extends GenericClass<T>> {
public AbstractClass(Class<G> generic, T something) { }
}
class GeneralClass<T> extends AbstractClass<T, GenericClass<T>> {
public GeneralClass(Class<GenericClass<T>> generic, T something) {
super(generic, something); // !error, asking for Class<GenericClass<T>>
}
}
public class Main {
public static void main
(String[] args
){ GenericClass<String> generic = new GenericClass<String>();
Class genericClass = generic.getClass();
GeneralClass<String> foo = new GeneralClass<String>(genericClass, "foo");
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgR2VuZXJpY0NsYXNzPFQ+IHsKfQoKYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDbGFzczxULCBHIGV4dGVuZHMgR2VuZXJpY0NsYXNzPFQ+PiB7CiAgICBwdWJsaWMgQWJzdHJhY3RDbGFzcyhDbGFzczxHPiBnZW5lcmljLCBUIHNvbWV0aGluZykgeyB9Cn0KCmNsYXNzIEdlbmVyYWxDbGFzczxUPiBleHRlbmRzIEFic3RyYWN0Q2xhc3M8VCwgR2VuZXJpY0NsYXNzPFQ+PiB7CiAgICBwdWJsaWMgR2VuZXJhbENsYXNzKENsYXNzPEdlbmVyaWNDbGFzczxUPj4gZ2VuZXJpYywgVCBzb21ldGhpbmcpIHsKICAgICAgICBzdXBlcihnZW5lcmljLCBzb21ldGhpbmcpOyAgICAvLyAhZXJyb3IsIGFza2luZyBmb3IgQ2xhc3M8R2VuZXJpY0NsYXNzPFQ+PgogICAgfQp9CgpwdWJsaWMgY2xhc3MgTWFpbiB7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKXsKCQlHZW5lcmljQ2xhc3M8U3RyaW5nPiBnZW5lcmljID0gbmV3IEdlbmVyaWNDbGFzczxTdHJpbmc+KCk7CgkJQ2xhc3MgZ2VuZXJpY0NsYXNzID0gZ2VuZXJpYy5nZXRDbGFzcygpOwoJCUdlbmVyYWxDbGFzczxTdHJpbmc+IGZvbyA9IG5ldyBHZW5lcmFsQ2xhc3M8U3RyaW5nPihnZW5lcmljQ2xhc3MsICJmb28iKTsKCX0KfQ==