Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-03-2006, 15:16   #1
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
[JAVA] Array come elemento di una collection

Domanda veloce su una questione che mi sta confondendo un po': in Java è possibile usare un array come elemento di una collection???
Una cosa del tipo:
Codice:
HashMap<String,Object> map = new HashMap<String,Object>();

int[] arr1 = { 1, 2, 3 };

map.put ("arr1", arr1);
Questo codice compila ok. E poi per estrarre l'array???
Ho provato:
Codice:
int[] arr_out = map.get ("arr1");
ma mi da errore in compilazione.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2006, 15:22   #2
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Quote:
Originariamente inviato da andbin
Domanda veloce su una questione che mi sta confondendo un po': in Java è possibile usare un array come elemento di una collection???
Una cosa del tipo:
Codice:
HashMap<String,Object> map = new HashMap<String,Object>();

int[] arr1 = { 1, 2, 3 };

map.put ("arr1", arr1);
Questo codice compila ok. E poi per estrarre l'array???
Ho provato:
Codice:
int[] arr_out = map.get ("arr1");
ma mi da errore in compilazione.
Stai dichiarando la tua mappa come accettante valori di tipo Object, quindi il metodo get restituisce riferimenti di tipo Object che ovviamente non puoi assegnare senza un cast esplicito a variabili dichiarate diversamente.
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2006, 15:42   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Angus
Stai dichiarando la tua mappa come accettante valori di tipo Object, quindi il metodo get restituisce riferimenti di tipo Object che ovviamente non puoi assegnare senza un cast esplicito a variabili dichiarate diversamente.
Che scemo (che sono) ... è vero!! Un array è-un Object e quindi devo fare il cast esattamente come se avessi messo una String dentro una collezione di Object.
Anzi posso anche fare così:
Codice:
Object o = map.get ("arr1");

if (o instanceof int[])
{
    int[] arr = (int[]) o;
    ....
}
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2006, 15:58   #4
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Oppure dichiarare la mappa come <String, int[]>
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2006, 16:30   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Angus
Oppure dichiarare la mappa come <String, int[]>
Sì, certamente!!! Però io avevo bisogno di una collezione (una Map è proprio quello che mi serve) in cui poter mettere insieme diversi tipi di cose come ad esempio valori Integer, Double, String e array di int o di double.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 07:48   #6
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Quote:
Originariamente inviato da andbin
Sì, certamente!!! Però io avevo bisogno di una collezione (una Map è proprio quello che mi serve) in cui poter mettere insieme diversi tipi di cose come ad esempio valori Integer, Double, String e array di int o di double.
In questo caso la problematica a cui devi stare un po' attento è che quando tiri fuori gli oggetti il casting è diverso per ogni tipo di oggetto che tiri fuori.
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 10:37   #7
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Quote:
Originariamente inviato da andbin
Sì, certamente!!! Però io avevo bisogno di una collezione (una Map è proprio quello che mi serve) in cui poter mettere insieme diversi tipi di cose come ad esempio valori Integer, Double, String e array di int o di double.
Non riesco proprio a trattenere la curiosità e devo chiederti di spiegare, se possibile, il perchè della necessità di un contenitore di oggetti eterogenei di cui non puoi estrapolare un insieme di caratteristiche comuni. Ho il sospetto che questa soluzione puzzi di cattivo design. Non è un'accusa, è solo che nella mia piccola esperienza non ho mai avuto il bisogno di fare una cosa del genere e quindi sono curioso.
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 12:22   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Angus
Non riesco proprio a trattenere la curiosità e devo chiederti di spiegare, se possibile, il perchè della necessità di un contenitore di oggetti eterogenei di cui non puoi estrapolare un insieme di caratteristiche comuni. Ho il sospetto che questa soluzione puzzi di cattivo design. Non è un'accusa, è solo che nella mia piccola esperienza non ho mai avuto il bisogno di fare una cosa del genere e quindi sono curioso.
Certo, te lo spiego subito! Così mi puoi dare magari un tuo parere e anche, eventualmente, un consiglio.

Devo implementare un sistema per passare dei dati (parametri) da una applicazione "C" ad una Java. L'applicazione C è molto grossa ed è sviluppata sia da me (in parte minore) che da altre persone. L'applicazione Java la sto sviluppando adesso io da zero.

Tutte le specifiche me le sto "inventando" io, quindi posso fare un po' come mi pare . Ogni parametro è una associazione nome->valore. I tipi che vorrei gestire, almeno al momento, sono: stringhe, interi, double. Per ognuno di questi tipi posso avere un valore scalare o un array (1 o 2 dimensioni).

Per quanto riguarda il passaggio fisico dei dati, ho pensato di usare un file XML del tipo:
Codice:
<?xml version='1.0' encoding='iso-8859-1'?>
<parameters>
  <parameter type="string" name="nome1" value="aaaa" />

  <parameter type="int[2][2]" name="nome2">
    <values>
      <values>
        <value>123</value>
        <value>456</value>
      </values>
      <values>
        <value>1111</value>
        <value>4444</value>
      </values>
    </values>
  </parameter>
</parameters>
A parte tutta la questione del parsing del file (che non è difficile) alla "fine della fiera" ho poi un oggetto che chiamerò ParametersMap che contiene un TreeMap (ma se non ho bisogno di avere le chiavi ordinate dovrebbe bastare anche un HashMap).
Questa Map ha quindi delle stringhe come chiave e poi ..... direi un Object come valore.
Questo perché dentro posso avere una String, un Integer (che poi converto in int), un Double (che poi converto in double) o un int[], double[][], ecc....

Ti sembra buona come idea o no??? Nel caso non sia una buona idea, cosa sarebbe meglio fare??
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet

Ultima modifica di andbin : 30-03-2006 alle 15:47.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 22:23   #9
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Scusa se rispondo solo adesso. Per come hai esposto il problema direi che non ci sono elementi sufficienti per affermare che il design non è buono... però immagino che ci sia ben più semantica di così.
Per quanto riguarda il formato dell'XML può andare bene, visto che apparentemente non ci sono vincoli.
Non conoscendo l'utilizzo e l'utilizzatore di questi 'parametri', non posso suggerire miglioramenti, se non l'adozione di un'altro tipo di collezione: un'implementazione di List<Parameter>, dove Parameter è un'interfaccia (parametrica?) col metodo getValue().
Questo porterebbe qualche vantaggio anche in fase di progettazione del parser stesso: si potrebbe pensare ad una architettura a plugin dove hai un engine di parsing che si limita a riconoscere i tag <parameter> e in base al suo attributo 'type' cerca nei suoi ParameterParser registrati quello che supporta il valore dell'attributo, per poi delegare ad esso il parsing del tag stesso. Per essere più chiaro:

Codice:
// pseudocodice che presuppone la lettura in 'pull' dei tag XML:
Map<String, ParameterParser> registeredParsers = ...;
List<Parameter> paramList = new ArrayList<Parameter>();
for (String tag : tags) {
  if ("parameter".equals(tag.getName())) {
    String tagType = tag.getAttribute("type");
    paramList.add(registeredParsers.get(tagType).parse(tag));
  }
}
In realtà questo è ancora possibile senza introdurre per forza l'interfaccia Parameter ma, se non hai problemi di performances/risorse, la sua presenza permette di rendere più leggibile il codice e di eventualmente delegargli alcune funzionalità, come la registrazione del rispettivo ParameterParser o eventuali controlli di validità del contenuto del parametro stesso.

La lista è consigliabile perchè più rassomigliante alla fonte dati (stream XML) finchè non ci sono validi motivi per preferirgli la mappa, visto che per gli ordinamenti esistono i metodi sort() della classe Collections che puoi utilizzare in ogni momento.

Spero di esserti stato utile.
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 11:31   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Angus
Scusa se rispondo solo adesso. Per come hai esposto il problema direi che non ci sono elementi sufficienti per affermare che il design non è buono...
È già un buon inizio ... almeno per me!

Quote:
Originariamente inviato da Angus
Non conoscendo l'utilizzo e l'utilizzatore di questi 'parametri'
Lo spiego subito. L'applicazione "C" è un software gestionale a interfaccia "carattere" e naturalmente fa utilizzo di basi di dati ma non ha capacità "grafiche".
La necessità era quello di poter creare dei grafici (diagrammi a barre, a torta, ecc...) e l'idea che mi era venuta è quella di usare Java insieme alla libreria JFreeChart (non so se la conosci). Questa libreria ho già avuto modo di provarla e la trovo molto utile e valida.
In sostanza è per questo motivo che devo creare un piccolo strato software in Java che si occupa di prelevare tutti i dati generati dall'applicazione "C" per poi renderli disponibili ad altre classi (che svilupperò io oppure anche altre persone) che si occuperanno di creare a video i grafici.

Il codice che mi hai postato non mi è chiaro al 100%, comunque ho capito il concetto che volevi esprimere: creare un sistema a plugin in cui una certa classe conosce, a run-time, tutte le classi relative ai parametri e in base al nome del tag XML, richiama la classe corrispondente per delegargli l'elaborazione dei tag. Giusto?
Comunque mi sembra un po' complesso per quello che volevo fare io.

A me invece è venuta in mente la seguente cosa.
Creare una classe astratta GenericParameter che contiene tutti i metodi get/set possibili (es. getString, getInt, getDoubleArray1D, setDouble, ecc...). Ognuno di questi metodi, nella classe astratta, ha come unica implementazione il lancio di una eccezione (es. IllegalOperationException che creo io).
Da questa classe astratta derivo N classi es. StringParameter, DoubleArray1DParameter, ecc...
In queste sottoclassi gestisco solo i metodi che sono "il linea" con il tipo di dato gestito.
A questo punto posso avere un TreeMap<String,GenericParameter>. Nota che preferirei usare una Map invece di una lista. Ad ogni parametro è associato un nome, quindi è una gestione "associativa". Le classi che si occuperanno di creare i grafici, estrarranno i dati "per nome".

Una cosa che si potrebbe obiettare a questo metodo è che per creare un nuovo tipo di dato (sottoclasse), bisogna modificare anche la classe base astratta. È un cattivo design?? Cosa ne pensi??

Quote:
Originariamente inviato da Angus
Spero di esserti stato utile.
Certamente! Grazie.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2006, 02:16   #11
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Quote:
Originariamente inviato da andbin
È già un buon inizio ... almeno per me!

Lo spiego subito. L'applicazione "C" è un software gestionale a interfaccia "carattere" e naturalmente fa utilizzo di basi di dati ma non ha capacità "grafiche".
La necessità era quello di poter creare dei grafici (diagrammi a barre, a torta, ecc...) e l'idea che mi era venuta è quella di usare Java insieme alla libreria JFreeChart (non so se la conosci). Questa libreria ho già avuto modo di provarla e la trovo molto utile e valida.
In sostanza è per questo motivo che devo creare un piccolo strato software in Java che si occupa di prelevare tutti i dati generati dall'applicazione "C" per poi renderli disponibili ad altre classi (che svilupperò io oppure anche altre persone) che si occuperanno di creare a video i grafici.

Il codice che mi hai postato non mi è chiaro al 100%, comunque ho capito il concetto che volevi esprimere: creare un sistema a plugin in cui una certa classe conosce, a run-time, tutte le classi relative ai parametri e in base al nome del tag XML, richiama la classe corrispondente per delegargli l'elaborazione dei tag. Giusto?
Giusto ;-)

Quote:
Comunque mi sembra un po' complesso per quello che volevo fare io.

A me invece è venuta in mente la seguente cosa.
Creare una classe astratta GenericParameter che contiene tutti i metodi get/set possibili (es. getString, getInt, getDoubleArray1D, setDouble, ecc...). Ognuno di questi metodi, nella classe astratta, ha come unica implementazione il lancio di una eccezione (es. IllegalOperationException che creo io).
Da questa classe astratta derivo N classi es. StringParameter, DoubleArray1DParameter, ecc...
In queste sottoclassi gestisco solo i metodi che sono "il linea" con il tipo di dato gestito.
A questo punto posso avere un TreeMap<String,GenericParameter>. Nota che preferirei usare una Map invece di una lista. Ad ogni parametro è associato un nome, quindi è una gestione "associativa". Le classi che si occuperanno di creare i grafici, estrarranno i dati "per nome".
E' un ottimo motivo per preferire una mappa ad una lista.

Quote:
Una cosa che si potrebbe obiettare a questo metodo è che per creare un nuovo tipo di dato (sottoclasse), bisogna modificare anche la classe base astratta. È un cattivo design?? Cosa ne pensi??
E' un cattivo design proprio per le obiezioni che ti sei posto da solo. GenericParameter dovrà essere utilizzata da qualcuno: ti consiglio di immedesimarti per un attimo nell'utilizzatore di tale mappa e degli oggetti contenuti. Prova a scrivere una bozza di codice per creare i tuoi grafici facendo finta che tutta l'infrastruttura precedente sia stata già progettata. Forse così ti verrà un'idea migliore sui metodi che dovrà possedere la classe GenericParameter, o se in realtà magari anche a questo livello ti risulta più semplice usare il concetto di 'delega' del comportamento. L'importante è non perdere mai d'occhio l'utilizzo effettivo delle tue api che intendi 'imporre'.
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
I nuovi Samsung Galaxy Watch 9 si mostra...
Einsten aveva ragione, di nuovo: captate...
Top 10 offerte Amazon: 5 sono partite qu...
AI Conf 2026: l'intelligenza artificiale...
Samsung Galaxy S26 scende a 711,49€: un ...
Dopo il maxi blackout, la Spagna cambia ...
Costa meno di un MacBook e fa molto di p...
Ecco tutti i robot aspirapolvere rimasti...
Più partite da seguire in contemporanea?...
389€ sono veramente pochi per questo PC ...
Vesuvius Challenge: srotolato in digital...
Torna oggi a soli 101,79€ grazie a un co...
Steam Machine: addio al 4K 60 fps. Valve...
Cosa aumenterà di prezzo dopo com...
Altro che 2028: Micron ha blindato prezz...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v