- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个在一个类中创建的数据类,并且可以传递给实现特定接口(interface)的多个 Android UI Activity 之一。
每个 UI 使用相同的数据,但是,并非所有 UI 都需要所有数据。我想知道是否有一个简单解决方案允许每个UI仅使用数据的特定部分(仅使用特定的访问器/ getter )
// ICalculatorAbstraction is what all my UI's implement. It has method... void updateResult(ExpressionState expression)
public final View.OnClickListener listenerOn(final ICalculatorAbstraction UI) {
return listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// Calculations
ExpressionState expression = new ExpressionState.Builder()
.setFirstNumber(num1)
.setSecondNumber(num2)
.setTotal(total)
.setOperator(operator.getSign())
.build();
UI.updateResult(expression);
}
};
}
同样,我的所有 Android Activity (UI) 都实现此接口(interface)
public interface ICalculatorAbstraction {
...
void updateResult(ExpressionState result);
}
@Override
public void updateResult(ExpressionState result) {
String results = String.format( // NOTE: this one needs ALL the accessors / getters!!
"%s %s %s = %s",
result.getFirstNumber(),
result.getOperator(),
result.getSecondNumber(),
result.getTotal()
);
this.txtResult.setText(results);
@Override
public void updateResult(ExpressionState result) {
String results = String.format( // NOTE: this one needs ONE accessor / getter!!
"Wow. Such Calcuation. %s",
result.getTotal()
// NOTE: These should not be allowed in this instance because this UI does not use them
// result.getFirstNumber()
// result.getOperator()
// result.getSecondNumber()
);
this.txtResult.setText(results);
如何更改 updateResult(...)
(在界面和 UI 中),以便特定 UI 的 updateResult(...)
只会让我使用所需的评估器/ setter/getter ?
我尝试创建一个空白接口(interface),然后创建两个实现该空白接口(interface)的抽象类。抽象类只有我需要的访问器/ getter ,但是当我尝试修改上面的代码时,没有任何效果。
这可能吗?
<小时/>这是我希望看到的 - 您可以说“我最好的解决方案”。
@Override
public void updateResult(IAllAccessors result) {
String results = String.format(
"%s %s %s = %s",
result.getFirstNumber(),
result.getOperator(),
result.getSecondNumber(),
result.getTotal()
);
this.txtResult.setText(results);
@Override
public void updateResult(IOneAccessorOnly result) {
String results = String.format(
"Wow. Such Calcuation. %s",
result.getTotal() // I should not be able to do result.getFirstNumber(); for example
);
this.txtResult.setText(results);
public class ExpressionState implements IOneAccessorOnly, IAllAccessors {
private ExpressionState(Builder builder) { ... }
public double getFirstNumber() { ... } // IAllAccessors
public double getSecondNumber() { ... } // IAllAccessors
public String getOperator() { ... } // IAllAccessors
public double getTotal() { ... } // IAllAccessors, IOneAccessorOnly
public static class Builder { ... }
}
这个解决方案的问题是,我不知道如何处理上面的界面!我无法拥有一个能让编译器对两种 UI 都满意的参数。
<小时/>在使用构建器创建 ExpressionState
时在我的 ClickListener
类中
IOneAccessorOnly var = new ExperssionState.Builder()...
这是因为在我的 ClickListener
类中,我不知道要创建哪一个。它必须非常通用。在我的用户界面中,我想简化我可以使用的内容。我无法用这种方法做到这一点
因为它不知道是什么,所以它必须是“一切”
ExpressionState var = new ExpressionState.Builder()...
除此之外确实不可能是其他任何东西。该解决方案必须专门处理 UI( Activity ),以缩小允许的范围!!
最佳答案
如果 Expression state 是您自己的类,我会让它实现两个不同的接口(interface),如下所示。
public class ExpressionState implements InterfaceOne, InterfaceTwo {
public void interfaceOneGetterMethod()
public void interfaceTwoGetterMethod()
}
在另一个文件中:
public interface InterfaceOne {
public void interfaceOneGetterMethod();
最终文件:
public interface InterfaceTwo {
public void interfaceTwoGetterMethod();
现在,当您创建 ExpressionState 对象时,将它们分配给定义为的对象:
InterfaceTwo var = new ExperssionState(blah);
或者修改您的构建器以仅返回接口(interface)(更好)
关于java - 仅限制对必要的数据类访问器/ getter 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094722/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!