Merhabalar,
Bu makalede "HashMap" Liste içerik sıralama örneğine yer verilecektir.
HashMap örneğine geçmeden evvel temel olarak Java'nın Nesnel Dizi Sınıflarını kısaca hatırlayalım.
Java'da dizi(array) işlemlerini daha esnek ve verimli yönetilebilmesi için "Nesnel Dizi Sınıfları" bulunmaktadır.
Dolayısıyla Nesnel dizi sınıfları standart türdeki dizilerden daha gelişmiş yapıya sahiptirler.
Gelişmiş dizi sınıfların öne çıkan bazı özellikleri kısaca şu şekildedir.
NOT: Dizi "Array",Sınıf "Class" olarak telafuz edilecektir.
Esnek boyut yapısı:
Bu özellik sayesinde,array boyutu belirli bir boyut sınırında kalmaz. Array'a veri eklendikçe büyüyebilen bir yapıya sahip olurlar.
Örneğin standart array'larda 100 elemanlı boyuta sahip bir array oluşturduktan sonra boyutu arttırmaya ihtiyaç duyulduğunda iş yükü ortaya çıkar.
Yani yeniden ihtiyaç duyulan boyutta array oluşturup,daha sonra önceki array'da yer alan verileri yeni array'a aktarıp üzerinden devam edilir.
Ancak dinamik verilerle çalışılıyorsa standart array'lar tercih sebebi olmayacaktır. Dolayısıyla "Nesnel Dizi"'lere başvurulur.
Veri türüne oyumluluk:
Standart array tanımlarken veri türüne göre oluşturulması en temel kuralladır.
Yani array içerisinde yer alacak veri türü,array oluşturulurken belirtilmesi gereklidir.
Ancak Nesnel Dizi Sınıfları buna uyumluluk sağlayabilecek nitelikte tasarlanmıştır.
Fakat özellikle tek türden veri tutulacaksa,bu durumda veri türü belirtilmesi verimli ve okunabilir bir kullanım sunacaktır.
Kolay yönetilebilirlik:
Array içerisinde eleman arama,içerik sıralama,eleman silme,array içeriğini taşıma ve aktarma konularında hazır
yapılarda fonksiyonlar bulunur.
Java'da "Nesnel Dizi Sınıflar" adı altında birçok Class mevcuttur.
Ancak en temeli "Array" ve "ArrayList" classları dır.
Array ve ArrayList kullanımları oldukça basittir. Dolayısıyla bu listelerin içeriğini sıralamak da karmaşık değildir.
Ancak daha gelişmiş Liste yapılarını kullandıkça,özellikle Liste içeriğini sıralama konusunda karmaşık durumlar ortaya çıkabilir.
Liste içeriği sıralama işleminin karmaşık olduğu biri de HashMap nesnesi dır.
Bu makalede HashMap Liste yapısı kullanılarak sıralama örneklerine yer verilecektir.
İçerik sıralamaya örnek olarak çeşitli yapı ve yöntemler mevcuttur. Dolayısıyla ArrayList içeriği sıralama yöntemi
ile HashMap içeriğini sıralamak benzer yöntemle yapılamamaktadır.
Bunu göstermek için ilk olarak "ArrayList" içeriğini sıralama örneğine yer vereceğiz.
ArrayList içeriği sıralama örneğine aşağıda yer verilmiştir:
import java.util.ArrayList;
import java.util.Collections;
public class ArrayListSort{
public static void main(String[] args) {
ArrayList<String> arrayList1 = new ArrayList<String>();
arrayList1.add("İstanbul");
arrayList1.add("Ankara");
arrayList1.add("Bartın");
System.out.println("Sıralanmadan önce:");
for(int i=0;i<arrayList1.size(); i++){
System.out.println(i + "=>" + arrayList1.get(i));
}
//sort ile liste sıralanıyor:
Collections.sort(arrayList1);
System.out.println("\nSıralandıktan sonra:");
for(int i=0;i<arrayList1.size(); i++){
System.out.println(i + "=>" + arrayList1.get(i));
}
}
}
Çıktı:
Sıralanmadan önce:
0=>İstanbul
1=>Ankara
2=>Bartın
Sıralandıktan sonra:
0=>Ankara
1=>Bartın
2=>İstanbul
Aşağıdaki örneklerde "HashMap" kullanılmaktadır.
HashMap içeriğini çeşitli yöntemlerle sıralamak mümkündür. Bu yöntemler genellikle farklı yapılarda Liste class'ları kullanmakla sağlanmaktadır.
Aşağıdaki ilk örneğimizde HashMap iki farklı türden veri almaktadır. Veri türleri key=Integer,value=String olarak belirlenmiştir.
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.ArrayList;
import java.util.TreeMap;
public static void main(String[] args) {
HashMap<Integer, String> hashmapList = new HashMap<Integer, String>();
hashmapList.put(8,"Artvin");
hashmapList.put(6,"Ankara");
hashmapList.put(34,"İstanbul");
hashmapList.put(23,"Elazığ");
hashmapList.put(38,"Kayseri");
hashmapList.put(68,"Aksaray");
hashmapList.put(30,"Hakkari");
hashmapList.put(42,"Konya");
hashmapList.put(3,"Afyon");
hashmapList.put(11,"Bilecik");
System.out.println("Sıralanmadan önce:");
//standart sıralamada içerik rastgele olarak çıktı olacaktır.
Set set1 = hashmapList.entrySet();
Iterator iterator = set1.iterator();
while(iterator.hasNext()) {
Map.Entry mapEntry = (Map.Entry)iterator.next();
if((int)mapEntry.getKey() < 10){
System.out.print("0" +mapEntry.getKey() + ": ");
}else{
System.out.print(mapEntry.getKey() + ": ");
}
System.out.println(mapEntry.getValue());
}
//Sıralama işlemi "key"'e göre yapılmaktadır.
Map<Integer, String> mapTreeMap = new TreeMap<Integer, String>(hashmapList);
System.out.println("\nSıralandıktan(key) sonra:");
Set set2 = mapTreeMap.entrySet();
Iterator iterator2 = set2.iterator();
while(iterator2.hasNext()) {
Map.Entry mapEntry = (Map.Entry)iterator2.next();
if((int)mapEntry.getKey() < 10){
System.out.print("0" +mapEntry.getKey() + ": ");
}else{
System.out.print(mapEntry.getKey() + ": ");
}
System.out.println(mapEntry.getValue());
}
}
Çıktı:
Sıralanmadan önce:
34: İstanbul
03: Afyon
68: Aksaray
06: Ankara
38: Kayseri
23: Elazığ
08: Artvin
42: Konya
11: Bilecik
30: Hakkari
Sıralandıktan sonra:
03: Afyon
06: Ankara
08: Artvin
11: Bilecik
23: Elazığ
30: Hakkari
34: İstanbul
38: Kayseri
42: Konya
68: Aksaray
HashMap içeriği veri türü değiştiğinde sıralama işlem yöntemi değişebilir.
Aşağıdaki örneğimizde HashMap iki farklı türden veri almaktadır. Veri türleri key=String,value=String olarak belirlenmiştir.
Bu örnekte ilk örneğimizde olduğu gibi "Collections.sort" kullanılmıştır.
Ancak burada sort fonksiyonu için bir List'e oluşturulmuştur.
Bunların dışında kullanılan diğer nesneler "TreeMap,LinkedHashMap" class'ları kullanılmıştır.
Örnek:
public static void main(String[] args) {
HashMap<String,String> hashmapList = new HashMap<String,String>();
hashmapList.put("08","Artvin");
hashmapList.put("06","Ankara");
hashmapList.put("34","İstanbul");
hashmapList.put("23","Elazığ");
hashmapList.put("38","Kayseri");
hashmapList.put("68","Aksaray");
hashmapList.put("30","Hakkari");
hashmapList.put("42","Konya");
hashmapList.put("03","Afyon");
hashmapList.put("11","Bilecik");
System.out.println("HashMap sıralama öncesi,rastgele sıralama:");
Set<Entry<String, String>> entrySetEntries = hashmapList.entrySet();
for(Entry<String, String> entry : entrySetEntries){
System.out.println(entry.getKey() + " => " + entry.getValue());
}
TreeMap<String, String> treeMapSortedbyKeys = new TreeMap<>(hashmapList);
Set<Entry<String, String>> entrySetMappings = treeMapSortedbyKeys.entrySet();
System.out.println("HashMap 'Key' sıralandıktan(artan sıraya göre) sonra ");
for(Entry<String, String> mapping : entrySetMappings){
System.out.println(mapping.getKey() + " => " + mapping.getValue());
}
Comparator<Entry<String, String>> comparator = new Comparator<Entry<String,String>>() {
@Override
public int compare(Entry<String, String> s1, Entry<String, String> s2) {
/**
* compare'dan alınan parametreler Object olması durumunda,fonksiyon içerisinde ilgili veri veya class türüne çevrilmelidir.
* */
String value1 = s1.getValue();
String value2 = s2.getValue();
return value1.compareTo(value2);
}
};
//HashMap liste içeriğini "value"'a göre sıralamak için "Collections.sort" kullanılacaktır.
//sort fonksiyonu bir Liste nesnesine ihtiyaç duyar.
List<Entry<String, String>> listOfEntries = new ArrayList<Entry<String, String>>(entrySetEntries);
//HashMap "value"'a göre sıralanıyor. sort fonksiyonu yukarıda yer alan "Comparator" yapısını kullanacaktır.
Collections.sort(listOfEntries, comparator);
LinkedHashMap<String, String> sortedByValue = new LinkedHashMap<String, String>(listOfEntries.size());
for(Entry<String, String> entry : listOfEntries){
sortedByValue.put(entry.getKey(), entry.getValue());
}
System.out.println("HashMap 'value' sıralandıktan(alfabetik sıraya göre) sonra: ");
Set<Entry<String, String>> entrySetSortedByValue = sortedByValue.entrySet();
for(Entry<String, String> mapping : entrySetSortedByValue){
System.out.println(mapping.getKey() + " => " + mapping.getValue());
}
}
Çıktı:
HashMap sıralama öncesi,rastgele sıralama:
11 => Bilecik
34 => İstanbul
23 => Elazığ
68 => Aksaray
03 => Afyon
38 => Kayseri
06 => Ankara
08 => Artvin
30 => Hakkari
42 => Konya
HashMap 'Key' sıralandıktan(artan sıraya göre) sonra
03 => Afyon
06 => Ankara
08 => Artvin
11 => Bilecik
23 => Elazığ
30 => Hakkari
34 => İstanbul
38 => Kayseri
42 => Konya
68 => Aksaray
HashMap 'value' sıralandıktan(alfabetik sıraya göre) sonra:
03 => Afyon
68 => Aksaray
06 => Ankara
08 => Artvin
11 => Bilecik
23 => Elazığ
30 => Hakkari
38 => Kayseri
42 => Konya
34 => İstanbul
6 Mayıs 2017 Cumartesi
5 Mart 2017 Pazar
-CC++ pointer fonksiyon nesneler-
Merhabalar,
CCpp'da pointer'lar birçok şekilde kullanılabilir.
Temel düzeyde pointer'lar,değişken tanımlama,değer atama ve pointer değişkenden
bir başka pointer'e atamalarda karşılaşırız-kullanırız.
Bu örnekte pointer'ların fonksiyonlar ile birlikte nasıl kullanıldığını göreceğiz.
Temel düzeyde fonksiyonların pointer ile kullanıma dair önceki makalemi okuyabilirsiniz.
link
Bu örnekte üç(3) adet fonksiyon mevcuttur.
Bu fonksiyonlar,oluşturulan sanal bir pointer fonksiyon nesnesine tek tek atanabileceği gibi,
toplu olarak da atanabilir. Böyle bir atama işleminde,sanal olarak oluşturulan fonksiyon nesnesi
artık atanan fonksiyonun yerine kullanılabilir.
Dolayısıyla fonksiyonu çağırma,parametre gönderme ve geri döndürdüğü değeri bu sanal fonksiyon pointeri
üzerinden elde edebiliriz.
Aşağıda verilen örneklerde ilk olarak tek fonksiyon kullanılıyor.
NOT: Bu makalede temel "pointer" kavramını bildiğiniz varsayılmıştır.
#include <stdio.h>
#include <string.h>
void func1(int *a)
{
printf("func1: %d\n",*a);
}
void func2(int *a)
{
printf("func2: %d\n",*a);
}
void func3(int *a)
{
printf("func3: %d\n",*a);
}
int main()
{
// tek fonksiyon kullanımı:
/*
* Pointer olarak oluşturulan sanal fonksiyon aşağıda verilmiştir.
* Atanacak fonksiyon "func1" ismindedir. Fonksiyon int türünden bir parametre almaktadır
* ve geri değer döndürmüyor. Dolayısıyla sanal fonksiyon da buna uygun tasarlanmıştır.
* "void": elde edilecek fonksiyonun geri dönüş değeri.
* "(*function)": sanal fonksiyon nesnesidir.
* "(int *)" : func1 fonksiyonun parametre türüdür. Parametre sayısı kadar oluşturulmalıdır.
**/
void (*function)(int *) = func1; //func1 fonksiyonu atanıyor.
int a = 55;
//func1 fonksiyonuna sanal nesne üzerinden değer gönderiliyor.
(*function)(&a); // func(&a) ile aynı görevi görmektedir.
//Fonksiyon atamasını aşağıdaki gibi yapabiliriz.
void (*function)(int *) = &func1; //"&" karakterine dikkat!!
//şayet funk1 fonksiyonu iki parametreli olsaydı,bu durumda pointer tanımlaması şöyle olacaktı:
void (*function)(int *,int *) = func1;
}
//ÖRNEK 2:
Bu örnekte elimizde bulunan tüm(3 adet) fonksiyonları tek bir pointer nesnesi üzerinden kontrol edeceğiz.
Bu nedenle bir array(dizi) oluşturmamız gerekir.
Aşağıda tüm fonksiyonlar tek pointer nesnesine atanmıştır.
int main()
{
//pointer nesnesi array olarak tanımlanıyor.
void (*functions[3])(int *) = {func1,func2,func3}; //fonksiyonlar atanıyor.
int a = 10;
int b = 20;
int c = 30;
//parametre gönderiliyor:
(*functions[0])(&a);
(*functions[1])(&b);
(*functions[2])(&c);
return 0;
}
//ÖRNEK 3:
Son örneğimizde ise fonksiyonlarımız geri dönüş değerine sahiptir.
Bu durumda,oluşturacağımız sanal fonksiyon pointeri bu yapıya uygun tasarlanmalıdır.
Yani fonksiyon geri dönüş tipi-türüne uygun olmalıdır.
int *func1(int *a)
{
printf("func1: %d\n",*a);
*a = *a + 5;
return a;
}
int *func2(int *a)
{
printf("func2: %d\n",*a);
*a = *a + 5;
return a;
}
int *func3(int *a)
{
printf("func3: %d\n",*a);
*a = *a + 5;
return a;
}
int main()
{
int a = 10;
int b = 20;
int c = 30;
//func1,func2,func3 fonksiyon dönüş tipleri "int" olduğu için:
int* (*functions[3])(int *) = {func1,func2,func3};
printf("%d\n",*(*functions[0])(&a)); // pointer karakterine(*) dikkat.
printf("%d\n",*(*functions[1])(&b));
printf("%d\n",*(*functions[2])(&c));
return 0;
}
İyi çalışmalar.
1 Mart 2017 Çarşamba
Bilişim Sohbetleri 3 Mart 2017 Cuma
3 Mart 2017 Cuma Türkiye saati ile 21:30'da Bilişim Sohbetleri canlı yayınında konuğumuz Turkey Java User Group Başkan Yardımcısı, Android-AOSP/Linux Kernel Developer(R&D Engineer), Java/Android Teknik Kitap Yazarı Sayın Kerim Fırat hocamız ile Yazılım Sektörünün İhtiyaçları üzerine konuşacağız. Sakın kaçırmayın.
:)
Canlı yayın adresimiz: https://youtu.be/wCLH2HiuHIk
Hazırlayıp sunanlar:Mimar Aslan & Çağdaş Öğüt
Canlı yayın adresimiz: https://youtu.be/wCLH2HiuHIk
Hazırlayıp sunanlar:Mimar Aslan & Çağdaş Öğüt
4 Şubat 2017 Cumartesi
Go Programlama Dili
15 Aralık 2016 Perşembe
Android Studio ile Programlama kitabı + 54 saat video eğitimi
"Android Studio ile Programlama + 54 saat Android video eğitimi" kitabım Abakus yayınlarıyla Ocak ayı itibariyle yayında olacaktır.
www.abakuskitap.com
www.abakuskitap.com
Etiketler:
Android,
Android programlama,
Android Studio,
Kerim Fırat,
video eğitimi
17 Eylül 2016 Cumartesi
-Java Reflection Kullanımı 2 -
Merhabalar,
Java'da Class bünyesinde bulunan yapılandırıcıları,alanları ve fonksiyonların kullanımı ile ilgili
daha önce yazdığım "Java Reflection Kullanımı" makalesi burada yer alıyor.
Bu konuya yönelik farklı sorular aldığım için "Java Reflection Kullanımı 2 " 'yi yazma gereği duydum.
Bu makalede geliştireceğimiz örnek uygulamada bir adet "Person.java" ve "Main.java" Classı bulunuyor.
Person class içeriğinde çeşitli set,get ve print fonksiyonları yer almaktadır.
Bu fonkisyonlar çeşitli veri türlerden parametrelere sahip. Bu fonksiyonlara Main.java tarafından parametre gönderilecektir. Ancak fonksiyonların aldığı parametre tür ve sayıları önemlidir.
Dolayısıyla kullanım aşamasında parametre türü ve parametre sayıları önem arz etmektedir.
Ayrıca parametre gönderilecek-işletilecek fonksiyonların isimleri bilinmelidir.
Tüm bu detaylara aşağıda yer verilmiştir.
Person.java Class içeriği:
public class Person {
private String name;
private String s_name;
private int age;
public Person(){
//Constructor
System.out.println("Constructor");
}
public void setName(String _n){
this.name = _n;
}
public void setSurname(String _sn){
this.s_name = _sn;
}
public void setAge(int _a){
this.age = _a;
}
public String getName(){
return this.name;
}
public void print(){
System.out.println("Name:" + name + "\nSurname:" + s_name + "\nAge:" + age);
}
public void setAandB(String _s,int _i){
//
System.out.println("" +_s +"," + _i);
}
}
Main.java Class içeriği:
public class Main {
public static void main(String[] args){
try{
//Class ismi:
/*
* farklı paket altında bulunan class'lar paket ismi ile belirtilmelidir.
* Örn 1: "java.util.Date"
* Örn 2: "java.io.InputStreamReader"
*/
String className = "Person";
//String olarak alınan Class ismi "Class"'a convert ediliyor:
Class<?> cClass = Class.forName(className);
///Class bünyesinde kullanılabilecek fonskiyonlar:
//Class'a ait yapılandırıcıları elde etmek için:
//public Constructor<?>[] getConstructors()
//Class'a ait paketi elde etmek için:
//public Package getPackage()
//Declare edilmiş Class'ları elde etmek için:
//public Class<?>[] getDeclaredClasses()
//Constructor çağrılıyor:
Object param = cClass.newInstance();
String methodName = "";
//setName isminde tek String parametreye sahip fonksiyona parametre gönderiliyor:
methodName = "setName";
//gönderilecek parametre türleri belirleniyor.
Method setNameMethod = param.getClass().getMethod(methodName, String.class);
//fonksiyona parametre gönderiliyor-işletiliyor:
setNameMethod.invoke(param, "Kerim");
//
//setSurname isminde tek String parametreye sahip fonksiyona parametre gönderiliyor:
methodName = "setSurname";
Method setSurNameMethod = param.getClass().getMethod(methodName, String.class);
setSurNameMethod.invoke(param, "FIRAT");
//
//setAge isminde tek int parametreye sahip fonksiyona parametre gönderiliyor:
methodName = "setAge";
Method setAgeNameMethod = param.getClass().getMethod(methodName, int.class);
setAgeNameMethod.invoke(param, 30);
//
//print isminde herhangi bir parametreye sahip olmayan fonksiyon çağrılıyor:
methodName = "print";
Method printMethod = param.getClass().getMethod(methodName);
printMethod.invoke(param);
//
//setAandB isminde iki ayrı türden parametreye sahip fonksiyona parametre gönderiliyor:
methodName = "setAandB";
/*
* gönderilecek parametre türleri belirleniyor.
* NOT: parametre türleri parametre sırasına göre belirlenmelidir.
*/
Class<?>[] paramTypes = {String.class, int.class};
//fonksiyon ismi ve parametre tür bilgisi tanımlanıyor:
Method setAandBMethod = param.getClass().getMethod(methodName, paramTypes);
//fonksiyona parametre gönderiliyor-işletiliyor:
setAandBMethod.invoke(param,"A",44);
//Class bünyesinde bulunan tüm fonksiyonları elde listelemek:
Method[] methods = Person.class.getMethods();
for(Method method : methods){
System.out.println("method = " + method.getName());
System.out.println("parametre sayısı = " +method.getParameterCount());
}
//Method class bünyesinde kullanılabilecek fonksiyonlar:
//fonksiyona ait parametreleri elde etmek için:
//public Parameter[] getParameters()
//fonksiyona ait Exception türünü elde etmek için:
//public Class<?>[] getExceptionTypes()
//fonksiyona ait parametre türlerini elde etmek için:
// public Class<?>[] getParameterTypes()
//fonksiyona ait dönüş türünü elde etmek için:
//public Class<?> getReturnType()
}catch(Exception e){
e.printStackTrace();
}
}
Çıktı:
Constructor
Name:Kerim
Surname:FIRAT
Age:30
A,44
İyi Çalışmalar.
Java'da Class bünyesinde bulunan yapılandırıcıları,alanları ve fonksiyonların kullanımı ile ilgili
daha önce yazdığım "Java Reflection Kullanımı" makalesi burada yer alıyor.
Bu konuya yönelik farklı sorular aldığım için "Java Reflection Kullanımı 2 " 'yi yazma gereği duydum.
Bu makalede geliştireceğimiz örnek uygulamada bir adet "Person.java" ve "Main.java" Classı bulunuyor.
Person class içeriğinde çeşitli set,get ve print fonksiyonları yer almaktadır.
Bu fonkisyonlar çeşitli veri türlerden parametrelere sahip. Bu fonksiyonlara Main.java tarafından parametre gönderilecektir. Ancak fonksiyonların aldığı parametre tür ve sayıları önemlidir.
Dolayısıyla kullanım aşamasında parametre türü ve parametre sayıları önem arz etmektedir.
Ayrıca parametre gönderilecek-işletilecek fonksiyonların isimleri bilinmelidir.
Tüm bu detaylara aşağıda yer verilmiştir.
Person.java Class içeriği:
public class Person {
private String name;
private String s_name;
private int age;
public Person(){
//Constructor
System.out.println("Constructor");
}
public void setName(String _n){
this.name = _n;
}
public void setSurname(String _sn){
this.s_name = _sn;
}
public void setAge(int _a){
this.age = _a;
}
public String getName(){
return this.name;
}
public void print(){
System.out.println("Name:" + name + "\nSurname:" + s_name + "\nAge:" + age);
}
public void setAandB(String _s,int _i){
//
System.out.println("" +_s +"," + _i);
}
}
Main.java Class içeriği:
public class Main {
public static void main(String[] args){
try{
//Class ismi:
/*
* farklı paket altında bulunan class'lar paket ismi ile belirtilmelidir.
* Örn 1: "java.util.Date"
* Örn 2: "java.io.InputStreamReader"
*/
String className = "Person";
//String olarak alınan Class ismi "Class"'a convert ediliyor:
Class<?> cClass = Class.forName(className);
///Class bünyesinde kullanılabilecek fonskiyonlar:
//Class'a ait yapılandırıcıları elde etmek için:
//public Constructor<?>[] getConstructors()
//Class'a ait paketi elde etmek için:
//public Package getPackage()
//Declare edilmiş Class'ları elde etmek için:
//public Class<?>[] getDeclaredClasses()
//Constructor çağrılıyor:
Object param = cClass.newInstance();
String methodName = "";
//setName isminde tek String parametreye sahip fonksiyona parametre gönderiliyor:
methodName = "setName";
//gönderilecek parametre türleri belirleniyor.
Method setNameMethod = param.getClass().getMethod(methodName, String.class);
//fonksiyona parametre gönderiliyor-işletiliyor:
setNameMethod.invoke(param, "Kerim");
//
//setSurname isminde tek String parametreye sahip fonksiyona parametre gönderiliyor:
methodName = "setSurname";
Method setSurNameMethod = param.getClass().getMethod(methodName, String.class);
setSurNameMethod.invoke(param, "FIRAT");
//
//setAge isminde tek int parametreye sahip fonksiyona parametre gönderiliyor:
methodName = "setAge";
Method setAgeNameMethod = param.getClass().getMethod(methodName, int.class);
setAgeNameMethod.invoke(param, 30);
//
//print isminde herhangi bir parametreye sahip olmayan fonksiyon çağrılıyor:
methodName = "print";
Method printMethod = param.getClass().getMethod(methodName);
printMethod.invoke(param);
//
//setAandB isminde iki ayrı türden parametreye sahip fonksiyona parametre gönderiliyor:
methodName = "setAandB";
/*
* gönderilecek parametre türleri belirleniyor.
* NOT: parametre türleri parametre sırasına göre belirlenmelidir.
*/
Class<?>[] paramTypes = {String.class, int.class};
//fonksiyon ismi ve parametre tür bilgisi tanımlanıyor:
Method setAandBMethod = param.getClass().getMethod(methodName, paramTypes);
//fonksiyona parametre gönderiliyor-işletiliyor:
setAandBMethod.invoke(param,"A",44);
//Class bünyesinde bulunan tüm fonksiyonları elde listelemek:
Method[] methods = Person.class.getMethods();
for(Method method : methods){
System.out.println("method = " + method.getName());
System.out.println("parametre sayısı = " +method.getParameterCount());
}
//Method class bünyesinde kullanılabilecek fonksiyonlar:
//fonksiyona ait parametreleri elde etmek için:
//public Parameter[] getParameters()
//fonksiyona ait Exception türünü elde etmek için:
//public Class<?>[] getExceptionTypes()
//fonksiyona ait parametre türlerini elde etmek için:
// public Class<?>[] getParameterTypes()
//fonksiyona ait dönüş türünü elde etmek için:
//public Class<?> getReturnType()
}catch(Exception e){
e.printStackTrace();
}
}
Çıktı:
Constructor
Name:Kerim
Surname:FIRAT
Age:30
A,44
İyi Çalışmalar.
Etiketler:
getClass(),
getMethod(),
invoke,
Java,
Reflection
16 Eylül 2016 Cuma
-/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games hatası ve çözümü-
Merhabalar,
Sistemde yüklü olan uygulamaların kısa yolları ve/veya Uçbirim penceresinde işletmek istediğiniz
komutlar çalışmıyorsa,yani tepkisiz kalıyorsa(böyle bir komut yok) aşağıdaki yöntem çözüm olacaktır.
ilk olarak "etc/environment" dosya içeriğini kontrol ediniz.
Dosya içeriği aşağıdaki gibi olmalıdır.
Dosya içeriği:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
Yukarıdaki satırı aşağıdaki şekilde değiştirerek Uçbirim(Konsol) penceresine yapıştırıp ENTER yapınız.
Bu işlemden sonra Uçbirim komutları işlenebilir olacaktır.
İyi çalışmalar.
Sistemde yüklü olan uygulamaların kısa yolları ve/veya Uçbirim penceresinde işletmek istediğiniz
komutlar çalışmıyorsa,yani tepkisiz kalıyorsa(böyle bir komut yok) aşağıdaki yöntem çözüm olacaktır.
ilk olarak "etc/environment" dosya içeriğini kontrol ediniz.
Dosya içeriği aşağıdaki gibi olmalıdır.
Dosya içeriği:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
Yukarıdaki satırı aşağıdaki şekilde değiştirerek Uçbirim(Konsol) penceresine yapıştırıp ENTER yapınız.
Bu işlemden sonra Uçbirim komutları işlenebilir olacaktır.
İyi çalışmalar.
Kaydol:
Kayıtlar (Atom)

