1.24
元组 tuple
java代码中使用scala元组(TupleN)实例时尽量通过方法调用(._1()
)访问元素,避免字段访问元素(._1
),因为在元组类型参数全是基本类型(实质是Tuple2类声明时定义的特例化@specialized类型)时,通过字段访问到的值是null,通过方法能正确获取值。另外,scala声明的类型参数为AnyVal(非java class/interface类型,几乎对应java基本数据类型)的泛型在java代码看来其类型参数是Object(比如scala中参为Int的泛型在java看来不是java.lang.Integer,而是Object)。
/* scala
class STest {
def int_long(): (Int, Long) = (1, 2L)
def int_string: (Int, String) = (1, "abc")
}
*/
public class AppMain {
public static void main(String[] args) throws Exception {
// Tuple2<Object,Object> intLong = int_long();
// can NOT: Tuple<Integer,Long> intLong = int_long();
Tuple2<?, ?> intLong = new STest().int_long();
System.out.println("intLong._1 = " + intLong._1);
System.out.println("intLong._1() = " + intLong._1());
System.out.println("intLong._2 = " + intLong._2);
System.out.println("intLong._2() = " + intLong._2());
System.out.println();
// Tuple2<Object, String> intStr;
Tuple2<?, ?> intStr = new STest().int_string();
System.out.println("intStr._1 = " + intStr._1);
System.out.println("intStr._1() = " + intStr._1());
System.out.println("intStr._2 = " + intStr._2);
System.out.println("intStr._2() = " + intStr._2());
}
}
/* output
intLong._1 = null
intLong._1() = 1
intLong._2 = null
intLong._2() = 2
intStr._1 = 1
intStr._1() = 1
intStr._2 = abc
intStr._2() = abc
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统