gpt4 book ai didi

java - 在Java中创建类似的类时如何避免复制粘贴

转载 作者:行者123 更新时间:2023-12-01 11:37:07 24 4
gpt4 key购买 nike

我创建了一个自定义 MyAspectButton 来保留方面:

public class MyAspectButton extends Button
{
private float m_aspect = -1.f;

// ...
// ... Constructors, setters/getters ...
// ...

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
if (aspect >= 0.f)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int measuredWidth = getMeasuredWidth();
widthMeasureSpec = MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.round(measuredWidth * aspect), MeasureSpec.EXACTLY);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

现在我想要 MyAspectLinearLayoutMyAspectRelativeLayout 等。他们的 onMeasure 方法是相同的。

如何用尽可能少的复制粘贴来实现一堆这样的类?

我知道 Java 中泛型类的概念,但在这里我必须从编译器不允许我这样做的模板参数继承:

public class MyAspectWidget<T> extends T
{
// ...
}

无法编译。

最佳答案

如果我理解正确,您想要从一堆不同的基类继承,但对所有这些基类应用相同的行为:

MyAspectButton extends Button
MyAspectLinearLayout extends LinearLayout
MyAspectRelativeLayout extends RelativeLayout

您正在寻找的是多重继承,Java 不支持多重继承。您唯一的选择是使用一个类来执行测量逻辑,每个子类的 onMeasure 方法都会调用该逻辑:

public class MyAspectButton extends Button
{
private float m_aspect = -1.f;

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(MyMeasuringClass.MeasureWidth(this, widthMeasureSpec), MyMeasuringClass.MeasureHeight(this, heightMeasureSpec));
}
}

关于java - 在Java中创建类似的类时如何避免复制粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com