क्लासकास्टएक्सप्शन स्ट्रिंग को कस्टम क्लास में परिवर्तित नहीं किया जा सकता - जावा, स्ट्रिंग, डिक्शनरी, क्लासकास्टेसेप्शन

इस ClassCastException मुझे पागल कर रहा है। विधि का आह्वान करते समय insert() मैंने इसे प्राप्त किया:

Exception in thread "main" java.lang.ClassCastException:
java.lang.String cannot be cast to Rubrica$Pair

उम्मीद है कि कोई भी ज्यादा समय खोने में मदद कर सकता है :)।

class Rubrica implements Dictionary
{
private Object[] v;
private int vSize;
public static int INITSIZE = 1;

/*
verifica se il dizionario contiene almeno una coppia chiave/valore
*/
public Rubrica()
{
v = new Object[INITSIZE];
makeEmpty();
}

private Object[] resize(Object[] v, int length)
{
Object[] newv = new Object[length * 2];
System.arraycopy(v, 0, newv, 0, length);
return newv;
}

/*
svuota il dizionario
*/
public void makeEmpty()
{
for(int i = 0; i < v.length; i++)
v[i] = new Pair(null, -1);

vSize = 0;
}

/*
Inserisce un elemento nel dizionario. L"inserimento va sempre a buon fine.
Se la chiave non esiste la coppia key/value viene aggiunta al dizionario;
se la chiave esiste gia" il valore ad essa associato viene sovrascritto
con il nuovo valore; se key e` null viene lanciata IllegalArgumentException
*/
private Object[] insertionSort(Object[] v, int vSize)
{
for(int i = 0; i < vSize; i++)
{
Comparable temp = ((Pair)v[i]).getName();
int j;

for(j = i; j > 0 && temp.compareTo(((Pair)v[j - 1]).getName()) < 0; j--)
v[j] = v[j - 1];

v[j] = temp;
}

return v;
}

public void insert(Comparable key, Object value)
{
if(vSize == v.length)
v = resize(v, vSize);

if(key.equals(null))
throw new IllegalArgumentException();

int index = binaryKeyIndexSearch(v, vSize, key);
if(index == -1)
v[vSize++] = new Pair((String)key, (long)value);
else
v[index] = new Pair((String) key, (long)value);

v = insertionSort(v, vSize);
}

/*
Cerca nel dizionario l"elemento specificato dalla chiave key
La ricerca per chiave restituisce soltanto il valore ad essa associato
Se la chiave non esiste viene lanciata DictionaryItemNotFoundException
*/
private int binaryKeyIndexSearch(Object[] v, int vSize, Comparable value)
{
return binKeySearch(v, 0, vSize - 1, value);
}

private int binKeySearch(Object[] v, int from, int to, Comparable value)
{
if(from > to)
return -1;

int mid = (from + to) / 2;

Comparable midValue = ((Pair)v[mid]).getName(); //errore

if(value.compareTo(midValue) == 0)
return mid;
else if(value.compareTo(midValue) < 0)
return binKeySearch(v, from, mid - 1, value);
else
return binKeySearch(v, mid + 1, to, value);
}

//classe privata Pair: DO NOT MODIFY!!
private class Pair
{   public Pair(String aName, long aPhone)
{   name= aName;
phone = aPhone;
}
public String getName()
{   return name; }
public long getPhone()
{   return phone; }
/*
Restituisce una stringa contenente
- la nome, "name"
- un carattere di separazione ( : )
- il numero telefonico, "phone"
*/
public String toString()
{   return name + " : " + phone; }
//campi di esemplare
private String name;
private long phone;
}
}

उत्तर:

जवाब के लिए 0 № 1

समस्या इस विधि में है:

private Object[] insertionSort(Object[] v, int vSize)
{
for(int i = 0; i < vSize; i++)
{
Comparable temp = ((Pair)v[i]).getName();
int j;

for(j = i; j > 0 && temp.compareTo(((Pair)v[j - 1]).getName()) < 0; j--)
v[j] = v[j - 1];

v[j] = temp;
}

return v;
}

बारीकी से देखो, आप लिखते हैं temp का नाम v[i] और फिर असाइन करें temp सेवा मेरे v[j]तो अब आपके पास है String के बजाय Pair में v[j]

यदि आपने अपनी सरणी के लिए सही प्रकार का उपयोग किया है, तो आप क्लासकास्ट अपवाद से छुटकारा पा सकते हैं Pair[]। मेरा मतलब है कि अगर आप सब स्वैप करते हैं Object[] सेवा मेरे Pair[] आप रनटाइम में नहीं, संकलन समय में इस प्रकार का गलत असाइनमेंट देखेंगे।


संबंधित सवाल
सबसे लोकप्रिय