Java 7 jeneriklerini öğreniyorum, Cay Horstmann'ı okuyoruz, Core Java7, Cilt I, sayfa 716. Neden çalışma zamanı hatası anlayamıyorum yasadışı) oluşur, lütfen aşağıdaki kodlara bakın. Bana bunu Cay'ın yaptığıdan daha iyi anlatabilir mi? Oluşturduğunuz fiili tipi, Object[]
bir Comparable
DEĞİLDİR çünküCay Horstmann'dan Java jenerikleri, Temel Java 7, Cilt I, sayfa 716
public class ProcessArgs
{
public static <T extends Comparable> T[] minmax(T... a)
{
Object[] mm = new Object[2];
mm[0] = a[0];
mm[1] = a[1];
if (mm[0] instanceof Comparable)
{
System.out.println("Comparable"); // this is True, prints Comparable at run-time
}
return (T[]) mm; // run-time error here
/* Run-Time ERROR as below:
ComparableException in thread "main"
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
at ProcessArgs.minmax(ProcessArgs.java:13)
at ProcessArgs.main(ProcessArgs.java:18)
*/
}
public static void main(String[] args)
{
String[] sa = minmax("Hello","World"); // ERROR, illegal cast
System.out.println(sa[0] + sa[1]);
Object o = "Hello World"; //works - if we comment out the method call to minmax above
Comparable<String> s = (Comparable) o; // works
Comparable s2 = (Comparable) o; // works
System.out.println(s + " " + (String) s2); // works
return;
}
}
Ancak ifade: if (mm [0] instanceof Karşılaştırılabilir) doğru döndürür, kodumda, T ... a'nın genel tür silme değeri Karşılaştırılabilirdir. –
ayrıca: Bunu Object [] 'den şuna değiştirirsem: Karşılaştırılabilir [] mm = new Comparable [2]; Object [] yerine hala çalışma zamanında hata alıyorum [Ljava.lang.Comparable; [Ljava.lang.String; –
mm [0] dizideki bir öğedir. Dizinin kendisi değil, kodda daha sonra yayınlamaya çalıştığınız şey bu. – markspace