如何表示Python';有Java语言的吗?
我正在从事一个Java项目,我想用Java解析一些Python代码 Python代码包含Python中键入模块中的一些类型。基于某些类型,我需要运行特定的方法,因此如何表示Java中不存在的Python类型。这种类型的一个例子是如何表示Python';有Java语言的吗?,java,python,parsing,intellij-plugin,Java,Python,Parsing,Intellij Plugin,我正在从事一个Java项目,我想用Java解析一些Python代码 Python代码包含Python中键入模块中的一些类型。基于某些类型,我需要运行特定的方法,因此如何表示Java中不存在的Python类型。这种类型的一个例子是键入.Any 任何是否等同于使用Java泛型?我只需要浏览特定python类型的源代码,然后用Java重新实现它,还是有其他方法可以做到这一点 根据我对类型的理解,Python中的任何类都会禁用任何类型检查,我不知道如何在Java中实现这一点。目前我正在使用Java对象,
键入.Any
任何是否等同于使用Java泛型?我只需要浏览特定python类型的源代码,然后用Java重新实现它,还是有其他方法可以做到这一点
根据我对类型的理解,Python中的任何
类都会禁用任何类型检查,我不知道如何在Java中实现这一点。目前我正在使用Java对象,但我知道该对象不是任何对象的正确表示形式
非常感谢您的帮助
禁用任何类型检查,我不知道如何在Java中执行
在java语言中,您不能这样做。Java不允许您选择退出类型安全性
用于键入。是否等效于使用Java泛型
没有
还有别的办法吗
对象
涵盖了此处所需的所有内容
Object o = (whatever python gave you);
当然,因为java是强类型的,所以不能只调用o
上的方法,然后让编译器运行:好吧,嗯,好吧,我想如果我们运气好,并且该方法恰好在运行时存在,我会调用它,如果没有,嗯。。我想我会抛出一个例外
java不是这样工作的。要让java像那样工作,您无能为力。java允许您使用o
引用所做的一切都是保证可以在任何和所有对象上工作的事情(这并不多)
您可以使用的是反射,但请注意,方法名称是不够的,除非只有一个方法具有该名称(在java中,可以有具有相同名称的不同方法,只要它们的参数类型不同)。这非常笨拙,但也有可能:
Object o = (get from python);
String methodName = "sayHello";
Method m = findMethodWithName(o, methodName);
Object[] args = new Object[] {"Joe"};
m.invoke(o, args);
与:
这当然是慢狗。如果你喜欢这类东西,java不是你想要的。可能是groovy。似乎让类型be
Object
是等效的,你能想到为什么它不等效吗?假设你不介意对原语进行装箱,Object
是java中所有类型的超类。java中不存在Python类型。它们是Python类型。Java没有它们。Java可能有模糊相似的类型,但它们都有不同的语义和支持的操作。@juanpa.arrivillaga你的意思是你不应该尝试音译吗?你是在寻找与类型最模糊相似的标准Java类型。Any
,还是你真的想表示类型。Any
?您能否详细说明“基于某些类型,我需要运行特定的方法”?您在这里实际需要什么属性?
Method findMethodWithName(Object o, String name) {
Method candidate = null;
for (Method m : o.getClass().getMethods()) {
if (!m.getName().equals(name)) continue;
if (candidate != null) {
throw new NoSuchMethodException("more than one " + name + " in " + o.getClass());
}
candidate = m;
}
if (candidate == null) throw new NoSuchMethodException("no public " + name + " in " + o.getClass());
return candidate;
}