@SuppressWarnings( { "unchecked" , "rawtypes" } )
final class Example
{
< E extends Enum< E>> Foo< E> createEnumFoo( Class enumType)
{
// This makes use of e.g. Enum.valueOf(enumType, ...).
return Enum .valueOf ( enumType, "x" ) ;
}
< T> Foo< T> createFoo( Class< T> type)
{
if ( Enum .class .isAssignableFrom ( type) )
return ( Foo< T> ) createEnumFoo( type) ;
else
// Here we would do something else or maybe throw an exception.
return null ;
}
interface Foo< T>
{
}
}
QFN1cHByZXNzV2FybmluZ3MoeyAidW5jaGVja2VkIiwgInJhd3R5cGVzIiB9KQpmaW5hbCBjbGFzcyBFeGFtcGxlCnsKICAgIDxFIGV4dGVuZHMgRW51bTxFPj4gRm9vPEU+IGNyZWF0ZUVudW1Gb28oQ2xhc3MgZW51bVR5cGUpCiAgICB7CiAgICAgICAgLy8gVGhpcyBtYWtlcyB1c2Ugb2YgZS5nLiBFbnVtLnZhbHVlT2YoZW51bVR5cGUsIC4uLikuCiAgICAgICAgcmV0dXJuIEVudW0udmFsdWVPZihlbnVtVHlwZSwgIngiKTsKICAgIH0KCiAgICA8VD4gRm9vPFQ+IGNyZWF0ZUZvbyhDbGFzczxUPiB0eXBlKQogICAgewogICAgICAgIGlmIChFbnVtLmNsYXNzLmlzQXNzaWduYWJsZUZyb20odHlwZSkpCiAgICAgICAgICAgIHJldHVybiAoRm9vPFQ+KSBjcmVhdGVFbnVtRm9vKHR5cGUpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgLy8gSGVyZSB3ZSB3b3VsZCBkbyBzb21ldGhpbmcgZWxzZSBvciBtYXliZSB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGludGVyZmFjZSBGb288VD4KICAgIHsKICAgIH0KfQ==