Java List remove() UnsupportedOperationException Hatası ve Çözümü

Posted: Mart 24th, 2009 | Author: | Filed under: İpuçları, Java | Tags: , , | 3 Comments »

Bu hatayı aldığınızda öncelikle listelerde geçerli olan remove(int index) fonksiyonunun referans sayfasına bakalım;

Throws:
UnsupportedOperationException – if the remove method is not supported by this list.

Aslında hata gayet açıklayıcıydı ama başka tür hatalar aldığınızda da referans sayfasına bakmanızda fayda olduğundan bu aşamayı da yazdım.

Ben bu hatayı Arrays.asList ile liste oluşturduğumda aldım;

        List enumList = Arrays.asList(ApplicationStatus.values());
        enumList.remove(3);

Bu kodun amacı ApplicationStatus sınıfındaki enum degerleri bir listeye atıp ardından bazı elemanları silme işlemi yapmaktı.

Bu şekilde asList ile oluşturulan listeler java.util.Arrays$ArrayList gibi bir liste döndürüyor ve bu tip listeler remove() add() gibi fonksiyonları desteklemiyor. Bu sebepten UnsupportedOperationException hatasını alıyoruz.

Bunun çözümü bir şekilde düzgün bir liste oluşturmak. Ben şöyle yaptım;

        List enumList = Arrays.asList(ApplicationStatus.values());
        List realList = new ArrayList();
        for (int i = 0; i < enumList.size(); i++) {
            realList.add(enumList.get(i));
        }
        realList.remove(3);

Artık realList ile istediğim gibi remove(), add() fonksiyonlarını kullanabiliyorum.


Java BigDecimal.divide() fonksiyonu

Posted: Aralık 22nd, 2008 | Author: | Filed under: Java | Tags: , , , | 4 Comments »

Java’da iki BigDecimal değeri divide() fonksiyonu ile bölmek istediğimde şu hatayı aldım;

Non-terminating decimal expansion; no exact representable decimal result.

Hatayı almamın sebebi divide fonksiyonunu yanlış kullanmammış. Şöyle iki değişkenimiz olsun;

BigDecimal sayi1 = BigDecimal.valueOf(100);
BigDecimal sayi2 = BigDecimal.valueOf(50);

Bunları bölmeye çalışalım;

sayi1.divide(sayi2);

İlgili referans sayfasından da görebileceğiniz gibi bu şekilde bir kullanım yanlış. roundingMode parametresini kullanmamız zorunlu. Peki roundingMode kullanmadan bölmek mümkün mü ? Ben böyle yaptım (alttaki kod tek satır));

BigDecimal sonuc = new BigDecimal(sayi1.doubleValue() / sayi2.doubleValue());

Bu kod çalıştı. Bunun daha iyi bir yolu varsa yorum olarak yazarsanız sevinirim.


Java Console’da String Formatlama – Printf()

Posted: Ocak 20th, 2008 | Author: | Filed under: Java | Tags: , , , , , | 1 Comment »

Bu ara java ile uğraşıyorum.. Gerçekten güzel bir dil. Eğer Eclipse gibi bir editör ile yazarsanız çok kolay bir dil haline geliyor. Henüz tam olarak OOP (Object Oriented Programming (Nesneye Yönelik Programlama)) mantığım çok iyi olmadan yazsam da bir şeyler yazabiliyorum : ) Konsolda çalışıyorum ve konsolda string formatlamayı internette çok aradım, sonunda buldum.. Şöyle oluyormuş… Read the rest of this entry »


Java’da Değişkeni String’ten Integer veya Double’a Çevirme (String to Int, Double)

Posted: Ocak 15th, 2008 | Author: | Filed under: Java | Tags: , , , , , , , | 3 Comments »

Bir değişkeni integer’dan double’a cast ederek çevirmek kolay çünkü ikisi de aynı sınıftan türemişler.. bknz.

int a = 50;
double b = (int) a;

gibi.. Fakat bir string, sayıya aynı sınıftan türemedikleri için cast ederek çevrilemiyor, parse etmek gerekiyor.. Şöyleki;

String numara = 60;
double no = Double.parseDouble(numara);

üstteki kod string’i double’a çeviriyor. Integer’a çevirmek için double gördüğünüz yere Integer yazın :)


Pardus Linux+Eclipse+Java ile MySQL’e Bağlanmak

Posted: Ocak 14th, 2008 | Author: | Filed under: Java, Pardus | Tags: , , , , , , | 3 Comments »

Pardus 2007.3′e kurduğum Eclipse yazılım geliştirme programında java dili kullanarak MySQL’e bağlanmaya çalışıyordum bir süredir (1-2 gündür). Ama bir türlü bağlanamadım. Bağlanmaya çalıştığımda şu hatayı alıyordum;

Cannot connect to db/user. Check your URL
Communications link failure

Last packet sent to the server 0 ms ago

Sonunda çözümü buldum… Problem mysql’in ilk kurulumuyla gelen ayarların dışarıdan erişime izin vermemesiymiş.. Düzeltmemiz gereken dosya /etc/mysql/my.ini dosyası.. Pardusta düzeltmeyi şu şekilde yapabiliyoruz; Read the rest of this entry »