interface IBasic {
}
interface IExtended extends IBasic {
}
class Basic implements IBasic {
}
class Extended implements IExtended {
}
class ExtendedTwice implements IBasic, IExtended {
}
public class Main {
private static void testSomeClassForIBasic( Class<?> testClass) {
Class<?> [ ] interfaces = testClass.getInterfaces ( ) ;
for ( Class<?> interface_ : interfaces) {
if ( IBasic.class .getName ( ) .equals ( interface_.getName ( ) ) ) {
System .
out .
println ( testClass.
getSimpleName ( ) + " implements " + IBasic.
class .
getSimpleName ( ) ) ; return ;
}
}
System .
out .
println ( testClass.
getSimpleName ( ) + " does not implement " + IBasic.
class .
getSimpleName ( ) ) ; }
private static void testSomeInstance
( Object instance
) { if ( instance instanceof IBasic) {
System .
out .
println ( instance.
getClass ( ) .
getSimpleName ( ) + " is instanceof IBasic" ) ; } else {
System .
out .
println ( instance.
getClass ( ) .
getSimpleName ( ) + " is NOT instanceof IBasic" ) ; }
}
testSomeClassForIBasic( Basic.class ) ;
testSomeInstance( new Basic( ) ) ;
testSomeClassForIBasic( Extended.class ) ;
testSomeInstance( new Extended( ) ) ;
testSomeClassForIBasic( ExtendedTwice.class ) ;
testSomeInstance( new ExtendedTwice( ) ) ;
}
}
aW50ZXJmYWNlIElCYXNpYyB7CiAgICAKfQppbnRlcmZhY2UgSUV4dGVuZGVkIGV4dGVuZHMgSUJhc2ljIHsKICAgIAp9CgpjbGFzcyBCYXNpYyBpbXBsZW1lbnRzIElCYXNpYyB7CiAgICAKfQoKY2xhc3MgRXh0ZW5kZWQgaW1wbGVtZW50cyBJRXh0ZW5kZWQgewogICAgCn0KCmNsYXNzIEV4dGVuZGVkVHdpY2UgaW1wbGVtZW50cyBJQmFzaWMsIElFeHRlbmRlZCB7CiAgICAKfQoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdGVzdFNvbWVDbGFzc0ZvcklCYXNpYyhDbGFzczw/PiB0ZXN0Q2xhc3MpIHsKICAgICAgICBDbGFzczw/PltdIGludGVyZmFjZXMgPSB0ZXN0Q2xhc3MuZ2V0SW50ZXJmYWNlcygpOwogICAgICAgIGZvciAoQ2xhc3M8Pz4gaW50ZXJmYWNlXyA6IGludGVyZmFjZXMpIHsKICAgICAgICAgICBpZiAoSUJhc2ljLmNsYXNzLmdldE5hbWUoKS5lcXVhbHMoaW50ZXJmYWNlXy5nZXROYW1lKCkpKSB7CiAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RDbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiIGltcGxlbWVudHMgIiArIElCYXNpYy5jbGFzcy5nZXRTaW1wbGVOYW1lKCkpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0Q2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIiBkb2VzIG5vdCBpbXBsZW1lbnQgIiArIElCYXNpYy5jbGFzcy5nZXRTaW1wbGVOYW1lKCkpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdGVzdFNvbWVJbnN0YW5jZShPYmplY3QgaW5zdGFuY2UpIHsKICAgICAgICBpZiAoaW5zdGFuY2UgaW5zdGFuY2VvZiBJQmFzaWMpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGluc3RhbmNlLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBpcyBpbnN0YW5jZW9mIElCYXNpYyIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbnN0YW5jZS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgaXMgTk9UIGluc3RhbmNlb2YgSUJhc2ljIik7CiAgICAgICAgfQogICAgfQoKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICB0ZXN0U29tZUNsYXNzRm9ySUJhc2ljKEJhc2ljLmNsYXNzKTsKICAgICAgICB0ZXN0U29tZUluc3RhbmNlKG5ldyBCYXNpYygpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKCiAgICAgICAgdGVzdFNvbWVDbGFzc0ZvcklCYXNpYyhFeHRlbmRlZC5jbGFzcyk7CiAgICAgICAgdGVzdFNvbWVJbnN0YW5jZShuZXcgRXh0ZW5kZWQoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CgogICAgICAgIHRlc3RTb21lQ2xhc3NGb3JJQmFzaWMoRXh0ZW5kZWRUd2ljZS5jbGFzcyk7CiAgICAgICAgdGVzdFNvbWVJbnN0YW5jZShuZXcgRXh0ZW5kZWRUd2ljZSgpKTsKICAgIH0KfQ==