Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
Ahmet Demirelli
http://www.csharpnedir.com/
İletişme geçmek için
tıklayın
.
2
Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için
tıklayın
.
Yayınlanan diğer makaleleri için
tıklayın
.
İlgili etiketler:
burada
cellpadding=5
cellspacing=0
generic
herhangi
id=table3
koleksiyon
main(string[]
mainprogram
nesneleri
nesnesi
public
static
yazarken
yerine
J#.NET / Java
Ahmet Demirelli
YAZI HAKKINDA
Türü
:
Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır.
Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi
:
Orta
Kategori
:
J#.NET / Java
Yayınlanma Tarihi
:
6.5.2006
Okunma Sayısı
:
33068
Yorum Sayısı
:
2
yorum yaz
SİTE İÇİ ARAMA
Üye
GİRİŞİ
Üye girişi için
tıklayın
.
Kullanıcı Adı
Şifre
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
Şifremi / Kullanıcı Adımı unuttum.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
Serbest KÖŞE
(?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır.
Bu yazılar editör incelemesine girmeden yayınlanır.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package
22.12.2024
Turhal Temizer
Mac OS/X Removing CUDA
22.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak
22.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi
22.12.2024
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
J#.NET / Java
/
Java 5.0 (Tiger) ile Gelen Dil Yenilikleri 1 : Generics
Java 5.0 (Tiger) ile Gelen Dil Yenilikleri 1 : Generics
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
Merhaba, Java 5 (Tiger ) beraberinde dil,kütüphane, arayüz,performans özellikleri ile ilgli pek çok yenilik getirdi. Ben bu makale serisinde Java 5.0 ile gelen yeni dil özelliklerinden sırasıyla bahsetmeye çalışacağım.
Öncelikle Java 5.0 ile gelen yeni dil özellikleri nelerdir onlara bir bakalım;
Generic yapılar
Autoboxing/Unboxing
Gelişmiş for döngüsü
Typesafe Enum (Güvenli sıralama yapıları)
Varargs (Değişken sayıda argüman)
Static Import
Metadata (Annotations)
İlk makalemizde Generic sınıflardan ve metotlardan bahsedeceğiz.
C# 2.0 ile çalışmışsanız veya halen çalışıyorsanız size generic kelimesi size yabancı gelmeyecektir. Java daki generic yapılar, C# taki yapılardan çok farklı değildir.
Generic Sınıflar
Generic sınıf demek içerisinde her türlü tipi (primitive veya referans) tutabilen , hangi tipi tutacağına sınıftan bir nesne yaratılırken karar verebileceğimiz.Nesne yaratılırken belirlediğimiz tip ne olursa olsun bütün tipler için aynı işlemleri yapabilmemizi sağlayan sınıftırtır.
Örneğin bir sınıf tanımlıyoruz ve içerisinde bir başka bir sınıf barındırması(composition) gerekiyor .Fakat içerisinde barındıracağı sınıfın ne olacağına bu sınıfı yazarken yazarken değil bu sınıfı kullanırken karar vermek istiyoruz. O zaman sınıfımızı aşağıdaki gibi generic tanımlamamız gerekir.
public class BizimGenericClass <E>
{
private E genericDeger;
public BizimGenericClass(E genericDeger)
{
this.genericDeger = genericDeger;
}
public void genericTipiYaz()
{
System.out.println(genericDeger.getClass().toString());
}
public void genericDegeriYaz()
{
System.out.println(genericDeger.toString());
}
}
Sınıfımızı yukarıdaki gibi tanımlarsak artık içerisinde hangi tipten bir nesne tutacağımıza bu sınıftan nesne yaratırken karar verebiliriz.Yukarıdaki kodda yazdığımız <E> sınıf içinde tutacak olduğumuz değişkenin tipine karşılık geliyor.Yani BizimGenericClass sınıfından nesne yaratırken <E> yerine yazdığımız tipte bir değişken tutacağımız anlamına geliyor. <E> yerine herhangi bir değişken adı yazabiliriz (<T>,<Tip>... gibi) değişken isminin bir önemi oktur.<E> gösterimi sadece genel bir tipi temsil eder.
Generic sınıflardan nesne yaratmak normalden biraz farklıdır;
BizimGenericClass<String> bizimnesne = new BizimGenericClass<String>();
Burada sınıf tanımındaki <E> yerine <String> koyuyoruz bu bizimnesne adlı nesne içerisinde String tutacağımız anlamına gelir. Eğer <String> yerine herhangi bir tip yazmazsak bu sınıf içerisinde Object tipini saklayacağımız anlamına gelir.
Aşağıdaki kod bu generic sınıfı nasıl kullanacağımızı açıklamaktadır.
public class MainProgram
{
public static void main(String[] args)
{
BizimGenericClass<String> s = new BizimGenericClass<String>("Ahmet"); //generic classın hangi nesneyi tutacağını burada belirtiyoruz
s.genericTipiYaz();
s.genericDegeriYaz();
BizimGenericClass<Integer> t = new BizimGenericClass<Integer>(8);//generic classın hangi nesneyi tutacağını burada belirtiyoruz
t.genericTipiYaz();
t.genericDegeriYaz();
}
}
Generic Metotlar
Generic metotlar ise yukarıda kullandığımız generic sınıftaki yapıcı (constructor) metot gibi yazılmaktadır.
Aşağıda generic metot tanımıyla ilgili kısa bir örnek yeralmaktadır;
public class YeniGenericClass<T>
{
public void BizimGenericMethod(T genericDeger)
{
System.out.println(generi.getClass().toString());
System.out.println(generi.toString());
}
}
Generic metot yazarken dikkat edilmesi gereken tek şey 3. satırdaki (metot tanımındaki ) T genel tipinin metodu içeren YeniGenericClass sınıfın 1. satırında sınıf isminden sonra yazılan <T> ile aynı olmasıdır.
Kullanırken yine generic sınıf gibi kullanacağız.
public class MainProgram <T>
{
public static void main(String[] args)
{
YeniGenericClass<String> y = new YeniGenericClass<String>();
y.BizimGenericMethod("Hello Generic Method");
}
}
Java 5.0 Generic Koleksiyon yapıları
Şimdi kendimiz generic sınıf ve metot yazmak yerine Java 5.0 ile gelen işlerimizi kolaylaştırmak için yazılmış generic koleksiyonları nasıl kullanacağımızı görelim.
Öncelikle eskiden Java da koleksiyon(Collection) yapılarını kullanırken eskiden (Java 5.0 dan önce) nasıl bir problemimiz olduğunu görelim.
Bir koleksiyon kullanmak için tanımını yapıp "new" anahtar kelimesiyle yani bir nesne yaratmamız gerekiyor. Daha sonra bu koleksiyon nesnesinin içerisine istediğimiz nesneleri "add()" methodunu kullanarak ekleyebiliyoruz. Aşağıdaki kodda yeni bir vektör nesnesi yaratılıp içerisine istediğimiz nesneleri ekliyoruz. (NOT: Unutmayın koleksiyon yapıları içerlerinde sadece nesne tuabilirler primitive tip tutamazlar)
import java.util.Vector; //Kullanacağımız koleksiyon classını import ediyoruz
public class MainProgram
{
public static void main(String[] args)
{
Vector v = new Vector(); //Yeni bir vektör nesnesi yaratıyoruz
String isim = "AHMET";
Integer no = new Integer(888);
v.add(isim); //vektör koleksiyonumuza isim değişkenini ekliyoruz.
v.add(no); //vektör koleksiyonumuza no nesnesini ekliyoruz ekliyoruz.
String name = (String)v.elementAt(0); //Type Casting (5.0 dan önce tür dönüşümü işlemini mutlaka yapmamız gerekiyordu)
Integer id = (Integer)v.elementAt(1); //Type Casting (5.0 dan önce tür dönüşümü işlemini mutlaka yapmamız gerekiyordu)
}
}
Aslında yukarıdaki kodda şu ana kadar bir problem yok.Problemimiz koleksiyon nesnelerinin içerisine koyduğumuz nesneleri geri almaya çalıştığımızda olacak.Koleksiyon nesneleri içerisine aldıkları bütün nesneleri "Object" tipinde tuttukları için geri almaya kalktığımızda bize bir "Object" nesnesi geridöndürecek. Bu durumda bizim bir tür dönüşümü (type casting) işlemi yapmamız gerekiyor.Her geri alacağımız nesne için maalesef bu işlemi tekrar tekrar yapacağız. Yukaridaki kodda 12. satırda "elementAt()" metodunu kullanarak koleksiyona koyduğumuz "AHMET" stringini geri almaya çalışıyoruz."elementAt()" metodu bize nesne geri döndürdüğü için mecburen bir tür dönüşümü işlemi yapmak zorunda kaldık. Tür dönüşümü işlemini yapmasaydık derleme sırasında hata alacaktık.Koleksiyonumuzun tüm elemanlarının anı tipte olsaydı bile yine tür dönüşümü yapmak zorundaydık. Aslında görüldüğü gibi tür dönüşümü yaptığımız sürece hiçbir problemimiz yok.İsterseniz Java 5.0 kullandığınız halde hala bu yöntemle uygulama geliştirmeye devam edebilirsiniz , bir problem çıkmaz.
Ama işlerimizi kolaylaştırmak istiyorsak (özellikle koleksiyonda aynı türden nesneler tutuyorsak) Generic koleksiyon yapılarını kullanmamız gerekecek.
Java 5.0 dan önce var olan kolaksiyon sınıfları Java 5.0 için generic sınıflar olarak tekrar yazılmıştır.Generic koleksiyon sınıfları sayesinde koleksiyonun içinde ne tür nesneler tutacağımızı önceden belirtip içerisine nesnelerimizi koyuyoruz. Geri alırken herhangi bir tür dönüşümü işlemi yapmamıza gerek kalmıyor.
Örnek ;
import java.util.Vector;
public class MainProgram
{
public static void main(String[] args)
{
Vector<String> v = new Vector<String>();
String isim = "AHMET";
String soyisim="DEMIRELLI";
v.add(isim);
v.add(no);
String name = v.elementAt(0); //String tutacağımızı önceden belirttiğimiz için tür dönüşümü yapmamıza gerek kalmıyor .
String lastname = v.elementAt(1);
}
}
Fakat yukarıdaki örnektede görüldüğü gibi koleksiyonumuzun hangi tipi tutacağını koleksiyon nesnesini yaratırken söylüyoruz.Bu yüzden içerisine o tipten başka bir tip koyamıyoruz. Örneğin string vektörünün içerisine Integer koyamıyoruz.
Bu makale serisinin ikincisinde Autoboxing/Unboxing konusundan bahsedeceğim. Görüşmek üzere.
Bilgiyi paylaşalım....
Makale:
Java 5.0 (Tiger) ile Gelen Dil Yenilikleri 1 : Generics J# ve Java dili Ahmet Demirelli
Yazılan Yorumlar
Yorum Yaz
MAY
12
2006
Burcu Otluoglu
/
üye hakkında
Çok güzel bir makale. Tigerla ilgili Türkçe yazılmış en öğretici makalelerden biri diyebilirm. Devamını dört gözle bekliyorum.
MAY
6
2006
Eralp Erat
/
üye hakkında
Merhabalar. C# 2.0 ve Java 5.0 arasında yer alan dilsel farkliliklari ve bunlarin birbirlerine olan ustunlukleriyle ilgili ana hatlara temas eden bir makale hazirlamaniz cok aydinlatici olacaktir kanaatimce.. Elinize saglik ,tesekkurler.
Sayfalar :
1
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için
tıklayın
.
Üye değilseniz
Üyel Ol
linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
Bu Konuda Son 10
Eklenen Son 10
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl