2013-05-18 7 views
8

Hala Java için oldukça yeni, bu yüzden burada bariz bir şey eksik olabilir.Bir yönteme bir sınıf türü aktarılıyor, sonra bu türe mi yayınlanıyor?

Ben bütün varlıkların bir listeden sınıf türlerini seçmek için kullandıkları Aşağıdaki kodu vardır: iyi çalışıyor, ancak bu yöntemi çağrılırken Hala için döküm gerektiği anlamına gelir

public Array<?> PickEntities(Class<?> cls) { 
    Array<? super SpriteEntity> allEntities = new Array<Object>(); 
    for (SpriteEntity entity : MyGame.AllEntities) { 
     if (entity.getClass() == cls) { 
       allEntities.add(entity); 
     } 
    } 
    return allEntities; 
} 

diğer tarafta sınıf. Örneğin:

asteroid = (Asteroid)PickEntities(Asteroid.class); 

Ne yapmak istiyorum ben o tip dönen dizi (allEntities) (cls parametresi) benim PickEntities sınıfa geçen ve daha sonra döküm am sınıfı kullanmaktır.

Bunu yapmanın bir yolu var mı? Her denediğimde bana sadece 'cls' bir tür olmadığını ve yayınlamak için kullanılamayacağını söyler.

+0

Sınıf Dizisi nerede tanımlandı? – Antimony

cevap

14

Yöntemin genel olmalıdır:

Ben standart toplama sınıfları kullanılan
public <T extends SpriteEntity> List<T> pickEntities(Class<T> clazz) { 
    List<T> result = new ArrayList<T>(); 
    for (SpriteEntity entity : MyGame.allEntities) { 
     if (entity.getClass() == clazz) { 
      result.add((T) entity); 
     } 
    } 
    return result; 
} 

Not ve standart Java adlandırma kuralları.

+0

Vay, bu harika bir kod! Mükemmel çalışıyor ve Java'yı daha iyi kullanabilmem için bir dersim var: D Teşekkürler dostum! – boolean

+1

Yukarıdaki kodun, OP'den alınan kod gibi, yalnızca sınıfın "clazz" ile aynı olduğu örnekleri içereceğini unutmayın; Alt sınıfları içermez. Ayrıca, "clazz.cast (varlık)" diyerek oyuncudan kaçabilirsiniz – NamshubWriter

İlgili konular