我正在寻找一些帮助来优化我的代码并使用更少的行数编写它。我有一个Class say A,它有几个定义的方法,如下所示:
Class A{
public void doSomethingA(){
}
public void doSomethingB(){
}
public void doSomethingC(){
}
public void verifySomethingXYZ(){
}
public void verifySomethingLMN(){
}
}
现在我有一个单独的类,比如B和方法,编写如下
Class B{
public void test(){
}
public void verifyMyMethods(){
A objA = new A();
objA.doSomethingA();
test();
objA.doSomethingB();
test();
objA.doSomethingC();
test();
}
}
所有这些代码都运行良好。我只是想看看是否有更好的方法可以继续调用像objA这样的方法。verifyMyMethods()中的doSomethingA(),因此我可以使用更少的代码行来完成相同的工作。
我想在循环中调用方法doSomethingA()、doSomethingB()、doSomethingC()等。但不确定如何做到这一点。一种方法是使用Java。lang.Class。getMethod()。但这将返回一个类中定义的所有方法。
我确实检查了这个[https://stackoverflow.com/questions/12566107/how-to-call-multiple-methods-using-loop-in-java]exisitng帖子,但我的问题是我只是不想调用A类中定义的所有方法。只有其中的一些。由于我将在B类中调用一些来自A类的10-20个方法,我想以稍微好一点的方式来做这件事。
我在Python中看到了另一种解决方案[https://stackoverflow.com/questions/55458933/how-to-call-multiple-methods-of-a-class-in-a-loop]
name = YourClass()
methods = [name.alex, name.john, name.claire ] # ...
for m in methods:
m()
但在Java中如何做到这一点?这是我试过的。但它给出了空指针异常。
public void try(){
List<String> l = Lists.newArrayList("objA.doSomethingA","objA.doSomethingB","objA.doSomethingC");
for (String i : l){
try{
Method mett =objA.getClass().getMethod(i); // null pointer exception thrown for this line
mett.invoke(i);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e){
}
}
只是另一种解决方案:
public class A {
public void doSomethingA(){
System.out.println("Calling doSomethingA");
}
public void doSomethingB(){
System.out.println("Calling doSomethingB");
}
public void doSomethingC(){
System.out.println("Calling doSomethingC");
}
public void verifySomethingXYZ(){
System.out.println("Calling verifySomethingXYZ");
}
public void verifySomethingLMN(){
System.out.println("Calling verifySomethingLMN");
}
}
public class Main {
public static void main(String[] args) {
List<String> methodsToCall = new ArrayList<>(Arrays.asList("doSomethingA", "doSomethingB", "doSomethingC"));
callDesiredMethods(methodsToCall);
}
public static void callDesiredMethods(List<String> methodsToCall) {
Class clazz = A.class;
Method[] methods = clazz.getMethods();
for (Method method : methods) {
if (methodsToCall.contains(method.getName())) {
try {
method.invoke(clazz.newInstance());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
}
}
必须将方法调用封装在函数中才能实现这一点。消费者是一个很好的候选人。
表示接受单个输入参数但不返回结果的操作
实现可能如下所示:
class MethodInvocation implements Consumer<A> {
@Override
public void accept(A a) {
a.doSomethingA();
}
}
这对于每个方法调用来说都太长了,因为消费者是一个功能接口,所以我们只能使用lambda或方法引用。
public class Temp {
public static void main(String[] args) throws Exception {
A objA = new A();
List<Consumer<A>> consumers = Arrays.asList(a -> a.doSomethingA(), A::doSomethingB, A::doSomethingC);
for (Consumer<A> consumer : consumers) {
consumer.accept(objA);
}
}
}
我有一个类(称为name),它有如下不同的方法: alex(), john(), claire(), charles(), luke(), richard(), jen()等等 我需要逐一调用所有这些方法,例如: ... 等等 我尝试的是创建一个名称列表,并调用循环中的所有方法 但这种调用方法的方式正在失败。有没有办法在循环中调用同一类的多个方法?
假设我有一些这样的方法: 但我不想调用序列方法: 这很无聊。如果我添加一个新方法:,我需要添加手动:
我有一个对象,里面有多个嵌套对象。类: 其基础是,一个可以有多个以及它们自己的。我想为每个填充,如下所示: 这是起作用的,但我想用一个递归的方法来做这件事。这可能吗? 根据@johnathan Barclay的建议编辑我使用以下方法: 这有助于获取每个第一个的。现在发生的情况是以下子元素没有填充。
问题内容: 我想知道是否有这样一种方法来遍历java中每个循环的扩展扩展的多个集合。 所以像这样: 谢谢 问题答案: 您可以使用Guava的:
我编写了如下代码,但它没有正确返回第一个重复出现的字母。 示例:在单词“statistics”中,重复出现的字母是s、t和i,但字母t的递归速度比字母s和i快,但我的程序返回s而不是t。 根据手头的任务,使用两个for循环返回t需要做什么?
问题内容: 我在搜索“如何在for循环中提供多个条件?” 但是没有给出直接答案。 经过一番研究,我找到了正确的方法。条件不得以逗号(,)或分号(;)分隔。我们可以使用&&运算符将两个条件结合在一起。 for(初始化; condition1 && condition2;增量) 例: 希望这对新的Java开发人员有所帮助。 问题答案: 您还可以使用“或”运算符,