我不知道提出这个问题的正确方法是什么,但是我有两个类,我从API返回,它们都有name
作为共同点但是还有另一个相互独立的字段。在我的User类可以获得name
但是也可以获得自己的变量的地方“组合”它们的最佳方法是什么。
我的User
课程怎么样?我正在寻找User
班级让name
参与进来,异形班有alienVariable
而人类班有humanVariable
我的两个班级的例子
外来
@AutoValue
public abstract class Alien implements Parcelable {
public static Alien create(String alienVariable) {
return new AutoValue_Alien(alienVariable);
}
public static Alien create(String name, String alienVariable) {
return new AutoValue_Alien(name, alienVariable);
}
public static TypeAdapter<Alien> typeAdapter(Gson gson) {
return new AutoValue_Alien.GsonTypeAdapter(gson);
}
@SerializedName("name")
public abstract String name();
@Nullable
@SerializedName("alien_variable")
public abstract String alienVariable();
}
人
@AutoValue
public abstract class Human implements Parcelable {
public static Human create(String humanVariable) {
return new AutoValue_Human(humanVariable);
}
public static Human create(String name, String humanVariable) {
return new AutoValue_Human(name, humanVariable);
}
public static TypeAdapter<Human> typeAdapter(Gson gson) {
return new AutoValue_Human.GsonTypeAdapter(gson);
}
@SerializedName("name")
public abstract String name();
@Nullable
@SerializedName("human_variable")
public abstract String humanVariable();
}
用户?
答案 0 :(得分:1)
使用带有name()方法的接口。
一般来说,如果你有一些共同的属性,最好有一个超类而不是接口,但如果满足超类槽,那么你唯一的选择是接口。
答案 1 :(得分:1)
您可以执行以下操作。顺便说一句,我还没有尝试编译它,它只是一个想法的支架
public interface Species implements Parcelable {
@SerializedName("name")
String name();
@Nullable
String typeVariable();
}
public class Alien implements Species {
@Override
public String name() {}
@Override
@SerializedName("alien_variable")
public String alienVariable() {}
// fill in rest of class
}
public class Human implements Species {
@Override
public String name(){}
@Override
@SerializedName("human_variable")
public String humanVariable() {}
// fill in rest of class
}
答案 2 :(得分:0)
我所寻找的是瓦希德所建议的。我不想要继承而是多态。 (应该指定)
刚刚制作了一个看起来像这样的接口类。
public interface Species {
String name();
}
然后在每个类中覆盖它,例如the Human
类
@AutoValue
public abstract class Human implements Parcelable, Species {
public static Human create(String humanVariable) {
return new AutoValue_Human(humanVariable);
}
public static Human create(String name, String humanVariable) {
return new AutoValue_Human(name, humanVariable);
}
public static TypeAdapter<Human> typeAdapter(Gson gson) {
return new AutoValue_Human.GsonTypeAdapter(gson);
}
@SerializedName("name")
public abstract String name();
@Nullable
@SerializedName("human_variable")
public abstract String humanVariable();
@Override
public String name() {
return name();
}
}