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