2017-02-07 1 views
3

diesen Code Gegeben:Kann Java's Array clone() null zurückgeben?

public class SoundAndFilterCollection { 

    private final Sound[] sounds; 
    private final Filter[] filters; 

    public SoundAndFilterCollection(Sound[] sounds, Filter[] filters) { 
     this.sounds = sounds.clone(); 
     this.filters = filters.clone(); 

     Arrays.sort(sounds); 
     Arrays.sort(filters); 
    } 

    public Sound[] getSounds() { 
     return sounds.clone(); 
    } 

    public Filter[] getFilters() { 
     return filters.clone(); 
    } 
} 

Ich bin ein Nullpointer haben, wenn getSounds() tun:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object gab[].clone()' on a null object reference 
at com.mycompany.messenger.push2talk.domain.SoundAndFilterCollection.getSounds(SoundAndFilterCollection.java:24) 
at com.mycompany.messenger.shareinchat.chatbar.hiddenpanel.views.soundstickers.presenter.SoundStickersPanelPresenter.setSoundsViews(SoundStickersPanelPresenter.java:92) 
at com.mycompany.messenger.shareinchat.chatbar.hiddenpanel.views.soundstickers.presenter.SoundStickersPanelPresenter.access$000(SoundStickersPanelPresenter.java:20) 
at com.mycompany.messenger.shareinchat.chatbar.hiddenpanel.views.soundstickers.presenter.SoundStickersPanelPresenter.access$200(SoundStickersPanelPresenter.java:20) 
at com.mycompany.messenger.shareinchat.chatbar.hiddenpanel.views.soundstickers.presenter.SoundStickersPanelPresenter$3.onDoneWithContext(SoundStickersPanelPresenter.java:59) 
at com.mycompany.messenger.shareinchat.chatbar.hiddenpanel.views.soundstickers.presenter.SoundStickersPanelPresenter$3.onDoneWithContext(SoundStickersPanelPresenter.java:56) 
at com.mycompany.deferred.Done$UIContextual.onDone(Done.java:35) 

Meine Frage ist: Wie kann ich ein Null-Objekt in getSounds haben() mit dieser Implementierung ? Ich habe Array clone() in JDK 1.8 und in einigen Android-Geräten getestet und gibt niemals Null zurück.

Über die 2 Arrays.sort() Ich bin mir bewusst, dass sie die falsche Referenz sortieren und ich denke nicht, dass sie für diesen Absturz relevant sind, aber ich wollte den Code so teilen wie er ist.

PS: Auch ich habe diesen Absturz in einer Vielzahl von Telefonen, so glaube ich nicht, dass es mit einer seltsamen Implementierung von clone() in einem modifizierten Telefon verwandt ist.

+0

initialisiert Und nur zu klären, nicht in der Lage war 'sounds' über den Konstruktor übergeben ist nicht' null' ? –

+0

Implementiert Ihre Sound-Klasse Clonable? – AnixPasBesoin

+3

Werfen Sie einen Blick auf [Ruft Clone() auf einem Array klonen auch seinen Inhalt] (http://stackoverflow.com/questions/5821851/does-calling-clone-on-an-array-also-clone-its-) Inhalt) –

Antwort

0

Mystery gelöst, diese Klasse wurde mit Gson in einem Cache instanziiert, wie ich here gesehen habe, ist dies auch ohne einen leeren Konstruktor möglich.

wurde mit proguard Diese Klasse verschleiert, damit es die serialisierten Informationen zu erholen, und es wurde mit Nullwerten

Verwandte Themen