Będziesz musiał zdefiniować powiązanie między swoją czystą biblioteką Java a Androidem. Możesz użyć iniekcji Dependency, aby wstrzyknąć modele przy użyciu podpisu klasy, a następnie zdefiniować modele działek wewnątrz aplikacji (lub innego projektu, na przykład wtyczki). Lub można osiągnąć to samo za pomocą generycznych. miej na uwadze, ponieważ biblioteka Java jest już skompilowana, technicznie, nie możesz jej zmienić poprzez zaimportowanie jej do projektu androida (widziałem, jak ludzie "przepisują" niektóre pliki z zależności, a następnie dodawali je do całej oryginalnej ścieżki oszukać klasę, ale to bardzo ryzykowne, ponieważ nie będziesz w stanie wchodzić w interakcje z resztą kodu zależności, a jeśli coś się zmieni, sprawa się zepsuje).
jeśli masz dostęp do kodu źródłowego czystej biblioteki Java, a następnie zmodyfikuj go, aby używać fabryk lub dostawców modeli. Jeśli nie, rozszerz modele, dodaj obsługę działek i używaj ich zamiast oryginalnych klas modeli.
Przykład:
załóżmy, że mamy model i niektórych funkcji używając go:
public class myModel{
private int id;
private String name;
public void setId(int id){
this.id = id;
}
//more getters and setters
}
public interface myModelCreator<T>{
public myModel create(T toModel);
public T uncreate(myModel fromModel);
}
public static void doSomething(myModel model){
//some library operations
}
Teraz w Android projektu:
public class myAndroidModel extends myModel implements Parcelable{
/*Implements the parcelable methods using the class accessors, or you can change the myModel members to protected.*/
}
public class myAndroidModelCreator implements myModelCreator<myAndroidModel>{
@Override
public myModel create(myAndroidModel toModel){
//create the myModel using the parcelable class.
}
@Override
public myAndroidModel uncreate(myModel fromModel){
//reverse operation.
}
}
Teraz w Android projektu, możesz korzystać z podklasy rozwijanej wszędzie, a za każdym razem, gdy potrzebujesz wywołać bibliotekę, możesz dostarczyć interfejs twórcy, używając parcelables jako argumentów. Inną alternatywą byłoby zmienia podpisy metoda biblioteki do czegoś takiego:
public static void<T extends myModel> doSomething(T model){
//some library operations
}
Więc można bezpośrednio zużywają parcelable podklasy. Ale w zależności od hierarchii może to nie być możliwe. Na koniec możesz spróbować zaimplementować wtrysk zależności w projekcie Java za pomocą Guice i Roboguice w projekcie Android. Ponieważ roboguice używa guice, możliwe jest, że mogą współpracować, ale to jest długie ujęcie.
Niejasne na pytanie ... dlaczego trzeba zmienić nazwy pakietów w ogóle? To jest zewnętrzna zależność, więc dlaczego nie możesz jej po prostu zaimportować i użyć? –
Ponieważ zrobiłem to w ten sposób, ale początkowo nie działałem – Chisko
Co masz na myśli, że to nie zadziałało? Co się stało, kiedy próbowałeś? Christopher zasugerował, że jest to właściwy sposób postępowania, a jeśli masz z tym jakiś problem, to jest to problem, który powinieneś rozwiązać (rozwiązując problem w jego rdzeniu), zamiast tworzyć kilka mostków i opakowań. –