Java 获取不同类对象的泛型方法

Java 获取不同类对象的泛型方法,java,generics,Java,Generics,我有3个类(TechSpec、packages和features)对象,它们共享相同的字段。字段很大,我希望将类对象传递到一个方法中,该方法使用泛型对象来设置对象字段,而不是重复设置每个字段的字段3次(最终看起来像是重复的) 我尝试将类对象作为泛型传递,但是我无法访问其成员。这就是我试过的 Packages packagesFeatures = new Packages(); TechSpecs techSpecsFeature = new TechSpecs(); packages

我有3个类(TechSpec、packages和features)对象,它们共享相同的字段。字段很大,我希望将类对象传递到一个方法中,该方法使用泛型对象来设置对象字段,而不是重复设置每个字段的字段3次(最终看起来像是重复的)

我尝试将类对象作为泛型传递,但是我无法访问其成员。这就是我试过的

  Packages packagesFeatures = new Packages();
  TechSpecs techSpecsFeature = new TechSpecs();
  packagesFeatures  =  addFeatures(Packages.class, packagesFeatures, vehFeatures);
  techSpecsFeature  = addFeatures(TechSpecs.class, techSpecsFeature, vehFeatures);
然后

所有这些字段都需要在所有3个类的类对象中设置

编辑2

VehicleFeature类是一个独立类

@JsonInclude(JsonInclude.Include.NON_NULL)
public class VehicleFeature {
private String section;
private String subSection;
private String featureName;
private String subSectionId;
private String sectionName;
private String subSectionName;

如果是我,我会将您的
addFeatures(…)
方法简化为:

private <T> T addFeatures(Class<T> clazz, BaseFeatures theseFeatures) {

    T obj = null;
    
    try {
        
        obj = clazz.getDeclaredConstructor(BaseFeatures.class).newInstance(theseFeatures);              
        
    } catch (ReflectiveOperationException roe) {
        
        roe.printStackTrace();
    }
    
    return obj;
}
你可以在这里:


“它们都共享相同的字段”-您是否考虑过创建一个Java
接口
,以使编译器可以使用这些信息?如果您可以找到大字段的名称,那么您可能会遇到一个新类,包和Techspec可以扩展哪些类?在下一步中,您可以考虑优先组合而不是继承3个类中的每个类都扩展了抽象类baseFeatures。例如:公共类TechSpecs扩展了BaseFeatures{·…字段很大…-你说的“大”到底是什么意思?确切地说,这3个类中的每一个都扩展了抽象类BaseFeatures。。。“-想和大家分享一下吗?我添加了一个editP.S。当我做的时候,我继续
可选的addFeatures(…)
而不是潜在地返回
null
。让我来处理这个问题,稍后再回复。感谢车辆功能不属于BaseFeatures类。我得到错误:车辆功能与BaseFeatures不兼容。你有没有发现这个错误?请分享一个你如何称呼它的片段?查看Implementation链接我还有更多的工作要做。我会晚些时候回来的。对不起
public class TechSpecs extends BaseFeatures {

private String techSpecs;


public void setTechSpecs(String techSpecs) {
    this.techSpecs = techSpecs;
}

public String getTechSpecs(){
    return techSpecs;
}

}
@JsonInclude(JsonInclude.Include.NON_NULL)
public class VehicleFeature {
private String section;
private String subSection;
private String featureName;
private String subSectionId;
private String sectionName;
private String subSectionName;
private <T> T addFeatures(Class<T> clazz, BaseFeatures theseFeatures) {

    T obj = null;
    
    try {
        
        obj = clazz.getDeclaredConstructor(BaseFeatures.class).newInstance(theseFeatures);              
        
    } catch (ReflectiveOperationException roe) {
        
        roe.printStackTrace();
    }
    
    return obj;
}
public abstract class BaseFeatures{

    protected String featureId;
    
    protected String featureKey;
    
    protected String featureCode;

    /*...*/
    
    protected BaseFeatures(String featureId, String featureKey, String featureCode){
        this.featureId = featureId;
        this.featureKey = featureKey;
        this.featureCode = featureCode;
    }
    
    protected BaseFeatures(BaseFeatures features){
        this.featureId = features.featureId ;
        this.featureKey = features.featureKey;
        this.featureCode = features.featureCode;
    }

    /*...*/
}
public class BigAssFields {

    /* ... */

    static public void main(String ... args){

        BigAssFields bLike = new BigAssFields();
        
        VehicleFeature vehFeatures = new VehicleFeature("what", "the actual", "Feature");
    
        TechSpecs bigTechSpecs =  bLike.addFeatures(TechSpecs.class, vehFeatures);
    
    }

    /* ... */
}