所以我在练习,简单的练习是创建一个Author类,&一本书课。
他们有正确的getter和setter(测试),但是当我试图获得一本书的作者名称时...它说有一个空对象? (空指针异常)这里是main的摘录:
public static void main(String[] args){
Author a = new Author("Julius", "j@gmail.com", 'm');
Book b = new Book("ASDFG", a, 69.99, 4);
System.out.println(b.getAuthor().getName());
}
我为Author和Book创建实例... 然后我说:得到这本书作者的名字......
我感谢所有人的帮助!
答案 0 :(得分:0)
根据您显示的代码,b.getAuthor()
返回null。
这意味着您永远不会在Author
类中设置Book
对象。
你应该有一个看起来像这样的构造函数(完全猜测这些参数)。
private Author author;
// Other fields...
public Book(String title, Author author, double price, int number) {
this.author = author; // need this
// other fields = other parameters...
}
您还需要您的getAuthor()
方法不返回null
public Author getAuthor() {
return this.author;
}
答案 1 :(得分:0)
您可以添加try {} catch(exception){}以避免任何异常
我创建子类Book and Author
在作者中,在getname中,我添加了书(书),
添加到作者类: public String getname(){return"作者:" +名称+"书:" + bb.book;}
你可以看到下面的代码:
public class SnackbarManager {
private static final String TAG = SnackbarManager.class.getName();
private Snackbar snackbar;
private Create instance;
// private boolean isMultiSnackbar;
public interface Create {
Snackbar create();
}
public SnackbarManager(Create instance) {
// why not pass in snackbar? coz snackbar.show will fail after 1st show (it multiple snackbar), thus need to recreate it
snackbar = instance.create();
this.instance = instance;
}
public void show(Fragment fragment) {
if (fragment.getUserVisibleHint()) {
snackbar.show();
}
}
public void onSetUserVisibleHint(boolean isVisible) {
if (isVisible) {
if (snackbar == null) {
snackbar = instance.create();
}
snackbar.show();
Log.d(TAG, "showSnackbar="+snackbar.isShown());
// if snackbar.isShown()=false, if means multiple snackbar exist (might or might not be in same fragment)
/*
boolean isMultiSnackbar = !snackbar.isShown();
// the following is inaccurate when I manually dismiss one of the snackbar
// even when isShown()=true, the snackbar is not shown
if (isMultiSnackbar) {
snackbar = null;
snackbar = instance.create();
snackbar.show();
}
*/
}
else {
Log.d(TAG, "dismissSnackbar");
snackbar.dismiss();
// subsequent show will fail, make sure to recreate next
snackbar = null;
}
}
}
}
public class TestFragment extends Fragment {
private SnackbarManager snackbarManager;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (snackbarManager != null)
snackbarManager.onSetUserVisibleHint(isVisibleToUser);
}
public void showSnackbar() {
snackbarManager = new SnackbarManager(new SnackbarManager.Create() {
@Override
public Snackbar create() {
Snackbar snackbar = Snackbar.make(snackbarLayout, "Create your first moment ;)", Snackbar.LENGTH_INDEFINITE);
snackbar.setAction("Create", new View.OnClickListener() {
@Override
public void onClick(View view) {
snackbarManager = null;
}
});
// enable following if not Snackbar.LENGTH_INDEFINITE
/*
snackbar.setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
super.onDismissed(snackbar, event);
snackbarManager = null;
}
})
*/
return snackbar;
}
});
snackbarManager.show(this);
}
}
<强>输出强>
public class Getauthorname {
public static void main(String[] args) {
Author a = new Author("Julius", "j@gmail.com","m");
System.out.println(a.getname());
}
}
class Author{
Book bb = new Book("ASDFG", "a", 69.99, 4);
String name;
String email;
String m;
Author( String name,String email, String m){
this.name= name;
this.email = email;
this.m = m;
}
public void setname(String name){ this.name= name; }
//You must add to get bb.book or other data you need it
public String getname(){ return "Author :" + name +" Book:" + bb.book;}
public void setemail(String email){ this.email= email; }
public String getemail(){ return email;}
public void setm(String m){ this.m= m; }
public String getm(){ return m;}
}
class Book extends Object{
String book;
String a;
double price;
int cod;
Book ( String book,String a, double price, int cod){
this.book = book;
this.a = a;
this.price = price;
this.cod = cod;
}
public void setbook(String b){ this.book = book; }
public String getbook(){ return book;}
public void seta(String a){ this.a= a; }
public String geta(){ return a;}
public void seta(double price){ this.price= price; }
public double getprice(){ return price;}
public void setcod(int cod){ this.cod= cod; }
public int getcod(){ return cod;}
}