从Book-class simple Java获取Author-name

时间:2016-02-20 05:24:39

标签: java

所以我在练习,简单的练习是创建一个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创建实例... 然后我说:得到这本书作者的名字......

我感谢所有人的帮助!

2 个答案:

答案 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){}以避免任何异常

  1. 我创建子类Book and Author

  2. 在作者中,在getname中,我添加了书(书),

  3. 添加到作者类: public String getname(){return"作者:" +名称+"书:" + bb.book;}

  4. 你可以看到下面的代码:

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