2017-04-01 61 views
0

我不知道什么是正确的方式来问这个,但我有两个班,我回去从API既具有name作为共同的东西,但也有另外一个领域是相互独立的。在我的User类可以获得name的地方“结合”它们的最好方法是什么,但也可以获得它们自己的变量。在Java中结合两个类?

我的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

你为什么不使用POJO生成每一类不同的只是生成的POJO? – Eenvincible

+0

使用方法前缀是一个不好的迹象...你可以用'getName'和'getVariable'方法创建一个抽象类 –

回答

1

在其中使用带有name()方法的接口。

一般来说,如果你有一些共同的属性,它最好有一个超级类而不是接口,但如果完成超级类的槽,那么你唯一的选择就是接口。

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