gpt4 book ai didi

java - Groovy Java 交叉编译 instanceof

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:51:09 25 4
gpt4 key购买 nike

我正在寻找一种方法来从 Java 中检查某个对象是否是某个 Groovy 类的实例。

由于每个 Groovy 类的编译过程,包括 Java 类 stub 生成,这看起来是不可能的。因此,带有 Groovy 类的 instanceof 将返回 false。

在 Watches 窗口我可以测试它。

ModelNode.class = {java.lang.Class@4830}"class ModelNode"
component.getClass() = {java.lang.Class@3073}"class ModelNode"
component instanceof ModelNode = false

显然,有两个不同的类。而Java看到生成了一个。所以,我正在寻找一种根据 Groovy 类检查某些对象的好方法。

我试过反射和 getSuperclass() 方法,看起来有两个完全不同的类,派生自同一个父类(super class)。

component.getClass().getSuperclass() = {java.lang.Class@871}"class javax.swing.tree.DefaultMutableTreeNode"
ModelNode.class.getSuperclass() = {java.lang.Class@871}"class javax.swing.tree.DefaultMutableTreeNode"

此外,由于类似的原因,我不能在 instanceof 之后转换任何东西。所以,我一定是做错了事错误

有没有办法在 Java 中使用 Groovy 对象。没有 Java 代码方法所需的 Java 端接口(interface)。

附言最后一句话是关于这样的解决方案。

在Java中

interface A {
foo();
}

assert(object instanceof B) // false;
((A)object).foo(); // fail
assert(object instanceof A) // true;
((A)object).foo(); // nice

在 Groovy 中

class B extends SMTH implements A { ... }

最佳答案

GroovyObject 实例?

我创建了以下 Java 类:

import groovy.lang.GroovyObject;

public class A {
public static void main(String[] args) {
B b = new B();
if (b instanceof GroovyObject) {
System.out.println("b is a groovyobject");
b.yeah();
} else {
throw new RuntimeException("b is not a groovyobject");
}
}
}

以及以下 Groovy 类:

class B {
def yeah() {
println "hell yeah"
}
}

结果如下:

$ javac -cp ~/groovy/embeddable/groovy-all-2.1.3.jar:. A.java 
$ java -cp ~/groovy/embeddable/groovy-all-2.1.3.jar:. A
b is a groovyobject
hell yeah

关于java - Groovy Java 交叉编译 instanceof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473356/

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