2011-10-13 24 views
9

Java yansımasıyla ilgili bir okul ödevi üzerinde çalışıyorum. ayrıntıları aşağıdadır:Java yansıması: Yalnızca parametreyle nasıl yöntem alınır

bir sınıf adı kullanıcıya sorar bir konsol programı, yükleri o sınıf yaz ve bunun bir örneğini oluşturur. Sınıfın hiçbir parametresi olmayan yapıcı olduğunu varsayalım. Ardından, program oluşturulan nesnenin genel değişkenlerinin adlarını ve değerlerini basar ve ayrıca bir parametre belirtmeyen genel yöntemlerin bir listesini de görüntüler. programı, kullanıcının bir yöntemi seçmesine ve oluşturulan nesneyi bu nesneyi yürütmesine izin vermelidir. Daha sonra program, genel değişkenlerini değerleri ile tekrar göstermeli ve kullanıcının bir yöntemini seçmesine izin vermeli, vb. senin uygulanması test aşağıdaki sınıfını kullanın:

public class Counter { 
    public int c; 
    public void increment() { c++; } 
    public void decrement() { c--; } 
    public void reset() { c = 0; } 
} 

aşağıdaki cümle ile ilgisi var yaşıyorum sorun: "bir parametre belirtmeyen kamu yöntemlerin listesi". Parametresiz sadece yöntemleri listelemenin bir yolu var mı? GetMethods'ı kullandım, ancak Object ve Class süper sınıflarından parametrelerle çok fazla yöntem elde ettim. Örneğin

yazdım kod aşağıdadır:

import java.lang.reflect.*; 
import java.io.*; 

public class Q1 { 
    public static void main(String[] args) { 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
      System.out.print("What class would you like to run? "); 
      String className = reader.readLine(); 

      Class c = Class.forName(className); 
      Object o = c.newInstance(); 

      for (Field f : c.getFields()) 
       System.out.println(f); 
      for (Method m : c.getMethods()) 
       System.out.println(m); 

     } catch(IOException e) { 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (InstantiationException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

aşağıdaki Çıktılar:

hangi sınıf çalıştırmak istersiniz? Sayaç
kamu int Counter.c
public void Counter.reset()
public void Counter.increment()
public void Counter.decrement()
kamu nihai yerli geçersiz java.lang.Object.wait (uzun) java.lang.InterruptedException
herkese açık son void java.lang.Object.wait(), java.lang.InterruptedException atar
public final void java.lang.Object.wait (uzun, int), java.lang.InterruptedException atar
public boolean java.lang.Object.equals (java.lang.Object)
public java.la ng.String java.lang.Object.toString()
genel yerel int java.lang.Object.hashCode()
halka son doğal java.lang.Class java.lang.Object.getClass()
halka son doğal java.lang.Object.notify()
kamu nihai yerli boşluk java.lang.Object.notifyAll()

basılacak hiçbir parametreleri ile sadece olanları almanın bir yolu var mı geçersiz? Ayrıca ödev detaylarını ilk etapta da yorumluyor muyum? Ya da "bir parametre belirtmeyen kamu yöntemleri" ifadesi muhtemelen başka bir şey anlamına gelir ve tamamen yanlış bir fikrim var mı?

+2

Bu KKO görevin. İşte el kitabı - http://download.oracle.com/javase/6/docs/api/index.html?java/lang/reflect/package-summary.html. Ödevin yorumlanması bu arada doğru. – Perception

cevap

14

Yöntem sınıfı için API'ye baktınız mı? Aradığınız şeyin cevabına sahip olan getParameterTypes() adlı bir yöntem vardır ve API, parametreler yoksa bunun ne olacağı açıkça belirtir. Bunu, Dönen Yöntemler için for döngüsünüzde belirtin ve flint gibi olmalısınız.

5

Sadece Method sınıfı 'getParameterTypes işlevini kullanın. Dönüş değeri 0 ise, o işleve herhangi bir parametre yoktur. Java doc önemli bir parçası:

getParameterTypes

halka sınıfı [] getParameterTypes()

Returns an array of Class objects that represent the formal parameter types, in declaration order, of the method represented by 

bu yöntem nesnesi. Temeldeki yönteminin hiçbir parametre almazsa, uzunluk 0 dizisini döndürür.

Returns: 
    the parameter types for the method this object represents 
İlgili konular