2016-02-25 130 views
1

我有文件句柄類:的Java:類之間發送變量

public class FileHandle { 
public static String a; 
public static String b; 
public static String c; 

public void openFile() throws FileNotFoundException { 
    File dir = new File("C:/Folder/DB"); 
    if (dir.isDirectory()) { 
     for (File file : dir.listFiles()) { 
      Scanner s = new Scanner(file); 
      //String f = file.getName(); 
      // System.out.println("File name:" + f); 
      while (s.hasNext()) { 
       a = s.next(); 
       b = s.next(); 
       c = s.next(); 
       System.out.printf("%s\n %s\n %s\n", a,b,c); 
      } 
     } 
    } 

和常量類:

public class Constants { 

FileHandle h = new FileHandle(); 
public static final String[] LIST_DATA = {FileHandle.a,FileHandle.b,FileHandle.c}; 
public static final int NEW_ELEMENT_ID = 0; 

} 

主要的問題:爲什麼在我的常量類我只得到最後掃描的文檔信息。順便提一下,要提到FileHandle類掃描儀工作正常,一切都很好。唯一真正的困難是將變量發送到Constants類,正如我所提到的,我只獲取最後掃描的文檔信息。

+0

你需要做'了''B'和'C'非靜態。一般來說,你應該非常謹慎地使用非最終靜態變量。 –

+0

但是,如果我不讓他們靜態我會能夠讓他們在常量類? – TheDude

+0

如果你讓'h'靜態,你可以。但目前尚不清楚你的期望是什麼:你一再覆蓋相同的變量。 –

回答

1

不確定是否瞭解您的問題。但是,假設要什麼的是保持不同的呼叫跟蹤,您可以:

  • abc連接字符串:

     a = (a == null) ? s.next() : a + " " + s.next(); 
         b = (b == null) ? s.next() : b + " " + s.next(); 
         c = (c == null) ? s.next() : c + " " + s.next(); 
    
  • 使abc名單:

    public static List<String> a = new ArrayList<String>; 
    public static List<String> b = new ArrayList<String>; 
    public static List<String> c = new ArrayList<String>; 
    ... 
         a.add(s.next()); 
         b.add(s.next()); 
         c.add(s.next()); 
    

由於靜態值由同一類的所有實例共享,所以當您爲其分配以覆蓋所有以前的值時。

請注意:以上不使用同步,並且是線程安全的...

+0

所以我的問題是,靜態覆蓋所有以前的值,如你所說? – TheDude

+0

號碼1方法工作:) – TheDude

+0

但也許你可以幫助我更多一點? :) – TheDude