2016-06-29 2 views
0

Java Version: 1,6Wie senden Sie mehrere Objekte mit demselben Status an eine Methode mit einem einzelnen Objektparameter mithilfe von Java?

Ich habe mehrere Bohnen mit ähnlicher Struktur

ClassBean1 { 
    String firstName; 
    String middleName; 
    String lastName; 
} 



UtilClass { 

    public static void concatName(ClassBean1 object) { 
     String fullName = object.firstName + object.middleName + object.lastName; 
     System.out.println(fullName); 
    } 

} 

Mainclass { 
    UtilClass.concatName(newClassBean1) 
} 

Jetzt bekomme ich noch eine Bean-Klasse mit derselben Struktur wie der ClassBean1; Sprich ClassBean2

ClassBean2 { 
    String firstName; 
    String middleName; 
    String lastName; 
} 

ich UtilClass.concatName so ändern will, dass es mit Vornamen, Middle & Nachnamen auf alle Objekt funktioniert. Ich habe folgende Änderungen vorgenommen:

UtilClass { 

    public static void concatName(Object object) { 
     String fullName = object.firstName + object.middleName + object.lastName; 
     System.out.println(fullName); 
    } 

} 

Aber es gibt Zeitfehler kompilieren. Könnte jemand bitte bei der Lösung helfen !!!

Ich konnte keine existierende Bean, d. H. ClassBean1, berühren. Also der neue Code kann ich vorsichtig machen, Basisklasse und abgeleitetes Fundamenta zu schaffen; aber refactor es so, dass der vorhandene Code funktionieren sollte

+1

Was sind diese Kompilierzeitfehler? (ALSO, wenn Sie eine gemeinsame Schnittstelle haben, warum verwenden Sie nicht eine, ähm, gemeinsame "Schnittstelle"?) – doctorlove

+2

"Was sind diese Kompilierzeit Fehler?" @doctorlove ... Ich denke, es wird mit Object zu tun haben kein Feld namens "firstName" und so weiter ... – Fildor

+0

@doctorlove: es sagt nicht Vorname, Nachname zweiter Vorname – fatherazrael

Antwort

1

Sie müssen eine Basisklasse mit den Mitgliedern und der Methode erstellen, die Sie alle anderen Klassen ableiten möchten, in Ihrer Basisklasse den Namen Mitglieder und die ConcatName-Methode definieren Jedes davon abgeleitete Objekt erbt die Mitglieder und die Funktion und es funktioniert.

+0

Danke. BUt Wenn Sie die Basisklasse vergessen und sich auf UtilClass konzentrieren, wie können wir dann die UtilClass-Methode ändern, um jedes Objekt mit demselben Status zu übernehmen. – fatherazrael

+1

Sie müssen den Status überprüfen, wenn Sie die Methode aufrufen –

+2

Alles, was Sie tun müssen, ist Ihre Funktion Instanz der Basisklasse dann funktionieren alle Objekte, die es von der Basis abgeleitet nennen - Polymorphismus – SPlatten

1

Erstellen Sie eine übergeordnete Klasse mit diesen drei Variablen, andere Klassen erben, die jene drei von dieser übergeordneten Klasse verwenden als:

public static void concatName(Parent object) { 
    String fullName = object.firstName + object.middleName + object.lastName; 
    System.out.println(fullName); 

}

1

Und wenn Sie wirklich wollen, es zu tun, ohne createing die Basisklasse, der einzige Weg, auf den ich kommen kann, ist Reflektion. Sie können ein Objekt als Methode param haben. In Ihrer Methode können Sie dann mithilfe der Reflektion prüfen, ob alle erforderlichen Methoden vorhanden sind, und sie aufrufen, um die Daten abzurufen.

Aber das ist sehr hässlich und sollte nicht versucht werden. Der beste Weg wäre entweder eine Basisklasse oder eine gemeinsame Schnittstelle, wie zuvor vorgeschlagen.

+0

Kannst du mir einen Ausschnitt dafür geben? Da ich nicht Objekt und dann Instanz von verwenden möchte. Ich konnte keine Basisklasse machen; Das ist für mich nicht möglich. – fatherazrael

+1

Nun, ein ebenso hässlicher "instanceof" und Casting kann auch funktionieren. Wenn Sie diese Reflexion in Betracht ziehen, dann vergiss es. – Fildor

+0

Aber ich kann nicht instanceOf und Casting annehmen, es gibt 10 Objekte mit gleichen Feldern. (Ich kann sie nicht ändern) und ich mache elften und Refactoring bestehenden UTIL-Klasse. dann wie kann ich das tun, dass alle diese 10 objekte auch funktionieren und mein objekt auch funktioniert. – fatherazrael

1

können Sie überprüfen instanceof

public static void concatName(Object object) { 

     if(object instanceof ClassBean1){ 
      ClassBean1 b1 = (ClassBean1) object; 
      String fullName = b1.firstName +b1.middleName + b1.lastName; 
      System.out.println(fullName); 
     } else if(object instanceof ClassBean2){ 
      ClassBean2 b2 = (ClassBean2) object; 
      String fullName = b2.firstName +b2.middleName + b2.lastName; 
      System.out.println(fullName); 
     } 

} 
0

Verwenden Sie eine Methode in Util Klasse haben kann, die drei Parameter übernehmen und diese Methode von der Hauptklasse aufrufen.

UtilClass {

public static void concatName (String vorName, String Middle, String nachName) { String fullname = firstname + Middle + nachName; System.out.println (vollständigerName); }

}

Mainclass { UtilClass.concatName (newClassBean1.getFirstName() + newClassBean1.getMiddleName() + newClassBean1.getLastName()) // für die zweite Klasse UtilClass.concatName (newClassBean2.getFirstName() + newClassBean2.getMiddleName() + newClassBean2.getLastName()) }

1

Sie können Reflektion verwenden, um die Klassenfelder/Variablen zu erhalten.

Übergeben Sie die Bean eines beliebigen Typs mit gemeinsamem Status, d. H. Die allgemeinen Variablen, die Sie in der UtilClass-Funktion verwenden möchten, und verwenden Sie die Basisklasse jedes Objekts, das die Object-Klasse ist, als Parameter für die gleiche Methode. Extrahieren Sie nun das Klassenobjekt aus dieser Variablen und verwenden Sie Reflektionsmethoden, um die Variablenwerte abzurufen.

Mit diesem Ansatz können Sie das gewünschte Ergebnis ohne Polymorphie/Vererbung oder Ändern der Bean-Klassen erhalten.

Verwandte Themen