我已经遇到了一些代码,我不能在这里分享,但它声明的方法WITHIN另一种方法的放慢参数列表.我甚至都不知道这是可能的.我真的不明白为什么这样做.有人可以向我解释一下你作为程序员可能会做的一些可能的用途吗?(注意:因为我无法显示代码,所以我不希望在上下文中解释一般)
我有一个类包含10个方法,除了一个键事件之外,它们几乎完成相同的操作.下面给出两个例子:
Public String ATypeOperation(String pin, String amount){ doSomething(); doMoreStuff(); requestBuilder.buildATypeRequest(pin, amount); doAfterStuff(); }Public String BTypeOperation(String name, String sex, String age){ doSomething(); doMoreStuff(); requestBuilder.buildBTypeRequest(name, sex, age); doAfterStuff(); }
从上面的方法可以看出,它们与调用requestBuilder提供的不同方法类似.其余的8也是类似的.这里有很多重复的代码.我觉得有更好的方法来实现这一点,但不知道如何实现.任何想法和建议表示赞赏.
谢谢,莎拉
我试图找到一种方法,我可以采用二叉树类并遍历其节点,在每个节点上
执行X数量的内联操作,而不必一遍又一遍地重写相同的遍历代码。
我想如果Java允许函数指针,这对我来说会更容易弄清楚......
基本上,我需要的是以下内容:
public class BinaryTreeNode {
//...
public void inOrderTraversalFrom(BinaryTreeNode node, /* ??? */ actions) {
if(node.left != null)
inOrderTraversalFrom(node.left);
/* do something with "actions" here */
if(node.right != null)
inOrderTraversalFrom(node.right);
}
}
Run Code Online (Sandbox Code Playgroud)
...其中动作可以允许执行不同的方法,根据要在每个节点上执行的动作类型采用不同的参数集。
一个很好的例子是可以传递一个用于绘制这些节点的类,接受一个 Graphics 对象作为它的参数之一,而不是一个用于执行一些其他不需要 Graphics 的系列操作的类对象作为参数,而是一组完全不同的参数。
这怎么可能?执行此操作的最动态方式是什么?
可能重复:
Java中函数指针的最接近的替代是什么?
我正在写一个工厂类来创建一堆不同的小部件.为了论证,假设这个工厂可以创建1000个小部件.
myWidget createWidget (widgetId)
{
case 0: createwidget0 ();
.
.
case 1000: createwidget1000 ();
}
Run Code Online (Sandbox Code Playgroud)
我不想写1000个案例陈述.我想将所有创建例程放在一个数组中.使用widgetId作为索引直接执行create例程,因此不必通过比较1000条件.因此整个createWidget例程可以像这样简化
myWidget createWidget (widgetId)
{
myAwsomeFuncArr createFunc;
myWidget widget = createFunc[widgetId] ();
}
Run Code Online (Sandbox Code Playgroud)
是用Java做的吗?
以下类包含一个应使用回调技术计算积分的方法.
package integrals;
import java.lang.*;
public class Integrals
{
public static double f1(double x)
{
return x*5+Math.sin(x);
}
public static double f2(double x)
{
return Math.pow(x*f1(-x),x);
}
public static double TrapezoidalIntegration(double a,double b,int n,double (*f)(double))
{
double rValue=0;
double dx;
dx=(b-a)/n;
for(double i=f(a);i<f(b);i+=dx)
rValue+=((f(i)+f(i+dx))*dx)/2.0;
return rValue;
}
public static void main(String[] args)
{
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下如何进行回调?由于它的复杂性和丑陋性,我宁愿避免使用这种解决方案.即使它是最不痛苦的,我也不知道如何在这里实现它.
我正在用java编写一个在wicket中的Login页面,并希望尽可能地将其编写为通用,因此我需要将一个在C++中作为函数指针着名的函数传递给类.这堂课是:
class LoginForm extends Form
{
public LoginForm(String id,TextField username,TextField password,WebResponse webResponse)
{
super(id);
}
@Override
public void onSubmit()
{
String password = Login.this.getPassword();
String userId = Login.this.getUserId();
String role = authenticate(userId, password);
if (role != null)
{
if (Login.this.getSave())
{
utilities.CreateCookie("Username", userId, false, 1209600, (WebResponse) getRequestCycle().getResponse());
utilities.CreateCookie("Password", password, false, 1209600, (WebResponse) getRequestCycle().getResponse());
}
User loggedInUser = new User(userId, role);
WiaSession session = (WiaSession) getSession();
session.setUser(loggedInUser);
if (!continueToOriginalDestination())
{
setResponsePage(UserHome.class);
}
}
else
{
wrongUserPass.setVisible(true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
身份验证是该功能我该怎么办?
在你标记为dup之前,是的,我已经在Java中看到了函数指针,不,它没有真正回答我的问题,主要是因为我对Java很新,所以我真的不明白所有的答案.
这是一些混乱的Java/C++,有没有合理的方法在Java中做到这一点?
public class Foo {
private int _data;
/* various other functions */
public boolean test1( Foo other ) { /* do test */ }
public boolean test2( Foo other ) { /* do test */ }
public boolean test3( Foo other ) { /* do test */ }
public boolean test4( Foo other ) { /* do test */ }
}
public class Bar {
private Foo[] _foos = { /* Init an array …Run Code Online (Sandbox Code Playgroud) 好吧,假设你有一个简单的程序,它采用字母az,如果你输入"c"它会做一些事情,例如"e"可能会添加2个随机数,"h"显示单词"hello","x"显示时间等
现在,我试图通过26种不同的方法来解决这个问题,每个字母一个,然后是一个主体代码,扫描用户输入然后调用适当的方法.
现在他们显然有100种方法可以解决这个问题,但我正在考虑的主要问题是你可以有26个if或者一个switch语句(例如,if(userInput.equals("a"))然后调用方法a等).或者我正在考虑的另一种方法是使用标记为az的方法,然后让用户输入"f"而不是检查它是哪个字母而不是信任用户并完全调用他们输入的字母.
例如:
- >用户输入Y.
userInput = y;
userInput(); - (这实际上是调用y(),这是一个方法名称).
我相信有一种方法可以使用"反思"来阅读这里,但我听说要避免过早优化,但在这种情况下,这不是最合乎逻辑的事情吗?
我写了一些c#代码,它实现了几个函数的传递.我使用了代表.
public delegate float Func(float x);
public Dictionary<string, Func> Functions = new Dictionary<string, Func>();
Run Code Online (Sandbox Code Playgroud)
填写字典:
Functions.Add("y=x", delegate(float x) { return x; });
Functions.Add("y=x^2", delegate(float x) { return x*x; });
Functions.Add("y=x^3", delegate(float x) { return x*x*x; });
Functions.Add("y=sin(x)", delegate(float x) { return (float)Math.Sin((double)x); });
Functions.Add("y=cos(x)", delegate(float x) { return (float)Math.Cos((double)x); });
Run Code Online (Sandbox Code Playgroud)
我使用这些函数来查找它们的最大值和其他一些任务.
private float maxY(params Func[] F)
{
float maxYi = 0;
float maxY = 0;
foreach (Func f in F)
{
for (float i = leftx; i < rightx; i …Run Code Online (Sandbox Code Playgroud) 我有一组将用作键的字符串,对于特定的字符串,我希望调用一个函数。那么是否可以为该对中的值分配一个函数?
exampleMap.get("SOME_STRING"); // should call a function abc();
Run Code Online (Sandbox Code Playgroud) 在 Java 中,我想定义一个规范化函数,该函数将一个数字作为输入,但其行为由多个参数定义。
本质上,在 Lisp 中的 Java 等价物是:
(define (normalizeVal min max floor ceiling)
(lambda (x) (/ (* (- ceiling floor) (- x min)) (+ (- max min) floor))))
Run Code Online (Sandbox Code Playgroud)
在伪代码中,我想:
function parsing(data, normalizeValFunc) {
for (datum in data):
normalizeValFunc(datum);
}
var input = userData;
var min, max, floor, ceiling = /* Calculate min, max, floor, and ceiling */
var output = parsing(input, normalizeValFunc(min, max, floor, ceiling));
Run Code Online (Sandbox Code Playgroud)
在 Java 中将函数作为参数传递可能很棘手,因为函数在 Java 中不是一等对象。(也许 Java 8 Lambda 表达式会改变这一点?)其他问题解决了在 Java …
可能重复:
Java中函数指针的最接近的替代是什么?
我只是有一种情况,如果你可以在c或c ++中使用类似于函数指针的功能,那就太好了.我能想到的最好的事情是组合Runnables并在不同的线程中启动它们.建议?