Domanda Quando utilizzare la classe wrapper e il tipo primitivo


Quando dovrei andare per la classe wrapper su tipi primitivi? O su quale circostanza dovrei scegliere tra wrapper / tipi primitivi?


66
2017-10-15 05:16


origine


risposte:


Altri hanno menzionato che alcuni costrutti come Collections richiedono oggetti e gli oggetti hanno un sovraccarico maggiore rispetto alle loro controparti primitive (memoria e boxe).

Un'altra considerazione è:

Può essere utile per inizializzare gli oggetti in null o inviare null parametri in un metodo / costruttore per indicare lo stato o la funzione. Questo non può essere fatto con i primitivi.

Molti programmatori inizializzano i numeri su 0 (predefinito) o -1 per significare questo, ma a seconda dello scenario, questo potrebbe essere errato o fuorviante.

Questo stabilirà anche la scena per a NullPointerException quando qualcosa viene utilizzato in modo errato, che è molto più facile da programmare rispetto a qualche bug arbitrario lungo la linea.


51
2017-10-15 05:36



Generalmente, dovresti usare tipi primitivi a meno che tu bisogno un oggetto per qualche motivo (ad es. inserire una collezione). Anche in questo caso, considera un approccio diverso che non richiede un oggetto se si desidera massimizzare le prestazioni numeriche. Questo è consigliato da la documentazione, e Questo articolo dimostra come il box automatico possa causare notevoli differenze di prestazioni.


12
2017-10-15 05:18



A mio parere, se i miei membri della classe sono variabili wrapper, non si basa su valori predefiniti, che sono comportamenti compatibili con gli sviluppatori.

1.

class Person {
   int SSN ; // gets initialized to zero by default 
}

2.

class PersonBetter {
  Integer SSN; //gets initialized to null by default
}

Nel primo caso, non è possibile mantenere il valore SSN non inizializzato. Potrebbe danneggiare se non stai controllando se il valore è stato impostato prima di tentare di usarlo.

Nel secondo caso, è possibile mantenere SSN inizializzato con null. Quale può portare a NullPointerException ma è meglio che inserire inconsapevolmente valori predefiniti (zero) come SSN nel database ogni volta che si tenta di utilizzarlo senza inizializzare il campo SSN.


7
2017-09-08 07:04



Userei i tipi di wrapper solo se necessario.

Usandoli non guadagni molto, oltre al fatto che lo sono Objects.

Inoltre, si perdono sovraccarichi nell'utilizzo della memoria e nel tempo trascorso a inscatolare / annullare la condivisione.


6
2017-10-15 05:21



Le raccolte sono il caso tipico dei semplici oggetti wrapper Java. Tuttavia, si potrebbe considerare di dare al Wrapper un significato più specifico nel codice (oggetto valore).

IMHO c'è quasi sempre un vantaggio nell'usare oggetti valore quando si riduce alla leggibilità e alla manutenzione del codice. L'involucro di strutture dati semplici all'interno di oggetti quando hanno determinate responsabilità spesso semplifica il codice. Questo è qualcosa che è molto importante in Design guidato da domini.

C'è ovviamente il problema delle prestazioni, ma io tendo ad ignorarlo fino a quando non avrò la possibilità di misurare le prestazioni con dati corretti e fare azioni più dirette verso l'area problematica. Potrebbe anche essere più facile capire il problema delle prestazioni se il codice è facile da capire.


3
2017-10-15 06:25



prestazione di applicazioni che sono dominate da calcoli numerici possono trarre grandi benefici dall'uso di primitive.

tipi primitivi, uno usa l'operatore ==, ma per wrapper la scelta migliore è chiamare il metodo equals ().

"Tipi primitivi considerati dannosi" perché mescolano "semantica procedurale in un modello orientato agli oggetti altrimenti uniforme.

Molti programmatori inizializzano i numeri su 0 (predefinito) o -1 per significare questo, ma a seconda dello scenario, questo potrebbe essere errato o fuorviante.


2
2018-05-29 06:42



Se si desidera creare un tipo di valore. Qualcosa come un ProductSKU o AirportCode.

Quando un tipo primitivo (stringa nei miei esempi) definisce l'uguaglianza, vorrai sovrascrivere l'uguaglianza.


1
2017-10-15 05:20