this question için çözümlerle uğraşırken, bazı derleyici uyarılarına sahip olan aşağıdaki kodla geldim. Bir uyarı: Bu uyarı görünür neden geldiğimden anlamıyorumGenel yöntem, güvenlik hatası türünü tetikler - neden?
Type safety: The expression of type Test.EntityCollection needs unchecked conversion to conform to Test.EntityCollection<Test.Entity>
. Bir Class<M>
türünü geçirerek ve yöntem EntityCollection<M>
döndürdüğünü bildirerek, (Java 7) derleyicisini doğru türün iade edildiğine ikna etmek için neden yeterince yapmıyorum?
static class Entity {
}
static class EntityCollection<E extends Entity> {
private EntityCollection(HashMap<?, E> map) {
}
public static <T extends HashMap<?, M>, M extends Entity> EntityCollection<M> getInstance(
Class<T> mapType, Class<M> entityType)
throws ReflectiveOperationException {
T map = mapType.getConstructor().newInstance();
return new EntityCollection<M>(map);
}
}
public static void main(String[] args) throws Exception {
// both compiler warnings are on the line below:
EntityCollection<Entity> collection = EntityCollection.getInstance(
LinkedHashMap.class, Entity.class);
}
Herhangi biri uyarıları tamamen önlemek için kodu artırabilirse, bonus puanları. Bir süredir ona bakıyorum ve uyarıları azaltmanın herhangi bir yolunu hayal etmedim.
Hmm:
Yani, sen benzediğini şekilde bu kısıtlamayı değiştirmek için Kodunuza ne yapmaları gerektiğini tahmin Buna itiraz etmek için 8 (yeni bir "EntityCollection (map)') dönüşünde "bir elmas çıkarımı kullanabilirsiniz". Bunun dışında çok mutlu. Ben netbeans kullanıyorum –
@RichardTingle Ben komut satırında 'javac -Xlint: all' ile derlerseniz bana uyarı vermek için Java 1.8.0_05 alabilirsiniz. –