2016-05-15 2 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 (свойство); '(после добавления метода' get (String) 'в' Book'). Я бы предпочел 'getTitle()' и 'getAuthor()' (в этом случае вы можете получить доступ к своим полям с помощью свойств [JavaBean properties] (https://docs.oracle.com/javase/tutorial/javabeans/writing/properties). HTML)). –

+0

вам нужно реализовать 'getter' и' seters' для Class 'Book'. Это будет более удобный и лучший подход, который вводится 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 как объект.
Итак, рассматривайте его как объект и добавляйте геттеры и сеттеры.

В этом случае это будет метод, getTitle() и отдельный метод getAuthor().
Для получения дополнительной информации о добытчиками и сеттеров, увидеть ответы на 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 & 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 
0

Если вы видите эти несколько линий из вашей трески е:

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

Здесь author и title оба private типа String. Таким образом, вы не можете получить доступ к этим свойствам вне класса.

Для того, чтобы получить доступ к объектам, Вам нужно добавить общедоступные getters и setters.

0

вы должны изменить вы Object класса .. добавить геттер и сеттер способа .. вот пример:

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; 
} 
} 

и создать и присваиватель для «титула» тоже .. если вы хотите получить название/автор, просто позвоните

Book.getAuthor(); 
0

Если вы не хотите иметь метод геттер/сеттер для вашего класса, вы можете определить модификатор доступа, как защищенный со статическим keyword.For примера: под com.test пакет. e два класса.Один из них - класс Book, а другой - класс BookInSamePackage. В классе Book: если вы определяете заголовок атрибута как защищенный статический заголовок String, то в классе BookInSamePackage, вы можете получить доступ так: «Book.title». Если вы хотите использовать этот атрибут title в класс другого пакета, тогда этому классу необходимо расширить класс Book и получить доступ таким образом: Book.title в дочернем классе другого пакета.