2014-03-26 13 views
5

Zum Beispiel wir einige AbsractClass habenSammlung wird eine rohe Art

package inherit; 

import java.util.HashSet; 
import java.util.Set; 

/** 
* TODO: Add comment 
* 
* @author Ruslan Ibragimov 
*/ 
public abstract class AbstractClass<T extends Integer> { 

    private Set<String> strings = new HashSet<>(); 

    private T value; 

    public Set<String> getStrings() { 
     return strings; 
    } 

    public void setStrings(Set<String> strings) { 
     this.strings = strings; 
    } 

    public void addString(String string) { 
     strings.add(string); 
    } 

    public T getValue() { 
     return value; 
    } 

    public void setValue(T value) { 
     this.value = value; 
    } 
} 

und einige Kind:

package inherit; 

/** 
* TODO: Add comment 
* 
* @author Ruslan Ibragimov 
*/ 
public class InheritClass extends AbstractClass<Integer> { 


} 

Lets do einfachen Test

package inherit; 

/** 
* TODO: Add comment 
* 
* @author Ruslan Ibragimov 
*/ 
public class TestClass { 

    public static void main(String[] args) { 
     TestClass testClass = new TestClass(); 
     testClass.test(new InheritClass()); 
    } 

    private AbstractClass test(AbstractClass aClass) { 
     for (String string : aClass.getStrings()) { 
      System.out.println(string); 
     } 
     return aClass; 
    } 
} 


Make output: 

Error:(16, 51) java: incompatible types 
required: java.lang.String 
found: java.lang.Object 
for (String string : aClass.getStrings()) { 

Warum dies geschieht?

+0

Ich glaube nicht, weil 'getStrings()' 'kehrt Ich wette ' – bsmk

+0

gesetzt, wenn Sie '' Abstract mit unbeschränkten Wildcard erklären, dann wird der Code wahrscheinlich kompilieren. –

+0

@Joe, nein ich gebe explizit den Typ an: "private Set strings = ..." – IRus

Antwort

0

Statt:

private AbstractClass test(AbstractClass aClass) { 

Verwendung

private AbstractClass test(AbstractClass<? extends Integer> aClass) { 

die Compiler beheben und wenn Sie Rückgabewert von getStrings überprüfen() im Code unterstützen, sehen Sie, Set Set beabsichtigen. Könnte auch nützlich sein, lesen Sie den Link von Radiodef in Kommentaren.

+0

'' 'AbstractClass ' '' besser, und das ist nicht essence of die Frage. – IRus

+0

@IRus, ich muss Sie das beheben, deshalb diese Antwort. – Lukino

Verwandte Themen