Я изучаю Java и могу использовать некоторую помощь здесь.Ссылка на переменную класса из другого класса с помощью метода
На данный момент я просматриваю полиморфизм, поэтому у меня есть класс Dog и еще один класс, который имеет метод добавления объектов Dog в список (несколько похожий на ArrayList).
package chap8;
/**
* Created by user1 on 7/11/15.
*/
class Dog {
private String name;
private int age;
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
}
public class MyDogList {
//array to hold dog objects
private Dog[] dogs = new Dog[5];
//int to check index in dog array
private int nextIndex = 0;
//add method to add dog objects to dog array
private void add(Dog d) {
if(nextIndex < dogs.length) {
dogs[nextIndex] = d;
nextIndex++;
System.out.println("Dog added at position: " + nextIndex);
System.out.println("Space left for " + (dogs.length - nextIndex) + " more dogs.");
}
else {
System.out.println("No more space to add dogs!");
}
}
private void display() {
for (int i = 0; i < dogs.length; i++) {
System.out.println("Name of Dog: " + dogs[i].getName());
}
}
public static void main(String[] args) {
Dog obj1 = new Dog();
obj1.setName("Corgi");
obj1.setAge(2);
MyDogList dogList = new MyDogList();
dogList.add(obj1);
dogList.display();
Dog obj2 = new Dog();
obj2.setName("Labrador");
obj2.setAge(3);
dogList.add(obj2);
Dog obj3 = new Dog();
obj3.setName("Golden Retriever");
obj3.setAge(5);
dogList.add(obj3);
}
}
Хотя процесс добавления Собаку объектов работ, что я хотел бы иметь еще один метод display
, вероятно, в class MyDogList
, который будет отображать имена всех объектов Dog в dogs
массиве в MyDogList
классе. Но потом я понял, что если метод просто принимает массив Dog, нет никакого способа узнать имена отдельных объектов собаки в этом массиве.
Как мне построить такой метод здесь?
EDIT
я понял, от комментариев и ответов, которые я мог бы использовать getter
переменной Dog name
, чтобы получить имя. Но когда я изменяю код (выделено полужирным шрифтом), я получаю Null Pointer Exception
. Что пошло не так? Я пытался получить доступ к позиции массива, прежде чем он был настроен на что-то?
/usr/lib/jvm/java-8-oracle/bin/java -Didea.launcher.port=7535 -Didea.launcher.bin.path=/home/user1/Documents/idea-IC-141.177.4/bin -Dfile.encoding=UTF-8 -classpath "/home/user1/Dropbox/Development/Java/Head First/bin:/usr/lib/jvm/java-8-oracle/jre/lib/plugin.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jce.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfr.jar:/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/charsets.jar:/usr/lib/jvm/java-8-oracle/jre/lib/resources.jar:/usr/lib/jvm/java-8-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-8-oracle/jre/lib/management-agent.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jsse.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfxswt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jfxrt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunjce_provider.jar:/home/user1/Documents/idea-IC-141.177.4/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain chap8.MyDogList
Exception in thread "main" Dog added at position: 1
Space left for 4 more dogs.
Name of Dog: Corgi
java.lang.NullPointerException
at chap8.MyDogList.display(MyDogList.java:52)
at chap8.MyDogList.main(MyDogList.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Process finished with exit code 1
Я не понимаю. Каждая 'Собака' имеет' getName'. –
Я не понимаю, ваш метод 'display' выглядит отлично, вам просто нужно' list [i] .getName() 'или даже лучше' Arrays.stream (list) .map (Dog :: getName) .forEach (System .out :: Println) '. Кажется, вы знаете, как вызывать методы и как использовать массивы - так что конкретно? –
Не полностью меняйте свой вопрос после того, как получите ответ. –