Mam następujący kod:

public abstract class A<T extends B<? extends A<T>>>{

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        A other = (A) obj; // warning here: "A is a raw type"
        // [...]
    }
}

Jak uniknąć zarówno „A to surowy typ”, jak i „Bezpieczeństwo typu: niesprawdzone rzutowanie” w określonej linii? Czy jest jakiś hack lub robię coś nie tak z moimi zajęciami?

Dzięki

3
Jean Logeart 24 sierpień 2011, 19:41

3 odpowiedzi

Najlepsza odpowiedź

Jeśli sparametryzowany typ porównywanego A nie ma znaczenia, zadeklaruj i rzuć go jako A<?>:

A<?> other = (A<?>) obj;

Spowoduje to usunięcie ostrzeżenia.

6
Paul Bellora 24 sierpień 2011, 19:43
Wielkie dzięki :) To będzie moja przyjęta odpowiedź za kilka minut.
 – 
Jean Logeart
24 sierpień 2011, 19:46

Umieść tę adnotację przed nią: @SuppressWarnings("unchecked"). Więcej informacji znajdziesz tutaj.

2
Zack Marrapese 24 sierpień 2011, 19:43
Wiem, że mogę, ale całe piękno to unikanie tego ;-p
 – 
Jean Logeart
24 sierpień 2011, 19:44

W razie potrzeby możesz użyć adnotacji @SuppressWarnings. Zobacz tutaj.

0
Ernest Friedman-Hill 24 sierpień 2011, 19:44