2016-08-07 7 views
-1

Ich habe 2 Klassen-Dateien in meinem einfachen Projekt - Entschuldigung ein anderes Newbee hier!Zugriff auf Methode in Arraylist Klasse aus anderen Klassen in Java

Aber ich bekomme einen Kompilierungsfehler im letzten Teil, wo ich versuche, die hoffentlich gespeicherten Konfigurationseinstellungen aus einer Datei für mein Projekt zu drucken, auf die während des gesamten Projekts verwiesen wird. Die Datei ist nur Reihen von Werten wie dieser 'ButtonConfig, 8, V, NULL, bunny, mpg'

Ich möchte im Grunde in der Lage sein, den Inhalt dieser Arraylist zu verwenden, um die Konfiguration eines Raspberry PI dynamisch einzurichten GPO-Pins dh für die oben genannten Werte Button an GPO Pin 8 wird Video (V) "< .. anderer Wert ...> _ bunny.mpg"

Jede Hilfe sehr geschätzt - nur sagen mir, warum ich nicht kann Zugriff auf die getExtension-Methode wäre nett!

Inhalt der ersten Java-Datei ist -

package bpunit; 

public class ButtonConfig { 
    private String keyword; 
    private String gponumber; 
    private String buttontype; 
    private String language; 
    private String filename; 
    private String extension; 

    public String getKeyword() { 
     return keyword; 
    } 
    public void setKeyword(String keyword) { 
     this.keyword = keyword; 
    } 

    ............... 

    public String getExtension() { 
    return extension; 
    } 

    public void setExtension(String extension) { 
    this.extension = extension; 
    } 

} 

Die zweite enthält diese -

package bpunit; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 


public class Read_ini { 
    public void Read_ini_toObject() 
    { 
    String csvFileToRead = "configs/BPUnit.properties"; 
    BufferedReader br = null; 
    String line; 
    String splitBy = ","; 
    List buttonList = new ArrayList(); 

    try { 

     br = new BufferedReader(new FileReader(csvFileToRead)); 
     while ((line = br.readLine()) != null) { 

      // split on comma(',') 
      String[] buttonconfig = line.split(splitBy); 

      // create button object to store values 
      ButtonConfig buttonObject = new ButtonConfig(); 

      // add values from csv to car object 
      buttonObject.setKeyword(buttonconfig[0]); 
      buttonObject.setGponumber(buttonconfig[1]); 
      buttonObject.setButtontype(buttonconfig[2]); 
      buttonObject.setLanguage(buttonconfig[3]); 
      buttonObject.setFilename(buttonconfig[4]); 
      buttonObject.setExtension(buttonconfig[5]); 
      // adding button object to a list 
      buttonList.add(buttonObject); 

     } 
     // print values stored in buttonList 
     printButtonList(buttonList); 

     } catch (FileNotFoundException e) { 
      System.out.print(e); 
     } catch (IOException e) { 
      System.out.print(e); 
     } finally { 
      if (br != null) { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        System.out.print(e); 
       } 
      } 
     } 
    } 

    public void printButtonList(List buttonListToPrint) { 
     for (int i = 0; i < buttonListToPrint.size(); i++) {    

     // THE LINE BELOW FAILS - getExtension() does not exist 
     // and all other attempts give me pointer references 
     //instead of the text // 

      System.out.println(buttonListToPrint.get(i).getExtension());   

      } 
     } 

    } 
+2

ändern 'Liste buttonList = new Arraylist();' auf 'List buttonList = new Arraylist ();' und auch in 'printButtonList' Meth od, das Argument sollte 'List buttonListToPrint' sein. – SomeDude

+0

@svasa Ab Java 7 müssen Sie den generischen Typ auf dem RHS bei der Initialisierung nicht angeben. – user1803551

+0

Danke svasa und alle anderen. Arbeitete einen Traum und half mir, es besser zu verstehen. – osmanager

Antwort

1

Sie haben den parametrisierte Typen ButtonConfig zu Ihrem ArrayList hinzuzufügen. Es endet damit, List<ButtonConfig> statt nur List zu sein.

package bpunit; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 


public class Read_ini { 
    public void Read_ini_toObject() 
    { 
    String csvFileToRead = "configs/BPUnit.properties"; 
    BufferedReader br = null; 
    String line; 
    String splitBy = ","; 
    List<ButtonConfig> buttonList = new ArrayList<ButtonConfig>(); 

    try { 

     br = new BufferedReader(new FileReader(csvFileToRead)); 
     while ((line = br.readLine()) != null) { 

      // split on comma(',') 
      String[] buttonconfig = line.split(splitBy); 

      // create button object to store values 
      ButtonConfig buttonObject = new ButtonConfig(); 

      // add values from csv to car object 
      buttonObject.setKeyword(buttonconfig[0]); 
      buttonObject.setGponumber(buttonconfig[1]); 
      buttonObject.setButtontype(buttonconfig[2]); 
      buttonObject.setLanguage(buttonconfig[3]); 
      buttonObject.setFilename(buttonconfig[4]); 
      buttonObject.setExtension(buttonconfig[5]); 
      // adding button object to a list 
      buttonList.add(buttonObject); 

     } 
     // print values stored in buttonList 
     printButtonList(buttonList); 

     } catch (FileNotFoundException e) { 
      System.out.print(e); 
     } catch (IOException e) { 
      System.out.print(e); 
     } finally { 
      if (br != null) { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        System.out.print(e); 
       } 
      } 
     } 
    } 

    public void printButtonList(List<ButtonConfig> buttonListToPrint) { 
     for (int i = 0; i < buttonListToPrint.size(); i++) {    

     // THE LINE BELOW FAILS - getExtension() does not exist 
     // and all other attempts give me pointer references 
     //instead of the text // 

      System.out.println(buttonListToPrint.get(i).getExtension());   

      } 
     } 

    } 
-1

Der Grund, warum die Kompilierung ist versagt, weil, wenn Sie ein Objekt in die ArrayList hinzuzufügen upcast als ein Objekt der Klasse Object ist. Jetzt, wenn Sie es extrahieren, müssen Sie es einfach zurückschreiben auf den ursprünglichen Typ. so alles, was Sie tun müssen, ist dies:

public void printButtonList(List buttonListToPrint) { 
     for (int i = 0; i < buttonListToPrint.size(); i++) {    

     // THE LINE BELOW FAILS - getExtension() does not exist 
     // and all other attempts give me pointer references 
     //instead of the text 
      ButtonConfig buttonObject =(ButtonConfig)buttonListToPrint.get(i); 
      System.out.println(buttonObject.getExtension());   

      } 
     } 

Oder wie es in den Kommentaren und Antworten oben genannten Sie generics verwenden könnte und eine Liste der Typ ButtonConfig

public void Read_ini_toObject() 
    { 
    String csvFileToRead = "configs/BPUnit.properties"; 
    BufferedReader br = null; 
    String line; 
    String splitBy = ","; 
    List<ButtonConfig> buttonList = new ArrayList<ButtonConfig>(); 

und geben sie in der Funktion erstellen printButtonList

public void printButtonList(List<ButtonConfig> buttonListToPrint) { 
     for (int i = 0; i < buttonListToPrint.size(); i++) {    

     // THE LINE BELOW FAILS - getExtension() does not exist 
     // and all other attempts give me pointer references 
     //instead of the text     
System.out.println(buttonListToPrint.get(i).getExtension()); 



      } 
     } 
+0

Könnte jemand den Downvote erklären –

+0

Wahrscheinlich, weil Sie es in Ihrer ursprünglichen Antwort falsch verstanden haben. – user1803551

+0

Okay, dann wäre es großartig, wenn jemand erklären könnte, was ich falsch gemacht habe ... nie zu spät zum Lernen :) –