调用方法用Java设计

时间:2017-07-06 10:41:27

标签: java generics

我有一个名为spring.mvc.view.suffix=.jsp

的界面
HasDescription

它有getter和setter方法声明。

我有另一个名为public interface HasDescription { String getDescription(); void setDescription(String description); } 的抽象类来实现这个接口。

ResidentialProperty

我有另一个名为public abstract class ResidentialProperty extends AbstractProperty implements HasDescription { ..... private String description; @Override public String getDescription() { return description; } @Override public void setDescription(String description) { this.description = description; } } 的班级。在这个课程中,我已经委派了一个Flat实例。我的想法是,使用这个实例,我想调用descriptionSupport的getter和setter方法。我正在编写这个DescriptionSupport。请帮助我如何做到这一点?

ResidentialProperty

3 个答案:

答案 0 :(得分:1)

不需要DescriptionSupport助手类。 FlatResidentialProperty的子类型 - 它继承了其父级的setter和getter的实现,因此您不需要再次覆盖它们。

如果您仍需要覆盖这两种方法,则可以使用super从父类调用其实现,例如super.setDescription(description)

答案 1 :(得分:1)

如果您真的想使用DescriptionSupport,我建议进行一些修改:

public class Flat extends ResidentialProperty {
    private final DescriptionSupport descriptionSupport = new DescriptionSupport();
    @Override
    public String getDescription() {
        return descriptionSupport.getDescription(super::getDescription);
    }

    @Override
    public void setDescription(String description) {
        descriptionSupport.setDescription(super::setDescription, description);
    }
}

public class DescriptionSupport {
    public String getDescription(Supplier<String> s) {
        return s.get();

    }

    public void setDescription(Consumer<String> c, String description) {
        c.accept(description);
    }
}

答案 2 :(得分:0)

我不确定我明白你要做什么,但你可以这样做:

public class Flat
        extends ResidentialProperty {

    private final DescriptionSupport descriptionSupport = new DescriptionSupport();
    private final HasDescription superDesc = new HasDescription() {
        @Override
        public String getDescription() {
            return getSuperDescription();
        }

        @Override
        public void setDescription(String description) {
            setSuperDescription(description);
        }
    };

    @Override
    public String getDescription() {
        return descriptionSupport.getDescription(superDesc);
    }

    @Override
    public void setDescription(String description) {
        descriptionSupport.setDescription(superDesc, description);
    }

    private String getSuperDescription() {
        return super.getDescription();
    }

    private void setSuperDescription(String description) {
        super.setDescription(description);
    }
}

public class DescriptionSupport {
    public < T extends HasDescription> String getDescription(T property) {
        return property.getDescription();
    }

    public < T extends HasDescription> void setDescription(T property, String description) {
        property.setDescription(description);
    }
}