【问题标题】:Java: how to parse a string in this situation?Java:在这种情况下如何解析字符串?
【发布时间】:2016-05-15 01:58:29
【问题描述】:

所以我在 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     

有没有办法解析字符串(属性)以获得这样的 Book 属性,而不是执行 bookA.title

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

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

非常感谢!

【问题讨论】:

  • 您可以执行类似bookA.get(property); 的操作(在您在Book 中添加get(String) 方法之后)。我更喜欢getTitle()getAuthor()(在这种情况下,您可以使用JavaBean properties 访问您的字段)。
  • 您需要为 Class Book 实现 gettersetters。会是java引入的更方便更好的方法。
  • 我猜你实际上并不打算在你的类定义中包含static。 (认为​​您需要Book 的多个实例)
  • @chsbellboy 对,将编辑它
  • 非常感谢 cmets,我没有实现 getter 方法的原因是,在我使用的真实案例中,会有更多的属性,而不仅仅是作者和标题。那么也许 getter 是实现这一目标的唯一方法?

标签: java string class


【解决方案1】:

如果您真的想以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"))

【讨论】:

    【解决方案2】:

    您已将 Book 创建为对象。
    因此,将其视为对象并添加 getter 和 setter。

    在这种情况下,这将是一个方法 getTitle() 和一个单独的方法 getAuthor()
    有关 getter 和 setter 的更多信息,请参阅对this previous StackOverflow post的回复

    【讨论】:

      【解决方案3】:

      你可以使用反射:

       Field f = bookA.getClass().getDeclaredField("title");
       f.setAccessible(true);
       String title = (String) f.get(bookA);
       System.out.println(title);
      

      【讨论】:

      • 我认为他正在寻找比 xd 更简单的解决方案
      • @UDKOX 是的,看起来是这样))
      【解决方案4】:

      首先,您的代码将不起作用,因为title 是私有的。其次,我不知道您为什么将Book 类设置为静态。最后,this(Java)是面向对象的编程,所以把它当作一个对象来对待。

      当您创建一个类时,您还添加了 Getters 和 Setters 以访问其中的信息。代码如下所示:

      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
      

      【讨论】:

        【解决方案5】:

        如果您从代码中看到这几行:

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

        这里 authortitle 都是 private String 。所以你不能在类之外访问这些属性。

        因此,您需要添加可用于访问属性的公共getterssetters

        【讨论】:

          【解决方案6】:

          你应该改变你的对象类..添加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;
          }
          }
          

          也为'title'创建setter和getter.. 如果你想得到标题/作者,只需调用

          Book.getAuthor();
          

          【讨论】:

            【解决方案7】:

            如果您不想为您的类使用 getter/setter 方法;您可以使用 static 关键字将访问修饰符定义为 protected。例如: 在 com.test 包下-有两个类。一个是 Book 类,另一个是 BookInSamePackage 类。在 Book 类中;如果您将属性标题定义为受保护的静态字符串标题,则在 BookInSamePackage 类中;您可以这样访问:'Book.title '.如果你想在另一个包的类中使用这个title属性;那么这个类需要扩展Book类,可以这样访问:Book.title在另一个包的子类中。

            【讨论】:

              猜你喜欢
              • 2018-12-26
              • 2016-04-24
              • 2021-07-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-11
              • 1970-01-01
              相关资源
              最近更新 更多