我正在将一个项目从python迁移到java。有一个多继承的python工具类,称为Util(TimeUtil, MathUtil, FileUtil, ...)
,它扩展了几个Util
类。例如
# python
class MathUtil(object):
@staticmethod
def add(n, m):
return n + m
class TimeUtil(object):
@staticmethod
def date_to_str():
return '2022-01-01'
class Util(MathUtil, TimeUtil):
@staticmethod
def do_something():
return
Util.add(1, 2)
通常,我会在python中调用Util.date_to_str()
、Util.add()
、Util.read_file()
,导入类Util
就足够了,并且我可以通过类名调用父类的静态方法。
我希望将util函数分离为不同的util类。您能告诉我如何在java中实现使用子类名(而不是实例)调用多个父级静态方法吗?如果不是这样的话,为什么?
我试过的
显然,我不能在java中多个扩展其他类。
我尝试了接口,我把默认的方法放在父接口中,我必须创建子类的一个实例来调用父类中的方法。因为它是一个Util类,所以不确定,我想使用类名来调用方法,而不是类的实例。
import java.util.Date;
interface MathUtil {
default int add(int n, int m){
return n + m;
}
}
interface TimeUtil{
default String parseDate(Date date) {
return "2022-01-01";
}
}
public class Util implements MathUtil, TimeUtil {
public static void main(String[] args) {
// expect code
// int add = Util.add(1, 2);
// compile error
// Non-static method 'add(int, int)' cannot be referenced from a static context
// actual code, it is compiled
Util util = new Util();
int add = util.add(1, 2);
}
}
如果我将父接口中的默认方法更改为静态方法,则必须调用父接口名为MathUtil.add(1, 2)
的方法,否则将得到编译错误:静态方法可能在只包含的接口类上调用。
发布于 2022-08-18 12:28:52
如果在一个add()
类中定义了一个静态方法MathUtil
,那么使用MathUtil.add(...)
调用它。
如果要调用add()
方法(如Util.add(...)
),请将其放入Util
类中。
在Java中,您必须决定所需的两种样式中的哪种。你不能两者兼得。
https://stackoverflow.com/questions/73402808
复制相似问题