miałem pewne trudności z tym, ale zorientowali się kilka rzeczy, które będą dzielić się w najprostszy możliwy sposób.
Moje doświadczenia z leków generycznych jest ograniczona do zbiorów, więc używam ich w definicji klasy, takie jak:
public class CircularArray<E> {
który zawiera element danych:
private E[] data;
Ale nie możesz marka i tablica typów ogólnych, więc ma następującą metodę:
W konstruktorze:
data = newArray(INITIAL_CAPACITY); //Done for reusability
Działa to dla ogólnych generycznych, ale potrzebowałem listy, która mogłaby zostać posortowana: listy Komparatorów.
public class SortedCircularArray<E extends Comparable<E>> {
//any E that implements Comparable or extends a Comparable class
który zawiera element danych:
private E[] data;
Ale nasza nowa klasa wyrzuca java.lang.ClassCastException:
@SuppressWarnings("unchecked")
private E[] newArray(int size)
{
//Old: return (E[]) new Object[size]; //Create an array of Objects then cast it as E[]
return (E[]) new Comparable[size]; //A comparable is an object, but the converse may not be
}
w konstruktorze wszystko jest takie samo:
data = newArray(INITIAL_CAPACITY); //Done for reusability
Mam nadzieję, że s pomaga i mam nadzieję, że nasi bardziej doświadczeni użytkownicy poprawią mnie, jeśli popełniłem błędy.
Najprawdopodobniej zacznę od listy i [zamień ją w tablicę zgodnie z potrzebą] (http://docs.oracle.com/javase/6/docs/api/java/util/List.html#toArray (T [])), ponieważ nie lubię zajmować się tablicami Java ... ale to wciąż jest ważne pytanie. –
@pst: Opublikuj jako odpowiedź. Nienawidzę rzucania ogólnych tablic (moja ostatnia próba odpowiedzi była niepoprawna, ponieważ zapomniałem jak łamano generyczne). – nneonneo