import java.util.Map; interface MethodProperty> { public void copyFrom(ActualType other); } class MethodPropertyDatabase> { Map propertyMap; void read(String fileName) { } } class FooProperty implements MethodProperty { String value; public void copyFrom(FooProperty other) { this.value = other.value; } } class FooPropertyDatabase extends MethodPropertyDatabase { } public class GenericsBug { FooPropertyDatabase fooDatabase; public void readDatabase() { FooPropertyDatabase database = new FooPropertyDatabase(); fooDatabase = readDatabase(database, "foodatabase.db"); // Bug reported on this line } private< Property extends MethodProperty, DatabaseType extends MethodPropertyDatabase > DatabaseType readDatabase(DatabaseType database, String fileName) { database.read(fileName); return database; } }