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; | |
} | |
} |