2016-05-15 195 views
0

所以我創建了一個簡單的Java類是這樣的:Java:如何在這種情況下解析字符串?

public class Book { 
    private String author; 
    private String title; 

    public Book (String author, String title) { 
     this.author = author; 
     this.title = title; 
    } 
} 

public void checkInfo  

有沒有一種方法,以獲得簿屬性就是這樣,而不是做bookA.title解析字符串(屬性)?

Book bookA = new Book("George Orwell","Animal Farm") 

String property = "title"; 
System.out.print(bookA.property); 

非常感謝!

+1

你可以做類似' bookA.get(property);'(在'Book'中添加'get(String)'方法之後)。我更喜歡'getTitle()'和'getAuthor()'(在這種情況下,您可以使用[JavaBean properties](https://docs.oracle.com/javase/tutorial/javabeans/writing/properties)訪問您的字段。 HTML))。 –

+0

你需要爲'Book'類實現'getter'和'setters'。它會更方便,更好的方法由java引入。 –

+0

我猜你實際上並不打算在你的類定義中使用「static」。 (想你會想要多個''Book''') – chsbellboy

回答

2

如果你真的想爲String訪問許多屬性,我建議你使用Map<String, String>這樣的:

public class Book 
{ 
    private Map<String, String> properties = new HashMap(); 

    public void setProperty(String name, String value) 
    { 
     properties.set(name,string); 
    } 

    public String getProperty(String name) 
    { 
     return properties.get(name); 
    } 
} 

現在你可以使用這樣的:

Book book = new Book(); 

book.setProperty("title","Animal Farm"); 
book.setProperty("author","George Orwell"); 

System.out.println("Book: " + book.getProperty("title") + " by " + book.getProperty("author")) 
+0

是的,這是我一起去的,謝謝! – DanielleC

1

您已創建Book作爲對象。
所以,把它當作一個對象並加入getters和setter。

在這種情況下,這將是一種方法,getTitle()和一個單獨的方法getAuthor()
有關getter和setter的更多信息,請參閱響應this previous StackOverflow post

1

您可以使用反射:

所有的
Field f = bookA.getClass().getDeclaredField("title"); 
f.setAccessible(true); 
String title = (String) f.get(bookA); 
System.out.println(title); 
+0

我認爲他正在尋找一個更容易的解決方案比xd – UDKOX

+0

@UDKOX是啊,似乎是這樣)) –

1

首先,你的代碼將無法工作,因爲title是私人的。其次,我不知道爲什麼你將Book類設置爲靜態。最後,這個(Java)是面向對象編程,所以把它當作一個對象來對待。

當您創建一個班級時,您還需要添加Getters &設置員來訪問裏面的信息。該代碼是這樣的:

public class Book { 
    private String author; 
    private String title; 

    public Book (String author, String title) { 
     this.author = author; 
     this.title = title; 
    } 
} 

public String getTitle(){ 
    return this.title; 
} 

public String getAuthor(){ 
    return this.author; 
} 

訪問數據

Book bookA = new Book("George Orwell","Animal Farm") 

System.out.print("Book: " + bookA.getTitle() + " by " + bookA.getAuthor()); 

這將返回:

Book: Animal Farm by George Orwell 
0

如果你看到這些你的鱈魚幾行E:

private String author; // both are private variables 
private String title; 

這裏authortitle都是private字符串。所以你不能在課堂外訪問這些屬性。

因此,您需要添加可用於訪問屬性的公開getterssetters

0

你應該改變你的對象類..添加getter和setter方法.. 這裏是例子:

public class Book{ 
    String myauthor; 
    String mytitle; 
public Book (String author, String title){ 
    myauthor=author; 
    mytitle=title; 
} 
public void setAuthor(String Autor){ 
myauthor=author; 
} 
public String getAuthor(){ 
return myauthor; 
} 
} 

,如果你想獲得創建setter和getter的「標題」太.. 標題/作者,只是簡單地調用

Book.getAuthor(); 
0

如果你不想擁有的getter/setter方法的類,你可以定義訪問修飾符與靜態keyword.For例如保護是: 下com.test包 - 有兩班。一個是Book類,另一個是BookInSamePackage類。在Book類中;如果將屬性標題定義爲受保護的靜態String標題,則在BookInSamePackage類中;您可以像這樣訪問:'Book.title'。如果要在此標題屬性中使用另一個包的類;然後這個類需要擴展Book類並且可以像這樣訪問:另一個包的子類中的Book.title。

相關問題