Corsi on-line

Java e problemi di collisione tra i packages

In Java è possibile importare globalmente dei packages utilizzando l’asterisco, in questo modo tutte le classi disponibili risulteranno accessibili senza che debba essere effettuata una chiamata esplicita ad ognuna di esse; a livello architetturale il linguaggio è stato strutturato in modo che ad un’importazione non corrisponda un inserimento, per cui l’importazione globale non rappresenterà un caricamento delle classi ma semplicemente un riferimento alla possibilità del loro utilizzo. Disporre di un gran numero di classi potrebbe però creare dei confilitti al momento della compilazione.

Tali malfunzionamenti sono chiamati collisioni e si verificano in particolare quando due packages presentano la stessa classe e il compilatore non è in grado di risolvere l’ambiguità generata dal non poter stabilire quale classe adottare; un semplice esempio di tale fattispecie è l’importazione combinata in uno stesso sorgente dei package java.util e java.sql:

import java.util.*;
import java.sql.*;

Entrambi infatti presentano la classe Date (java.util.Date e java.sql.Date), per cui, si verificherà una collisione nel momento in cui verrà effettuata un’istanza come la seguente:

Date dt = new Date();

Il problema evidenziato potrà essere risolto in due modi differenti, il primo consiste nell’effettuare l’importazione esplicita della classe:

import java.util.*;
import java.sql.*;
import java.sql.Date;

In questo modo l’istanza precedentemente mostrata richiamerà (java.sql.Date), ma si avrà una tripla importazione della stessa classe (nei due packages e nel riferimento esplicito); per non dover effettuare importazioni aggiuntive la specifica della classe dovrà avvenire direttamente al momento dell’istanza:

import java.util.*;
import java.sql.*;
java.util.Date date = new java.util.Date();

Nessuna delle due soluzioni è preferibile in assoluto rispetto all’altra a meno che non si desideri utilizzare la classe Date di un package specifico.

Post correlati
I più letti del mese
Tematiche