2012-12-05 6 views
9

Con Java, esiste un modo per creare una classe personalizzata che può utilizzare l'accessor [] come una matrice?C'è un modo per creare una classe personalizzata che può avere [] usato su di esso in Java, in modo simile a un array?

gamma normale

int[] foo = int[5]; 
foo[4] = 5; 
print(foo[4]); 
//Output: "5" 

classe personalizzata

class Bar { 
    //Custom class that uses index as a ref 
} 

Bar foo = new Bar(5); 
foo.set(4, 5); 
print(foo[4]); 
//Output: "5" 
+5

Vorrei ... Se fosse possibile sovrascrivere '[]', non saremmo bloccati con il brutto 'list.get (5)' e 'str.charAt (6)'? .. – dasblinkenlight

+0

No , Continuo a sentire voci che il sovraccarico dell'operatore sarà in una versione successiva di Java, tuttavia onestamente non penso che lo sarà. –

+0

Come nota a margine, guardate in modo fantastico :) –

risposta

15

No, non è possibile sovraccaricare [] operatore per le classi in Java. Ma puoi creare getter per il tuo array.

6

No, Java non ha sovraccarico dell'operatore.

4

No, dovrai implementare il tuo metodo public <Type> get(int index){ ... }, ad esempio, come ad esempio ArrayList.

-4

Certo,

provare

Bar[] foo = new Bar[4]; 
foo[2] = new Bar(); 
System.out.print(foo[2]); 

saluti

+4

Molto divertente ... (no, non sono il downvoter). – dasblinkenlight

+0

perché ragazzi -? –

+2

Sei molto sbagliato. – Lucas

1

No, per fare questo Java avrebbe dovuto aggiungere l'overloading degli operatori di [ e ] - è necessario utilizzare i metodi equivalenti get/set anziché.

Non esiste alcun piano corrente che conosca per implementare l'overloading dell'operatore per qualsiasi versione futura di Java: non è sicuramente nel piano per Java 8 e i colloqui che Oracle ha fornito su Java 9 e oltre non includono piani per sia Personalmente non ne sono un fan - introduce molte complicazioni come la precedenza e l'ordine che possono portare a bug sottili e fastidiosi a meno che gli utenti non siano incredibilmente attenti e (se sei d'accordo con questa posizione o meno) credo che questo sia stato il ragione per cui è stata presa la decisione di escluderla dalla lingua in primo luogo.

+0

L'overloading dell'operatore generale ha alcuni problemi, ma la maggior parte di essi deriva dal fatto che non è intrinsecamente chiaro se 'thing1 + thing2' debba essere definito in thing1 o thing2. Al contrario, è molto più chiaro che 'thing1 [thing2]' dovrebbe essere definito in 'thing1'. – supercat

Problemi correlati