我有一个大约十行代码的方法.我想创建更多完全相同的方法,除了一个会改变一行代码的小计算.这是传递函数指针以替换该行的完美应用程序,但Java没有函数指针.什么是我最好的选择?
可能重复:
Java Pass方法作为参数
是否可以在Java中将方法作为参数传递?如果我不能重复代码,那么下面的方法将是最好的行动方案.
public void enterUserInput(javax.swing.JTextField inputField, javax.swing.JTextField outputField, method rangeChecking){
String input;
double output;
input = inputField.getText();
output = Double.parseDouble(input);
if(rangeChecking(output)){
outputField.setText(input);
inputField.setText(null);
}
Run Code Online (Sandbox Code Playgroud)
我将从不同的类调用rangeChecking方法,每次调用enterUserInput时,rangeChecking方法都会有所不同
我试图将类A的选定"get"方法传递给B类中的方法.我已经将Java Pass Method作为参数检出,但是我无法以合理的方式采用接口方法解决我的问题.我宁愿不使用java 8(lambdas),如果可能的话也要避免反射.我的感觉是,我以错误的方式看待我的问题.以下是我要完成的具体简化示例:
我有一个包含一些字段和get方法的类:
public class DataStore {
private float a;
private float b;
private float c;
public float getA() {
return a;
}
public float getB() {
return b;
}
public float getC() {
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我让我的主类实例DataStore化为Map的值,然后访问DataStore的特定字段,如:
public class App {
public static void main(String[] args) {
// declare TreeMap using DataStore class as value
Map<Integer, DataStore> dataMap = new TreeMap<Integer, DataStore>();
// populate Map with example data
dataMap.put(2, new …Run Code Online (Sandbox Code Playgroud) 下面讨论如何使用lambdas将方法作为参数传递:
Java Pass Method as Parameter
在其他语言中,即C++,可以使用Lambdas将函数绑定到它的参数 - 这里讨论:
Bind Vs Lambda?
在Java中,是否可以使用lambdas绑定方法?
如果是这样,你会如何做到这一点?
编辑>>>>
根据要求,我通常尝试做的一个例子:
请注意,这里有伪代码.
public class DataView {
private static ArrayList<Float> rectData = new ArrayList<Float>();
private static ArrayList<Float> textData = new ArrayList<Float>();
DataView(){
//Pseudo Code:
boundFunction mybind = boundFunction(functionA, 5, 10);
boundFunction mybind2 = boundFunction(functionB, 10, 12);
iter(mybind);
iter(mybind2);
}
//Method with pseudo parameter
private void iter(functionSignature){
for(Float i : textData){
//Pseudo call to pseudo parameter
functionSignature();
}
}
private void functionA(int a, int b){ …Run Code Online (Sandbox Code Playgroud) 在阅读了@RomainGuy 的避免内存泄漏文章后,我意识到我当前的Android应用程序一直困扰着传递应用程序主要活动的错误.所以每当我,我可以简单地用Activity.getApplicationContext()替换该活动参数.
但是我的应用程序中的某些类仍然需要运行只能是应用程序主要活动成员的方法.
因此我想到可能使用命令模式来解决这个限制.
问题是,如果我们看一下这个例子:
public class SomeCommandExecuableOnlyByActivity implements Command
{
public void execute(Object data)
{
doIt( ((MyActivity)data).getWindow() );
}
}
Run Code Online (Sandbox Code Playgroud)
我再次进入需要传递活动的死胡同(这次伪装成Object数据).
如何摆脱这种"鸡蛋和鸡蛋"的局面?
有没有更好的方法来解决这个问题?
android memory-leaks command-pattern java-memory-model android-activity
想象一个带有布尔标志的Person类,该布尔标志指示该人是否可以使用 - 默认情况下设置为false.
public class Person{
boolean employable = false;
...
}
Run Code Online (Sandbox Code Playgroud)
现在假设有一些外部布尔方法作用于Person对象.例如,考虑实用程序类中的静态布尔方法.
public class PersonUtil{
public static boolean ofWorkingAge(Person p){
if(p.getAge() > 16) return true;
return false;
}
...
}
Run Code Online (Sandbox Code Playgroud)
布尔静态方法本质上类似于布尔值函数,即谓词.
我们可以用谓词构造一个2 ^(#谓词)-by-#谓词真值表.例如,给定三个谓词:ofWorkingAge,ofGoodCharacter,isQualified我们可以构造以下8×3真值表:
T T T
T T F
T F T
T F F
F T T
F T F
F F T
F F F
Run Code Online (Sandbox Code Playgroud)
我们现在想雇用具有理想品质的人.让+表示我们希望考虑某人可就业(即将他们的就业能力标志设为真)和-相反.
T T T | + …Run Code Online (Sandbox Code Playgroud) java design-patterns functional-programming truthtable java-8
这是针对类似问题的规范性问题和答案,其中问题是由阴影引起的.
我在我的类中定义了两个字段,一个是引用类型,另一个是基本类型.在类的构造函数中,我尝试将它们初始化为一些自定义值.
当我稍后查询这些字段的值时,它们返回Java的默认值,null对于引用类型,0表示基元类型.为什么会这样?
这是一个可重复的例子:
public class Sample {
public static void main(String[] args) throws Exception {
StringArray array = new StringArray();
System.out.println(array.getCapacity()); // prints 0
System.out.println(array.getElements()); // prints null
}
}
class StringArray {
private String[] elements;
private int capacity;
public StringArray() {
int capacity = 10;
String[] elements;
elements = new String[capacity];
}
public int getCapacity() {
return capacity;
}
public String[] getElements() {
return elements;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望getCapacity()返回值10并getElements()返回正确初始化的数组实例.
何时使用AsyncTask和何时使用Thread两者都在后台工作,并且都可以UI Thread通过某种机制操纵控件。
java ×8
android ×2
closures ×1
constructor ×1
delegates ×1
field ×1
java-8 ×1
lambda ×1
memory-leaks ×1
methods ×1
parameters ×1
truthtable ×1