So hatte ich ein Programm, das auf Java 7 gut funktionierte, aber es konnte nicht mit einem Fehler in Java 8 kompilieren. Also, ich ging durch Java Kompatibilitätsprobleme und ich denke, ich habe den Grund herausgefunden (Oder habe ich? http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7144506). Ich möchte wissen, ob es eine kurze und effiziente Möglichkeit gibt, zu replizieren, was mein ursprüngliches Code-Snippet mit Java 8 macht. Hier ist ein Programm, das die Situation darstellt. In meinem Code gibt es eine Setter-Methode, die das Array füllt und ich habe keine Kontrolle darüber, wie sie gefüllt wird.Java 8 Kompatibilitätsproblem: Wie Objekt Array zu Subtype-Liste in Java 8 konvertieren?
import java.util.List;
import java.util.Arrays;
public class HelloWorld{
public static void main(String []args){
B someObject=new B();
List<A> a = someObject.getA() == null ? Collections.EMPTY_LIST : Arrays.asList(someObject.getA());
for (A item : a) {
System.out.println(item.value);
}
}
}
class A{
String value;
public A(String value){
this.value = value;
}
}
class B{
Object[] getA(){
Object arr[]= new Object[4];
arr[0]=new A("hello");
arr[1]=new A("mello");
arr[2]=new A("jello");
arr[3]=new A("cello");
return arr;
}
}
Der Fehler natürlich infrage kommen:
HelloWorld.java:8: error: incompatible types: bad type in conditional expression
List<A> a = someObject.getA() == null ? Collections.EMPTY_LIST : Arrays.asList(someObject.getA());
^
inference variable T has incompatible bounds
equality constraints: A
lower bounds: Object
where T is a type-variable:
T extends Object declared in method <T>asList(T...)
Note: HelloWorld.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
Ich brauche ein (vorzugsweise eine Zeile/elegant) alternative Verfahren, die auch wirksam ist, das gleiche zu erreichen.
EDIT: Um zu klären. Ich kann nicht kontrollieren, was Klasse B mir zurückgibt. Ich kann auch Klasse A nicht ändern (ich glaube nicht, dass das in jedem Fall helfen könnte). Ich kann nur kontrollieren, was HelloWorld macht.
* Ich habe keine Kontrolle darüber, wie es ausgefüllt wird *: Bedeutet das, dass Sie keine Ahnung haben, ob alles, was es enthält, Instanzen von A ist? Was möchten Sie tun, wenn es Strings oder Ganzzahlen anstelle von As enthält? –
Sie haben die erste Frage beantwortet, aber nicht die zweite. Wenn das Array von Objekten etwas anderes als Instanzen von A enthält, was sollte Ihre Methode tun? –
@ jb-nizet Nein, ich weiß sicher, dass es Instanzen von A enthält, nur dass ich es nicht kontrollieren kann. Grüße. –