2010-07-29 16 views
8

Cosa si intende realmente quando si utilizzano i programmi di utilità Data di Java e qualcosa è stato deprecato. Questo significa che è scoraggiato da usare, o implica che sia vietato?Metodi obsoleti per la data in Java?

Immagino sia una cattiva pratica usare metodi deprecati, ma non sono sicuro e volevo scoprirlo.

Per esempio, sto cercando di usare il codice come il seguente

String date = request.getParameter("date"); 
model.setDate(new Date(date)); 

Naturalmente ... questo è un esempio di alto livello, ma in questa situazione, il mio modello utilizza digitare Data ed io è necessario estrarre la data dalla richiesta come stringa e creare una data con essa.

Funziona correttamente come l'ho, ma sta usando un metodo deprecato.

EDIT - sono andato avanti e usato

 
SimpleDateFormat formatter = new SimpleDateFormat(); 
model.setDate(formatter.parse(request.getParameter("date");



La data è nel formato MM/DD/YYY come 07/23/2010 ma sto ottenendo un ParseException

Da dove potrebbe essere?

risposta

6

Hai ragione che si tratta di una cattiva pratica. In quasi tutti i casi, i metodi deprecati indicano invece cosa usare e ciò non fa eccezione (vedere the Javadocs).

Si sta provando a creare un Date su un String. Ma in quale formato è inserita la stringa? Come dovrebbe essere analizzato? È il formato della data nel Regno Unito o negli Stati Uniti?

Il modo "corretto" per fare ciò è creare un'istanza di SimpleDateFormat e chiamare il suo metodo parse() passando nella stringa di testo. Questo è garantito per funzionare in futuro, e sarà più robusto ora.

+4

... o preferibilmente, usare una API migliore come Joda Time :) –

+1

Beh ... sì. :-) Ma suggerire di riscrivere tutto il codice esistente per utilizzare nuovi oggetti Date è eccessivo per * questa * situazione. –

+2

@Jon Skeet, i problemi con l'utilizzo sempre dell'API migliore sono la presenza di una directory di API e il costante controllo delle nuove versioni nei repository. –

-1

Nulla si spezzerà se le usi ... ancora.

Ma potrebbero essere rimossi nelle versioni future.

+0

la maggior parte delle deprecazioni relative alla data sono dovute a bug, quindi le cose potrebbero rompersi a causa dei bug –

2

cosa "deprecato" Indica

Potreste aver sentito il termine, "autoironia", o umorismo che minimizza importanza di chi parla. Una classe deprecata o il metodo è così. Non è più importante . È così poco importante, nel fatto , che non si dovrebbe più utilizzare lo , poiché è stato sostituito e potrebbe cessare di esistere in futuro.

Java fornisce un modo per esprimere disapprovazione perché, come classe si evolve, le sue API (Application Interface di programmazione) inevitabilmente modifiche: metodi vengono rinominati per coerenza, nuovi e migliori metodi sono aggiunti, e campi cambiano . Ma tali modifiche introducono un problema. È necessario il per mantenere la vecchia API fino a quando gli sviluppatori non effettuano la transizione alla nuova , ma non si desidera che continuino a programmare sulla vecchia API per .

La possibilità di deprecare una classe, il metodo o il campo membro risolve il problema . Java supporta due meccanismi per la deprecazione: e un'annotazione, (supportata a partire da J2SE 5.0) e un tag Javadoc (supportato da 1.1). Le chiamate esistenti alla vecchia API continuano a funzionare , ma l'annotazione fa sì che il compilatore emetta un avviso quando trova riferimenti a elementi deprecati del programma . Il tag Javadoc e i commenti associati a avvisano gli utenti contro utilizzando l'elemento ritirato e dicono a loro cosa usare invece. Che cosa usare invece.

http://download-llnw.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html

3

Oggetti o metodi deprecati significa semplicemente che se si desidera utilizzarlo nel progetto corrente, utilizzare piuttosto ciò che è consigliato. Il motivo per cui continuano ad esserlo è per i codici legacy che hanno utilizzato il metodo deprecato prima del perché obsoleto. L'esempio tipico è il metodo StringTokenizer vs String.split().

Per l'esempio Data utilizzare SimpleDateFormat per eseguire la conversione da stringa a data. Ciò consente di creare un formato di data da cui è possibile analizzare la data della stringa per creare un oggetto Date.


Per la vostra EDIT fare questo

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 

model.setDate(formatter.parse(request.getParameter("date"))); 

ParseException è causato poiché non hai fornito una struttura formato data in modo che il SimpleDateFormat non sapeva come è stata strutturata la data.

+0

Non dovrebbe essere MM/gg/aaaa? – CoolBeans

+0

@CoolBeans, vero .... Ho modificato il cambiamento. –

1

Deprecato significa che è pianificato per la rimozione, perché è bacato o qualche altra cattiva ragione. È preferibile utilizzare SimpleDateFormat.parse(); per analizzare le stringhe.

1

In generale, quando Sun (Oracle, qualunque sia) dichiara deprecato un metodo Java, significa che hanno cambiato idea sull'inclusione, che scoraggiano l'utente dall'utilizzo e che potrebbero rimuoverlo in alcune versioni future. Ovviamente è probabile che ci vorrà molto tempo prima che venga rimosso come chissà quanti codici esistenti ci sono là fuori, e quale è il punto di rottura dei programmi esistenti solo perché gli inventori di Java pensano di avere un'idea migliore di come fare qualcosa?

Presumibilmente avevano una buona ragione per deprecare qualcosa, quindi dovresti investigare perché dicono che alcune nuove funzioni sono migliori.

In caso di metodi Date obsoleti, in genere ciò significa che suggeriscono che ora si utilizzano le classi Calendar o SimpleDateFormat. Nel tuo caso, probabilmente quest'ultimo.

2

Hai ragione, è scoraggiato utilizzare metodi obsoleti. Questo perché questi metodi potrebbero presentare problemi in alcune situazioni o sono stati sostituiti con soluzioni più ottimistiche E anche le versioni future potrebbero non supportarle.

0

deprecato: qualcosa che esiste nella versione corrente di Java, ma saranno rimossi da future versioni ad un certo punto.

per la tua modifica, è necessario inizializzare correttamente il SimpleDateFormat, quindi sa che cosa formato è in arrivo per 1978/07/22 formato:.

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

3

Un sacco di persone hanno detto che cosa Deprecated significa, ma non vedo alcuna spiegazione del motivo per cui questi metodi sono obsoleti:

Sun (prima che fossero parte di Oracle) deprecato una serie di metodi in Date per arrivare alle persone di utilizzare i Calendar/GregorianCalendar classi per la manipolazione data anziché.

0

Come detto, i metodi java.util.Date sono stati deprecati perché il team Java riteneva di avere una soluzione migliore in java.util.Calendar.

Sfortunatamente quella classe si è rivelata anche confusa, problematica e mal progettata.

Quindi, sì, è necessario evitare i metodi deprecati in riferimento alle sostituzioni. Ma ora quelle sostituzioni (.Calendar) hanno una sostituzione (java.time).

java.time

Tutte le vecchie classi data-ora sono stati soppiantati dal quadro java.time integrato in Java 8. Le nuove classi sono ispirate dal quadro di grande successo Joda-Time, intesa come il suo successore, simili nel concetto ma ri-architettato. Definito da JSR 310. Esteso dal progetto ThreeTen-Extra. Vedi lo Tutorial.

Utilizzare il pacchetto java.time.format per analizzare e generare rappresentazioni stringa di valori di data e ora.

String input = "07/23/2010"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy"); 

Le nuove classi includono LocalDate per rappresentare un valore di data-solo senza tempo del giorno.

LocalDate localDate = LocalDate.parse(input , formatter); 

Se si chiama toString su un LocalDate si ottiene una rappresentazione di stringa del valore data nel formato ISO 8601, AAAA-MM-DD standard. Per generare una stringa in altri formati, definire un altro formattatore. Oppure chiama i metodi 'localizza' per consentire a java.time di eseguire il pesante sollevamento nel determinare un particolare formato localizzato.

Problemi correlati