gpt4 book ai didi

java - 我如何从 Java 反射调用 Scala 对象上的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:23 24 4
gpt4 key购买 nike

我有一个如下定义的 scala 对象:

package com.example

object Foo {
def bar(): String = "Interesting Result"
}

我知道如果 Foo 在构建和运行时类路径中,我可以从 Java 调用 Foo$.MODULE$.bar(),但在我的情况下 Foo 不在构建类路径中,可能会也可能不会在运行时类路径中配置。

在我的 Java 代码中,如果运行时类路径中可用,我想使用反射来调用 bar(),否则我将回退到默认实现。

这有可能吗?

最佳答案

你可以用看起来像这样的代码来做到这一点:

package com.example.java;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Example {

/**
* Returns null or the result of calling a method on a scala object from java
*/
public String callScalaFromJava(){
String result = null;

try {
Class<?> clazz = Class.forName("com.example.Foo$"); // Note the trailing '$'
Method method = clazz.getDeclaredMethod("bar");
Field field = clazz.getField("MODULE$");
Object instance = field.get(null);
Object obj = method.invoke(instance, new Object[] {});

if (obj instanceof String) {
result = (String) obj);
}

} catch (Exception ex) {
// SWALLOWING
}
return result;
}
}

关于java - 我如何从 Java 反射调用 Scala 对象上的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6529362/

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