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
*/
posted @   秋渡晚枫  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示