2016-05-15 84 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。