gpt4 book ai didi

java - Java中继承的静态方法中获取类名

转载 作者:行者123 更新时间:2023-11-30 05:59:55 25 4
gpt4 key购买 nike

假设我想用 Java 解决一堆 Project Euler 问题,而不是为每个问题类提供其自己的 main 方法的样板,而是继承它并拥有一个“解决”方法。

有没有办法让问题类的名称与解决方案一起打印出来?

我有什么:

abstract class Problem {

private static String problemName = ???

public static void main(String[] args) {
// If I could summon an instance of the sub-class then it would be easy
// Problem p = new ... what?
System.out.println(problemName + ": " + solve());
}

abstract static long solve();
// oops, you can't do abstract static in Java :(
}

然后

public class Euler_001 extends Problem {
static long solve() {...}
}

问题在于获取 this answer 中给出的类名的各种技巧。返回“Problem”,而不是“Euler_001”。

我想我必须实例化问题类,但是我该怎么做呢?

最佳答案

静态上下文无助于父级需要调用子级的继承。使用具有抽象的实例:

abstract class Problem {

public static void main(String[] args) throws Exception {

Problem problem;

//Now, depending on where the exact problem is specified:

//Class known at compile time
problem = new Euler_001();

//Class passed as parameter
problem = (Problem) Class.forName(args[0]).getConstructor().newInstance();

System.out.println(problem.getProblemName() + ": " + problem.solve());
}

abstract long solve();
abstract String getProblemName();
}

子类将提供一个重写抽象方法的普通实现:

class Euler_001 extends Problem {
@Override
long solve() {
return 0;
}

@Override
String getProblemName() {
return "????";
}
}

根据您的配置方法,您可以在父级的 main 方法内根据类名创建具体类的实例。

这样,就可以通过以下方式调用 Problem 类:

java com.mypackage.Problem "com.mypackage.Euler_001"

关于java - Java中继承的静态方法中获取类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52442830/

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