lunedì 26 gennaio 2015

The New Agile: Perché è Agile così popolare?

La zona Agile è presentato da Atlassian e Nuova Relic . Imparare a fare Agile nel modo giusto .
E 'il nome di fresco? E 'i successi attuali? È disegni con un sacco di loop in loro?

Potrebbe essere tutto, ma prima di tutto, ci sono la (e forse il non reale) valore percepito di agile che le organizzazioni vogliono. Diamo un'occhiata a quelli:

Riduzione dei rifiuti - Quando magra è stato dato il suo nome, è stata una decisione genio del marketing. Magra crea il concetto di "fare di meno con più" che i dirigenti piace tanto. Le organizzazioni oggi sono così occupati con mitigazione del rischio (molto di più di innovazione), che la riduzione dei costi sembra come il percorso per la sopravvivenza. Riduzione dei rifiuti aiuta a ridurre i costi, lo sanno tutti. A volte le aziende dimenticano che, al fine di eliminare gli sprechi è necessario investire in un miglioramento continuo, che non è piccolo investimento. Ma ricordate, stiamo parlando di attrazione percepito, non ciò che realmente accade il giorno dopo.
Maggiore velocità - Agile riduce il time to market. Come può fare questa magia senza aumentare la velocità, o come si fa a chiamare ragazzi, "velocità"? Agile fa sembrare che siamo in grado di trasformare la grande nave in modo rapido, e saltare 500 miglia in un solo salto. Proprio come ai vecchi tempi, l'investimento e l'impegno a far si sono ignorate in quel punto. Velocità tuttavia, può ora essere misurato, perché Velocity! Così possiamo indirizzare velocità e vedere come possiamo aumentare! Ecco dove la pressione aumenta di gestione e squadre iniziano di gioco il sistema e tutti i tipi di cose orribili accadere. Ma hey, questo è il problema del realizzatore.
Miglioramento della produttività - il vago sorella di velocità. Tutti vogliono essere più produttivi, ma nessuno in realtà ha trovato un modo per misurare efficacemente la produttività. La verità è, la produttività non importa più di tanto, è più circa l'efficacia. Siamo in grado di costruire il prodotto sbagliato molto in fretta, ma poi siamo né produttivo o efficace. Ancora ad occhio nudo e l'orecchio, è una delle vittorie percepiti di agili.
Migliorata Decision Making - È qui che la saggezza delle folle vince. Se ognuno sta facendo agile, che deve essere la cosa giusta da fare. Se le organizzazioni di successo vanno agili, hanno fatto alcuni grandi decisioni, e apparentemente agile li hanno aiutati, perché hanno migliorato. Vogliamo che troppo! Si noti che questa è una correlazione, non causalità, sì? Ma non lasciate che confonderci. L'aura di saggezza non è solo un bene per motivi politici all'interno dell'organizzazione. Sembra anche interessante per le persone che decidono di lavorare hanno probabilmente sentito la stessa cosa agile, e con questa aura, un'organizzazione attirerà i candidati migliori.
Maggiore fiducia - Un'organizzazione agile può ruotare in qualsiasi momento a causa di agilità. Come sappiamo già dall'ultimo punto, rende le decisioni migliori, li può cambiare in caso di errore, e reagire rapidamente al mutare delle condizioni. Che trasuda di fiducia. È possibile effettuare solo decisioni coraggiose con agilità. Così le organizzazioni agili sembrano in grado di prendere decisioni coraggiose, e ci piace questo tipo di leadership, non è vero? Quello che non esita. Ci piace vincitori e odori agili come vincente.
Migliorata la fiducia e la sicurezza - Stiamo andando più in profondità, come ci siamo spostati da P & L regno di persone nell'organizzazione. Team auto organizzazione devono avere fiducia reciproca, e la gestione in loro. La gente vuole lavorare in un ambiente ad alta fiducia. La gente vuole essere in grado di fallire e imparare, e non avere picchiato con bastoni quando non falliscono. Fiducia e sicurezza sono valori desunti, piuttosto che percepite direttamente. Sono grandi attrattori di talenti. Ma caveat emptor: Questa deduzione dovrebbe essere controllato se è vero, prima di saltare nave per una cosiddetta organizzazione agile.
Per gli ultimi 15 anni, Agile è salito a essere il metodo di scelta, perché era interessante. Con certificazioni , è stato sostenuto anche da metodologia di business stabile di gestione dei talenti. Come si può vedere, nessuno vorrebbe qualcos'altro. Ma abbastanza cinismo (almeno per ora), dopo tutto quello che è il vecchio agile.

Nelle prossime puntate, ci scaviamo più a fondo la realizzazione effettiva all'interno delle organizzazioni agili, e che cosa significa per il futuro del lavoro dell'organizzazione.

giovedì 15 gennaio 2015

Come emulare la mediana () Funzione di aggregazione Utilizzando inverse Funzioni di distribuzione

Alcuni database sono sufficienti per implementare la impressionante MEDIANA () funzione di aggregazione. Ricordate che la mediana () è sligthly diverso da (e spesso più utile) del MEDIA () o AVG () (media).

Mentre la media è calcolato come SUM (exp) / COUNT (exp) , la mediana () indica che il 50% di tutti i valori del campione sono superiori alla mediana () , mentre l'altro 50% del set sono inferiori la mediana () .

Quindi, in altre parole, se si prende la seguente query:

Visualizza sorgentestampare ?
01.
A t (valore) AS (
02.
SELEZIONARE 1   DA DUAL UNION ALL
03.
SELEZIONA 2   DA DOPPIO UNION ALL
04.
SELEZIONA 3   FROM DUAL
05.
)
06.
SELEZIONA
07.
avg (valore),
08.
mediana (valore)
09.
DA
10.
t;
... Allora sia media e mediana sono gli stessi:

Visualizza sorgentestampare ?
1.
mediana avg
2.
2 2
Ma se pesantemente inclinare i tuoi dati come questo:

Visualizza sorgentestampare ?
01.
A t (valore) AS (
02.
SELEZIONARE 1   DA DUAL UNION ALL
03.
SELEZIONA 2   DA DOPPIO UNION ALL
04.
SELEZIONA 100 FROM DUAL
05.
)
06.
SELEZIONA
07.
avg (valore),
08.
mediana (valore)
09.
DA
10.
t;
Allora la vostra media sarà anche distorta, mentre il vostro mediana sarà ancora indicare dove la maggior parte dei valori sono nel campione

Visualizza sorgentestampare ?
1.
mediana avg
2.
34,333 2
Il campione di cui sopra è ovviamente statisticamente insignificante, ma si può facilmente capire che l'effetto può essere drammatico e rilevante, se si dispone di più dati:

Licenza dell'immagine CC-BY-SA 3.0.  Caricato a Wikipedia per Cmglee
Licenza dell'immagine CC-BY-SA 3.0. Caricato a Wikipedia per Cmglee

L'effetto inclinazione è molto importante in statistica e per rendere qualsiasi delle rivendicazioni interessante nulla, utilizzando percentili è spesso più utile utilizzando medie. Prendete il reddito medio rispetto al reddito medio di un paese, per esempio. Mentre il reddito medio negli Stati Uniti (e in molti altri paesi) è in costante aumento, il reddito mediano ha visto un calo negli ultimi dieci anni . Ciò è dovuto alla ricchezza di essere fortemente sbilanciata verso il super-ricchi sempre più.

Questo blog non è di politica ma di Java e SQL, così torniamo nel calcolo dei fatti reali.

Utilizzo precentiles in SQL
Come abbiamo visto prima, la mediana () divide il campione in due gruppi della stessa dimensione e assume il valore "tra" i due gruppi. Questo valore particolare viene anche chiamato il 50 ° percentile per il 50% di tutti i valori del campione sono inferiori al MEDIANA () . Possiamo quindi stabilire:

MIN (exp) : Il 0-percentile
MEDIANA (exp) : Il 50 ° percentile
MAX (exp) : Il 100 ° percentile
Tutto quanto sopra sono casi particolari di percentili, e mentre MIN () e MAX () sono supportati in tutti i database SQL (e lo standard SQL), MEDIANA () non è nello standard SQL e supportato solo dalle seguenti banche dati jOOQ :

CUBRID
HSQLDB
Oracolo
Sybase SQL Anywhere
C'è un altro modo di calcolare il MEDIANA () in particolare, e qualsiasi tipo di percentile, in generale, nello standard SQL, e dal momento che PostgreSQL 9.4 anche in PostgreSQL utilizzando ...

Ordinato-impostare le funzioni di aggregazione
È interessante notare che, a parte le funzioni della finestra , è anche possibile specificare ORDER BY clausole ad alcune funzioni di aggregazione che aggregano i dati basati su insiemi ordinati.

Una tale funzione è lo standard SQL PERCENTILE_CONT funzione, che prende il percentile come argomento, e poi accetta un ulteriore all'interno del gruppo clausola che prende un ORDER BY clausola come argomento. Queste particolari funzioni insieme ordinato sono chiamati anche funzioni di distribuzione inverse , perché vogliamo trovare dove un particolare percentile si trova nella distribuzione di tutti i valori del campione ( se non hai paura della matematica, controllare l'articolo wikipedia )

Così, in PostgreSQL 9.4+, la mediana () funzione può essere emulato in questo modo:

Visualizza sorgentestampare ?
01.
A t (valore) AS (
02.
SELEZIONA 1   UNION ALL
03.
SELEZIONA 2   UNION ALL
04.
SELEZIONA 100
05.
)
06.
SELEZIONA
07.
avg (valore),
08.
PERCENTILE_CONT (0,5) ENTRO GROUP ( ORDER BY valore)
09.
DA
10.
t;
Questa sintassi interessante è standardizzato e può essere conosciuto per alcuni di voi da LISTAGG di Oracle () , che consente di aggregare i valori in stringhe concatenati:

Visualizza sorgentestampare ?
01.
A t (valore) AS (
02.
SELEZIONARE 1   DA DUAL UNION ALL
03.
SELEZIONA 2   DA DOPPIO UNION ALL
04.
SELEZIONA 100 FROM DUAL
05.
)
06.
SELEZIONA
07.
listagg (valore, ',' ) ENTRO GROUP ( ORDER BY valore)
08.
DA
09.
t;
Questa interrogazione produce semplicemente:

Visualizza sorgentestampare ?
1.
listagg
2.
---------
3.
1, 2, 100
Su un lato nota: LISTAGG () è, ovviamente, del tutto inutile, perché restituisce VARCHAR2 , che ha ancora una lunghezza massima di 4000 in Oracle. Inutile ...

Emulazione out-of-the-box con jOOQ
Come sempre, jOOQ emulerà questo genere di cose fuori dalla scatola. È possibile utilizzare il DSL.median () la funzione, o con l'imminente jOOQ 3.6, la nuova DSL.percentileCont () funzione per produrre lo stesso valore:

Visualizza sorgentestampare ?
1.
DSL.using (configurazione)
2.
. selezionare (
3.
mediana (T.VALUE),
4.
percentileCont (0,5) .withinGroupOrderBy (T.VALUE)
5.
)
6.
. da (T)
7.
. prendere ();
jOOQ è il modo migliore per scrivere SQL in Java

venerdì 9 gennaio 2015

I modi più veloci per aprire i redattori in Eclipse utilizzando la tastiera

Qualcosa si fa un sacco in Eclipse è file aperti come classi, file XML e file di proprietà in editor. Ma usando il mouse per cacciare nella gerarchia delle cartelle Package Explorer richiede molto tempo, soprattutto se hai dimenticato dove si trovano i file. Il problema peggiora le più progetti ei file che avete nel vostro spazio di lavoro, quindi ci deve essere un modo migliore di aprire redattori.

Fortunatamente, Eclipse ha un certo numero di modi per aprire i redattori facilmente utilizzando la tastiera. Coppia questi con una gran quantità di scorciatoie da tastiera per navigare tra i redattori una volta che li hai aperto, e hai abbastanza strumenti per stare lontano dal mouse e fare la codifica andare molto più veloce. Parlerò alcune delle opzioni più efficienti e quindi dare una sintesi di quando usare quale metodo.


Pubblicità



Risorse aperte

Probabilmente il modo più efficace per aprire un file in un editor è quello di utilizzare la funzionalità Apri Resource. Se c'è una funzione che si desidera utilizzare ogni giorno, è questo.

Quando si preme Ctrl + Maiusc + R , si ottiene una finestra che ti permette di cercare tutti i file attualmente presenti nella tua area di lavoro. Potete trovare tutti i file come classi, XML, HTML, proprietà e altri file. Ecco un esempio:



Per trovare un file, iniziare a digitare il suo nome e una volta che è stato selezionato, basta premere Invio . Eclipse filtra i file durante la digitazione, in modo da poter vedere immediatamente se il file viene visualizzato nell'elenco. È anche possibile scorrere l'elenco premendo i Su e Giù le frecce, anche se la casella di ricerca ha l'attivo (es. non è necessario utilizzare Tab per passare alla lista).

La casella di ricerca supporta i caratteri jolly, quindi è possibile digitare * Dao per la ricerca di tutti i file che contengono la parola Dao . Se non si includono i caratteri jolly (* e?) Poi Eclipse farà una corrispondenza diretta della stringa immessa per i file nel tuo spazio di lavoro. La ricerca non è case-sensitive, però, così non devi preoccuparti di caso cammello.

Tipi aperte

Quando si preme Ctrl + Maiusc + T , si ottiene una finestra di dialogo simile alla finestra di dialogo Apri Risorse chiamato la finestra di dialogo Apri Tipi. Ecco un esempio:



Come la finestra di dialogo Apri Resource mostra un elenco di risorse che corrispondono alla tua ricerca di testo. Tuttavia, solo mostra Java tipi (es. classi, enums, interfacce, ecc). Non mostra nessun altro file dello spazio di lavoro, come i file HTML o XML. L'altra differenza è che mostra tipi Java sia dal vostro spazio di lavoro e le librerie di riferimento, tra cui 3rd party e classi della libreria Java.

Simile alla finestra di dialogo Apri Resources, questo dialogo supporta anche i caratteri jolly, ma va oltre, sostenendo di casi cammello ricerche. Ad esempio, se si desidera cercare NullPointerException , è possibile digitare NPE e Eclipse sarà filtrare le tipologie in base al loro nomi in cammello maiuscole e minuscole. Si noti che digitando Npe non restituirà gli stessi risultati, come i casi di cammelli sono diversi.

La finestra di dialogo Apri Tipi è ideale per l'apertura rapida classi 3a parte o incorporate in classi Java, come ArrayList o String .

Aprire Dichiarazione & Implementation (tipo rapido gerarchia)

Se si preme F3 (Open dichiarazione) mentre il cursore si trova su un tipo Java ad esempio una classe, metodo o campo, Eclipse si aprirà la dichiarazione del tipo (se non è ancora aperto) e passare alla definizione. Nell'esempio riportato di seguito, premendo F3 sul metodo length () si aprirà String.class e vi porterà alla realizzazione di String.length () .

String name = "" ;
se  (diverrà name.lenght ()> 0 ) {...}
Ma aperta dichiarazione non è sempre sufficiente. Ad esempio, se si chiama il metodo su un'interfaccia, ad es. l' add () metodo di List , F3 vi porterà l'interfaccia List e la posizione voi sulla add () metodo. Ma spesso si vuole realmente andare in una delle implementazioni di add () , ad es. ArrayList.add () .

In questo caso è possibile visualizzare il tipo di rapida Gerarchia ( Ctrl + T ), sul metodo e scegliendo l'attuazione specifica che si desidera. Discuto Tipo rapida Gerarchia in modo più dettagliato in modo da trovare tutti i metodi che non utilizzano un certo metodo di una classe , ma ecco un breve esempio di quello che vedrete:

Tipo rapida Gerarchia Esempio

Bonus Suggerimento: Per accedere l'equivalente del mouse di queste 2 funzioni, tenere premuto Ctrl e posiziona il mouse sopra l'elemento che si desidera. Eclipse sarà sottolinearlo, che consente di fare clic sull'elemento. Se l'elemento non ha implementazioni aggiuntive, Eclipse vi porterà automaticamente alla sua unica dichiarazione. Se ci sono una o più implementazioni, si otterrà un menu a comparsa che vi offre la possibilità di aprire o dichiarazione o esecuzione, ad esempio:



Menziona rapida

Qui ci sono alcune altre caratteristiche che si possono trovare utili di volta in volta.

Aprire Super Implementazione : Quando sei posizionato in una sottoclasse che sostituisce un metodo della superclasse, è possibile scegliere Naviga> Apri Attuazione Super dal menu delle applicazioni per passare al metodo del super. È possibile configurare una scorciatoia per questo, cercando per il comando Apri attuazione Super nella finestra di preferenze Keys. In alternativa, premere Alt-N, S per invocare tramite istruzioni di menu (anche se questo non è affidabile come la configurazione di un collegamento).
Open Type Gerarchia : Il tipo di gerarchia mostra un albero che rappresenta la gerarchia di una classe (ad esempio superclassi e sottoclassi.). Basta premere F4 mentre posizionato su un nome di classe e la vista Gerarchia Type si aprirà. Da lì si può passare direttamente ad alcune classi e metodi nella gerarchia tipo.
File recenti : Se avete accidentalmente chiuso un file è ancora necessario, basta premere Alt + F e quindi il numero del file come indicato sul menu File. Eg. Alt + F, 1 vi porterà al file più recente apertura.
Spettacolo in : Utilizzando le scorciatoie per aprire i redattori, non è necessario fare affidamento sulla Explorer pacchetto molto più, quindi è un buon candidato per diventare una visione veloce, che potrebbe risparmiare un sacco di spazio sullo schermo . Ma se si vuole aprire l'editor corrente nel Explorer pacchetto, basta premere Alt + Maiusc + W, P , e Eclipse sarà immediatamente individuare il file in Esplora Package .
Pubblicità


Quale dovrei usare quando?

Se non avete abbastanza tempo per imparare tutti questi, ecco una breve guida su dove cominciare e quando utilizzarli.

Per veloce, tutti i giorni, uso generale, utilizzare Open Resource. Io lo uso per aprire tutte le risorse, anche i tipi di Java perché l'elenco mostra solo le classi nel mio lavoro, che rende la ricerca più veloce. Sicuramente worthwile imparare.
Se navighi codice (ad es. Nel corso di una revisione del codice o di debug) quindi dichiarazione aperta e Type rapida Gerarchia sono molto utili soprattutto se combinato con Open Resource.
Se si desidera visualizzare gerarchie di classi (ad es. Sottoclassi o superclassi), utilizzare Open Type Gerarchia, Open Attuazione Super o Open rapida Gerarchia. Sono non solo un buon modo di aprire le risorse, ma anche di farsi un'idea della gerarchia di classi e, quindi, il vostro disegno.
Se stai cercando di aprire le classi 3a parte o Java classi incorporate, provare a usare aperta dichiarazione (F3), perché le probabilità sono probabilmente sarete nella parte del codice che utilizza queste classi. Tuttavia, se non sei da nessuna parte vicino il codice, utilizzare Open Type.
Tenere presente, inoltre, che è possibile cambiare la scorciatoia da tastiera su una qualsiasi delle caratteristiche sopra verificando come gestire le scorciatoie da tastiera e con i nomi dei comandi appropriati per cercare e modificare la chiave.

lunedì 5 gennaio 2015

Tre metodi comuni generati in tre Java IDE

In questo post, guardo le differenze nei tre metodi "comuni" [ equals (Object) ,  hashCode () e  toString () ] come generato da  NetBeans  8.0.2 ,  IntelliJ IDEA  14.0.2 , e  Eclipse  Luna  4.4.1 . L'obiettivo non è quello di stabilire quale sia il migliore, ma per mostrare i diversi approcci si possono utilizzare per l'attuazione di questi metodi comuni. Lungo il percorso, alcuni spunti interessanti potranno essere ritirati quanto riguarda la creazione di questi metodi comuni in base a ciò IDE assumere e spingono lo sviluppatore per impostare.

NetBeans 8.0.2


NetBeans 8.0.2 permette alle proprietà del progetto per essere configurato per supportare la piattaforma JDK 8 e aspettarsi JDK 8 formattazione originale, come illustrato nei prossimi due fotografie istantanee dello schermo.


Codice viene generato in NetBeans 8.0.2 cliccando su Fonte | Codice Inserisci (o sequenze di tasti Alt + Insert).


Quando si genera i metodi  Equals (Object) ,  hashCode () e  toString () , NetBeans 8.0.2 chiede per gli attributi da utilizzare in ciascuno di questi metodi generati come illustrato nei prossimi due fotografie istantanee dello schermo.


I metodi di NetBeans-generati approfittare del  JDK 7-introdotto  oggetti  di classe.

NetBeans generati hashCode () Metodo per la classe NetBeans802GeneratedCommonMethods.java

Override
public int hashCode ()
{
   int hash = 5;
   hash = 29 * hash + Objects.hashCode (this.someString);
   hash = 29 * hash + Objects.hashCode (this.timeUnit);
   hash = 29 * hash + this.integer;
   hash = 29 * hash + Objects.hashCode (this.longValue);
   ritorno hash;
}
NetBeans generate equals (Object) Metodo di Classe NetBeans802GeneratedCommonMethods.java

Override
boolean pubblico Equals (Object obj)
{
   if (obj == null)
   {
      return false;
   }
   if (getClass ()! = obj.getClass ())
   {
      return false;
   }
   NetBeans802GeneratedCommonMethods finali altro = (NetBeans802GeneratedCommonMethods) obj;
   if (! Objects.equals (this.someString, other.someString))
   {
      return false;
   }
   if (this.timeUnit! = other.timeUnit)
   {
      return false;
   }
   if (this.integer! = other.integer)
   {
      return false;
   }
   if (! Objects.equals (this.longValue, other.longValue))
   {
      return false;
   }
   return true;
}
NetBeans-Generated toString () metodo per la classe NetBeans802GeneratedCommonMethods.java

Override
public String toString ()
{
   ritorno "NetBeans802GeneratedCommonMethods {" + "someString =" + someString + ", TIMEUNIT =" + TIMEUNIT + ", integer =" + intero + ", longValue =" + longValue + '}';
}
Alcune osservazioni possono essere fatte per quanto riguarda i metodi comuni NetBeans-generati:

Tutto il codice generato è automatico e non supporta personalizzazione con l'eccezione dei campi utilizzati nei metodi quali l'operatore seleziona.
Tutti questi metodi comuni che si estendono controparti in  oggetto  classe hanno automaticamente il  Override  annotazioni fornito.
Nessuna documentazione Javadoc è incluso per metodi generati.
I metodi utilizzano la  oggetti  classe per rendere il codice generato più conciso con meno necessità di controlli nulli.
Solo un formato è supportato per la stringa generata da  toString ()  e che il formato di uscita è una sola linea delimitato da virgole.
Non ho mostro nell'esempio precedente, ma i metodi di generazione di NetBeans 8.0.2 non trattare array diverso rispetto riferimenti, enumerazioni, e primitive in alcuni casi:
Il generato  toString ()  attribuisce metodo tratta gamma dell'istanza come si tratta attributi altra istanza: si basa sul dell'array  toString () , che porta a risultati spesso indesiderati e in genere inutili (della matrice  identità sistema di codice hash ). Sarebbe generalmente preferibile avere il contenuto della stringa di attributi di matrice forniti da Arrays.toString (Object [])  o versione di overload equivalente o Arrays.deepToString (Object []) .
Il generato  hashCode ()  metodo utilizza  Arrays.deepHashCode (Object [])  per la gestione dei codici hash array.
Il generati  equals (Object)  metodo utilizza  Arrays.deepEquals (Object [], Object []) per la gestione dei controlli di uguaglianza array.
Vale la pena di sottolineare qui che NetBeans utilizza le versioni "profonde" degli  array metodi per confrontare le matrici per l'uguaglianza e informatica codici hash array 'mentre IntelliJ IDEA e Eclipse utilizzano le versioni normali (non profondo) di  Array  metodi per confrontare le matrici per l'uguaglianza e la codici hash array di calcolo ".
IntelliJ IDEA 14.0.2

Per questi esempi, sto usando IntelliJ IDEA 14.0.2  Community Edition .


IntelliJ IDEA 14.0.2 fornisce la possibilità di configurare la struttura del progetto di aspettarsi un "livello di lingua" di JDK 8.


Per generare il codice in IntelliJ IDEA 14.0.2, si usa il Codice | Opzioni Generare (o le battute di tastiera Alt + Inserire come NetBeans).


IntelliJ IDEA 14.0.2 chiede all'operatore quali attributi da includere nei metodi generati. Chiede inoltre che i campi sono non-null, significato che i campi vengono considerati mai nulla. Nel snapshot qui illustrato, sono controllati, che porterebbe a metodi non controllare gli attributi per nulla prima di tentare di accedervi. Nel codice che ho generato con IntelliJ IDEA per questo post, però, io non sono quelli controllati, il che significa che IntelliJ IDEA controllerà per nulla prima di accedere nei metodi generati.


IntelliJ IDEA 14.0.2  toString ()  generazione offre una lunga lista di formati (modelli) per la generato () toString  metodo.


IntelliJ IDEA 14.0.2 permette anche all'operatore di selezionare gli attributi da includere nel generato toString ()  metodo (selezionato quando sfondo evidenziato è blu).


Pari IDEA-Generated (Object) Metodo di Classe Idea1402GeneratedCommonMethods.java

boolean pubblico Equals (Object o)
{
   se (questo == o) return true;
   if (! o == null || getClass () = o.getClass ()) return false;

   Idea1402GeneratedCommonMethods che = (Idea1402GeneratedCommonMethods) o;

   if (integer = that.integer!) return false;
   if (!?! = null longValue longValue.equals (that.longValue):! that.longValue = null) return false;
   if (!?! = null someString someString.equals (that.someString):! that.someString = null) return false;
   if (TIMEUNIT = that.timeUnit!) return false;

   return true;
}
HashCode IDEA-Generated () Metodo di Classe Idea1402GeneratedCommonMethods.java

Override
public int hashCode ()
{
   int result = someString! = null? someString.hashCode (): 0;
   risultato = 31 * risultato + (TIMEUNIT = null timeUnit.hashCode ():!? 0);
   risultato = 31 * risultato + intero;
   risultato = 31 * risultato + (= null longValue.hashCode () longValue:?! 0);
   risultato ritorno;
}
ToString IDEA-Generated () Metodo di Classe Idea1402GeneratedCommonMethods.java

Override
public String toString ()
{
   ritorno "Idea1402GeneratedCommonMethods {" +
      "SomeString = '" + someString +' \ '' +
      ", TIMEUNIT =" + TIMEUNIT +
      "Integer =" + intero +
      ", LongValue =" + longValue +
      '}';
}
Alcune osservazioni possono essere fatte per quanto riguarda i metodi comuni IntelliJ IDEA-generated:

La maggior parte del codice generato è automatica con minore personalizzazione disponibili tra cui i campi utilizzati nei metodi che le seleziona operatore, indicazione di quali settori sono tenuti a essere non nullo (in modo che i controlli nulli non sono necessari in codice generato), e la possibilità di selezionare uno degli otto incorporato  toString ()  formati.
Tutti questi metodi comuni che si estendono controparti in  oggetto  classe hanno automaticamente il  Override  annotazioni fornito.
Nessuna documentazione Javadoc è incluso per metodi generati.
I metodi generati non fanno uso di  oggetti  di classe e lo richiedano controlli espliciti per nulla per tutti i riferimenti che potrebbero essere nullo.
Non è mostrato nell'esempio precedente, ma IntelliJ IDEA 14.0.2 fa trattare array differente nella generazione di questi tre metodi comuni:
Generated  toString ()  metodo utilizza  Arrays.toString (Array)  sulla matrice.
Generated  hashCode ()  metodo utilizza  Arrays.hashCode (Object [])  (o versione di overload) sulla matrice.
Generati  equals (Object)  metodo utilizza  Arrays.equals (Object [], Object [])  (o versione di overload) sulla matrice.
Eclipse 4.4.1 Luna


Eclipse Luna 4.4.1 permette il Java Compiler in Proprietà del progetto per essere impostato su JDK 8.


In Eclipse Luna, lo sviluppatore utilizza la "Sorgente" a discesa per selezionare il tipo specifico di generazione di codice sorgente da eseguire.


Eclipse Luna permette all'operatore di selezionare gli attributi da includere nei metodi comuni. Inoltre permette all'operatore di specificare alcune caratteristiche dei metodi generati. Ad esempio, l'operatore può scegliere di avere gli elementi di un array stampata individualmente in generato  toString ()  metodo piuttosto che un nome di classe spesso prive di significato e di identità sistema di codice hash presentato.


Eclipse-Generated hashCode () Metodo per la classe Eclipse441GeneratedCommonMethods.java

/ * (Non Javadoc)
 *see Java.lang.Object # hashCode ()
 * /
Override
public int hashCode ()
{
   finale int prime = 31;
   int result = 1;
   risultato = prime * risultato + this.integer;
   risultato = risultato primo *
         + ((This.longValue == null) 0:? This.longValue.hashCode ());
   risultato = risultato primo *
         + ((This.someString == null) 0:? This.someString.hashCode ());
   risultato = risultato primo *
         + ((This.timeUnit == null) 0:? This.timeUnit.hashCode ()); risultato ritorno;
}
Pari Eclipse-generati (Object) Metodo di Classe Eclipse441GeneratedCommonMethods.java

/ * (Non Javadoc)
 *see java.lang.Object # equals (java.lang.Object)
 * /
Override
boolean pubblico Equals (Object obj)
{
   se (questo == obj)
      return true;
   if (obj == null)
      return false;
   if (getClass ()! = obj.getClass ())
      return false;
   Eclipse441GeneratedCommonMethods altro = (Eclipse441GeneratedCommonMethods) obj;
   if (this.integer! = other.integer)
      return false;
   if (this.longValue == null)
   {
      if (other.longValue! = null)
         return false;
   } Else if (! This.longValue.equals (other.longValue))
     return false;
   if (this.someString == null)
   {
      if (other.someString! = null)
         return false;
   } Else if (! This.someString.equals (other.someString))
      return false;
   if (this.timeUnit! = other.timeUnit)
      return false;
   return true;
}
Eclipse-Generated toString () metodo per la classe Eclipse441GeneratedCommonMethods.java

/ * (Non Javadoc)
 *see java.lang.Object # equals (java.lang.Object)
 * /
Override
boolean pubblico Equals (Object obj)
{
   se (questo == obj)
      return true;
   if (obj == null)
      return false;
   if (getClass ()! = obj.getClass ())
      return false;
   Eclipse441GeneratedCommonMethods altro = (Eclipse441GeneratedCommonMethods) obj;
   if (this.integer! = other.integer)
      return false;
   if (this.longValue == null)
   {
      if (other.longValue! = null)
         return false;
   } Else if (! This.longValue.equals (other.longValue))
     return false;
   if (this.someString == null)
   {
      if (other.someString! = null)
         return false;
   } Else if (! This.someString.equals (other.someString))
      return false;
   if (this.timeUnit! = other.timeUnit)
      return false;
   return true;
}
Alcune osservazioni possono essere fatte per quanto riguarda i metodi comuni Eclipse-generated:

Eclipse fornisce il maggior numero di punti del processo di generazione in cui l'output generato è configurabile. Ecco alcune delle opzioni configurabili:
Posizione in classe (prima o dopo i metodi di classe esistenti) può essere specificato esplicitamente.
Tutti questi metodi comuni che si estendono controparti in  oggetto  classe hanno automaticamente il  Override  annotazioni fornito.
"Metodo commenti" possono essere generati, ma non sono i commenti di stile Javadoc (uso / *  invece di  / **  ed esplicitamente dichiarano che non sono commenti Javadoc come parte del commento generato).
Opzione a "elenca il contenuto di array invece di utilizzare toString native ()" consente allo sviluppatore di avere Arrays.toString (Array) essere usato (come per l'approccio di IntelliJ IDEA e si verifica se selezionato) o che hanno il sistema di individuare il codice hash da utilizzare (stesso L'approccio di NetBeans e si verifica se non selezionata).
Supporto per quattro  toString ()  stili più possibilità di specificare lo stile personalizzato.
Possibilità di limitare il numero di voci di un array, di raccolta, o mappa che viene stampato in toString () .
Possibilità di utilizzare un'istanza di in generati  equals (Object)  implementazione.
Tutti questi metodi comuni che si estendono controparti in  oggetto  classe hanno automaticamente il  Override  annotazioni fornito.
I metodi generati non fanno uso di  oggetti  di classe e lo richiedano controlli espliciti per nulla per tutti i riferimenti che potrebbero essere nullo.
Eclipse 4.4.1 Luna fa il trattamento di matrici in modo diverso quando generano i tre metodi comuni evidenziati in questo post:
Generated  toString ()  utilizza opzionalmente  Arrays.toString (Object [])  o la versione di overload per accedere ai contenuti di array.
Generati  equals (Object)  utilizza  Arrays.equals (Object [], Object [])  o la versione sovraccarico per confrontare le matrici per l'uguaglianza.
Generated  hashCode ()  utilizza  Arrays.hashCode (Object [])  o la versione di overload per il calcolo del codice hash di array.
Conclusione

Tutti e tre IDE trattati in questo post (NetBeans, IntelliJ IDEA, e Eclipse) generano implementazioni sonore dei metodi comuni  Equals (Object) ,  hashCode () e  toString () , ma ci sono differenze tra la personalizzazione di questi metodi generati in tutto il tre IDE. Le diverse personalizzazioni che sono disponibili e le diverse implementazioni che vengono generati in grado di fornire agli sviluppatori nuove lezioni di Java per conoscere e prendere in considerazione in sede di attuazione di questi metodi. Mentre il vantaggio più evidente e significativa di queste capacità IDE di generare questi metodi è il risparmio di tempo associati con questa generazione automatica, altri vantaggi di generazione IDE di questi metodi includono la capacità di conoscere l'attuazione di tali metodi e la maggiore probabilità di implementazioni di successo senza errori di battitura o altri errori.

Pubblicato il DZone con il permesso di Dustin Marx , autore e DZone MVB. ( fonte )