Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何表示Python';有Java语言的吗?_Java_Python_Parsing_Intellij Plugin - Fatal编程技术网

如何表示Python';有Java语言的吗?

如何表示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对象,

我正在从事一个Java项目,我想用Java解析一些Python代码

Python代码包含Python中键入模块中的一些类型。基于某些类型,我需要运行特定的方法,因此如何表示Java中不存在的Python类型。这种类型的一个例子是
键入.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;
}