Tippek, trükkök, praktikák a Java világából.
There are many articles out there dealing of the accessor and mutator methods (getters and setters). They came together with the Object-Oriented principles. Information hiding says that the internal state of an object must be hidden from the outer world. That is, the fields it uses shouldn't be available. Yet, sometimes we have to query the state of the object, and even may want to change that state.…
Labels: tippek
Röviden arról szeretnék beszélni, vagyis egész pontosan egy általam írt blogot prezentálni, melyben a "webkit"-et támogató mobil telefonokat tudjuk programozni a java nyelv segítségével. Erre nyújt többek közt lehetőséget, a "gwt for mobile(mgwt)" technológia is. Egy rövid példán/leíráson keresztül nézzük meg, mi is ez, hogy is működik ez a mostanában kifejlődő irányzat.
http://lehelsipos.blogspot.com/2012/10/mgwt-reading-data-from-xml-file-on.html
Google Web Toolkit (GWT) is a development toolkit for building and optimizing complex browser-based applications. https://developers.google.com/web-toolkit/
You write your code in Java language and the GWT compiler will produce to you the client side javascript(/ajax) and html files.
There are lot of additional java libraries which you can use to improve your GWT application for free:
http://code.google.com/p/gwt-google-apis/downloads/list
For example to do animations,…
A Java7 megjelenését megelőzően nagy várakozás övezte a NIO.2 újdonságait, aztán elmúlt a hype. Ennek oka valószínűleg az lehet, hogy a Java jelenleg két erős területén – az Android és a Java EE platformon – nincs igazán szükség a fájlműveletek támogatására. Az Android esetén megtűrt dolognak számít a fájlrendszer, az SQLite alapú tárterület a támogatott; Java EE esetén pedig deklaráltan nem alapozunk a fájlrendszerre.…
Egy ideje elérhető az OpenShift PaaS lehetőség a RedHat oldalain, amelyet ingyen ki lehet próbálni: https://openshift.redhat.com
A regisztráció után egy pár lépésből álló varázslóval ki tudjuk választani a nekünk szükséges szolgáltatásokat:
Hozzuk létre a szolgáltatásunk domain nevét:
A Create Application gombra kattintva kisvártatva (esetleg néhány perc múlva) megjelenik a konzol, illetve megnézhetjük a hivatkozott link alatt az elindított platformot: http://cloudtest-javaforum.rhcloud.…
Ha használunk Sonatype Nexus-t abból a célból, hogy a Maven alapú csomagjainkat biztos helyen tartsuk, akkor nem árt időnként ránézni a repository méretére, mert alapból a -SNAPSHOT csomagok nem törlődnek, így intenzív használat esetén a sonatype-work mérete az egekbe szökhet, mivel csak gyűlnek a feltöltött csomagok, amelyek közül általában csak az utolsót használjuk.…
A Java 5 hozott néhány újdonságot a párhuzamos programozás terén, a Java 7 további könnyítéseket tartalmaz, amelyek közül az egyiket Fork/Join néven találjuk meg a dokumentációt böngészve, s a megoldás használatához csak három osztályt kell megismernünk:
RecursiveAction – visszatérési érték nélküli feladat
RecursiveTask – visszatérési értéket adó feladat
ForkJoinPool – a szálakat kezelő osztály (thread pool)
Az elnevezésekből láthatjuk,…
A Java7 egyik csendes újítása a java.util.Objects osztály, amely közel tucatnyi statikus metódust ad az objektumok kezeléséhez, amely metódusok egy része nem esik zavarba, ha null értéket kap. Az Objects tipikus esete utility osztályoknak, final módosítóval van ellátva, illetve van egy privát konstruktora is:
private Objects() {
throw new AssertionError("No java.util.Objects instances for you!");
}
Suhanjunk végig az eddig megvalósított metóduslistán...…
A JPA első kiadása nem tartalmazta a Hibernate felhasználói között népszerű Criteria lekérdezést, amely – kisebb változtatásokkal – része lett a JPA 2.0 specifikációnak. A CriteriaQuery nagyon jól használható olyan lekérdezésekhez, amelyeknél paraméterből jön a szűrni kívánt mező, vagy a rendezendő oszlop. Az egyetlen probléma a végrehajtott JPQL/SQL lekérdezése, amely két okból is jól jöhet:
kinyerni egy jó és tömör JPQL lekérdezést,…
Ritkán előforduló feladat egy fájl vagy egyéb stream tartalmából MD5 ellenőrző összeget készíteni, ám viszonylag hamar meg lehet találni a jó megoldást (a try-catch blokkot mindenki képzelje a forráskód köré):
MessageDigest checksum;
checksum = MessageDigest.getInstance("MD5");
byte[] buf = new byte[1024];
FileInputStream fis = new FileInputStream(file);
while (true)
{
int len = fis.read(buf, 0, buf.…
Érdekes "hibába" futottam bele minap, mégpedig egy nem várt NullPointerException keletkezett egy switch utasításban, amely kissé váratlanul ért... Tekintsük meg az alábbi rövid ki programot:
public class SwitchEnumTest
{
public static void main(String[] args)
{
Enum testEnum = null;
switch (testEnum)
{
case ONE: System.out.println("ONE"); break;
case TWO: System.out.println("TWO"); break;
default: System.out.println("other");
}
}
public enum Enum
{
ONE,
TWO,…
...avagy a jó, a rossz és a csúf. A közös tulajdonságuk egyszerű, implementálják a Map interfészt, s kulcs-érték mentén tárolnak adatokat, illetve a hatékony működést a kulcs hash értéke alapján végzik. Mi a különbség a HashMap, a TreeMap és a Hashtable között? A legelső implementáció a Hashtable, amely az 1.0 óta van jelen a Java nyelvben, mondhatni együtt nőtt fel vele. Manapság eléggé mellőzött szerepe van, szinte alig találkozunk a Hashtable alapon szervezett tárolókkal,…
A JPA implementációk (és elődjük - a Hibernate) nagyon sok felesleges munkát levettek az ember válláról, s az egyszerűbb ORM műveletek mellé idővel - az adatbázisokkal való munka során felmerült problémák megoldásaként - egyre több eszköz került. Ilyen eszköz az Entity és/vagy Query Cache, amely a már beolvasott entitást adta vissza az adatbázishoz való kérdés nélkül, illetve a már lefuttatott kérdésre az adatbázisból egyszer már elkért halmazt adta vissza ugyanilyen módon.…
Fejlesztői beszélgetéseken sokszor előkerül, hogy időmérésre a Calendar használata kerülendő, mivel túl sok erőforrást igényel a példányosítás, illetve a használata. A fejlesztők ebből az okból jobban szeretik a System osztály currentTimeMillis metódusát használni, amely egyszerű UNIX időbélyeget ad vissza. A tesztelés egyszerű, mérjünk meg, hogy az egyes módszerek mennyi időt vesznek el a program életéből. A mérési keretrendszer egyszerű,…
A Java 6 megjelenésével több belső információhoz férhetünk hozzá futásidőben, amelyek közül érdekes lehet lekérdezni a szálak adatait, beleértve olyan metrikát, mint a felhasznált CPU idő. A titok a ManagementFactory statikus metódusai körül van, innen tudjuk lekérdezni a ThreadMXBean példányt, amelyből le tudjuk kérdezni az éppen létező szálak adatait:
ThreadMXBean threads = ManagementFactory.getThreadMXBean();
ThreadInfo[] threadInfos = threads.getThreadInfo(threads.…
Labels: tippek
Aki már próbálkozott OpenOffice integrációval, annak hasznos lehet az ODFToolKit ismerete, mivel ehhez nem kell telepített OpenOffice a gépre, hanem az ODF szabvány ismeretében - némi XPath és XML tudással - képesek vagyunk olvasni és írni az OpenOffice által használt dokumentumokat. Az http://odftoolkit.org oldalon egész szerteágazó eszközkészlettel találkozunk, nézzük meg közelebbről az ODFDOM csomagot. Az ODFToolKit alapja az ODFDOM,…
Ritkán van szükség római számok használatára, legtöbbünk soha nem is találkozik azzal a helyzettel, amikor a feladat egy olyan programot írását követeli meg, amely az arab számainkat római számmá alakítja. Nézzünk meg egy elegáns megoldást.
public class Main
{
public static final int[] NUMBERS = new int[]
{
1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1
};
public static final String[] LETTERS = new String[]
{
"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV",…
A Java 6 nyelvi elemekben nem hozott akkora ugrást, mint a Java 5, de jelentősen bővült a felhasználható eszközök száma, sok új osztály került a java.util csomagba, ilyen a Deque osztály is, amelynek a neve "Double Ended QUEue" kifejezésből származik. Ez azt jelenti, hogy a Deque példányt használhatjuk queue és stack üzemmódban is. Csapjunk a közepébe, és nézzük az alábbi programot:
import java.util.ArrayDeque;
import java.util.…
A Java 6 megjelenésével több belső információhoz férhetünk hozzá futásidőben, amelyek közül érdekes lehet lekérdezni a szálak adatait, beleértve olyan metrikát, mint a felhasznált CPU idő.
A titok a ManagementFactory statikus metódusai körül van, innen tudjuk lekérdezni a ThreadMXBean példányt, amelyből le tudjuk kérdezni az éppen létező szálak adatait:
ThreadMXBean threads = ManagementFactory.getThreadMXBean();
ThreadInfo[] threadInfos = threads.getThreadInfo(threads.…
Labels: tippek
A java egy régi (1.2-es verziója óta létező) de kevéssé ismert részéhez tartozik a gyenge referencia. Igaz alkalmazási területe is elég szűk, de ha tudjuk, hogy léteznek és mire jók, a megfelelő időben előhúzva a zsebünkből nagyon hasznos tud lenni a java.lang.ref csomag. Ha egy mondatban össze kellene foglalni mi is az a gyenge referencia akkor úgy írnám le, hogy olyan hivatkozás egy objektumra, ami nem akadályozza meg a szemétgyűjtőt (garbage collector),…
Labels: tippek, weakreference
Java programozók körében elterjedt tévhit, hogy a synchronized módosítóval ellátott metódusok vagy blokkok által bezárt programsorokat csak egy szál futtathatja egy időben. A valóság az, hogy a kérdéses osztály példányaira vonatkozik a synchronized, ha az osztályból van kettő példányunk, amelyek egy közös static változót használnának, akkor mit sem ér a synchronized... Hogy ne a levegőbe beszéljek, nézzünk egy konkrét példát, vegyünk például egy osztályt,…
Minden programozási nyelven vannak olyan trükkök, amelyek a nyelv határait feszegetik, vagyis teljesen legális nyelvi eszközökkel érnek el meglepő viselkedést. Ilyen lehet egy olyan rövid program, amely kiírja a klasszikus "Hello, World!" szöveget, de nincs benne main metódus, ahol ezt megtennénk. Mégis lehetséges... A megoldás egyszerű, a ritkán használt statikus inicializátor blokkba kell tennünk a "Hello, World!" kiírást. Ez a blokk akkor hajtódik végre egyszer,…
Az objektum orientált programozás terjedésével a monolitikus programokban hívők egyik nagy ellenérve az öröklődéssel és a polimorfizmussal kapcsolatban a túlzott erőforrásigény volt. A JavaSpecialist blog gazdája készített egy mérést, amely alapján mi is készítettünk méréseket, amelyek meglepő eredménnyel zárultak. Egészséges Java öntudattal az ember azt kell gondolja, hogy az interface vagy az abstract osztályok használata nem lassít a program futásán, kis gyanakvással pedig úgy gondolja,…
Az eddigi legjobb dolog - ami a Java nyelvvel történt - az annotációk bevezetése volt. Egy csomó keretrendszer alapul annotációkon, mint a JPA, a Seam vagy a Spring 2.5, de a fejlesztők jó része még nem készített saját annotációt. A The Wrong Code blog írója első blogbejegyzésében rögtön egy kisregényt írt az annotációkról, mégpedig a saját készítésű annotációkról. A programozók népe ugyanis alapvetően lusta (ezért lettek programozók), így amíg nem muszáj, nem használnak újabb technológiákat,…
Érdekes blogbejegyzést olvashatunk a How to write banking application? címmel, amelyben a szerző bankokban előforduló programok színvonalát mutatja be humoros formában. Lássuk a listát:
A program működését befolyásoló paraméterei közül néhányat tároljuk properties fájlokban, egy részét XML fájlokban, tegyünk belőlük adatbázisba is, illetve legyen beledrótozva a kódba is jó pár.
Használjunk reflection-t illetve dinamikus proxy-kat, ahol csak tudunk. Ahol nem tudunk,…
ajax
annotáció
book
cheatsheet
cloud
concurrency
configuration
console
csv
dao
designpattern
enum
gwt
hat
hibernate
hsqldb
implementáció
interfész
java6
java7
javaee
javafx
jboss
jhat
jmap
jpa
jpql
jsf
jvm
képek
linq
map
maven
md5
mobil
mítosz
netbeans
news
nexus
nio2
oktatás
openoffice
openshift
page
permgen
polimorfizmus
queue
red
római
sort
synchronized
tanács
trükk
weakreference


Add Comment