从头认识java-13.15 使用泛型时出现的问题(1)-泛型不能使用基础类型

本文探讨了在Java中泛型无法使用基础类型如int,但可以通过自动包装机制将int转换为Integer。然而,当操作大量数据时,这种转换可能引发性能问题。同时,示例代码显示在某些情况下,如使用生成器创建对象时,自动包装机制并不适用,例如在创建int数组时会抛出异常。

这一章节我们来讨论一下使用泛型时出现的问题。

今天我们引入第一个问题:就是泛型不能使用基础类型。

1.例子

package com.ray.ch13;

import java.util.ArrayList;

public class Test {
	public static void main(String[] args) {
		// ArrayList<int> list;//error
		ArrayList<Integer> list = new ArrayList<Integer>();
	}

}


观察上面的代码就可以看见,泛型只能使用Integer,不能够使用int。

但是java里面的自动包装机制提供了实现的可能。

修改一下上面的代码:

package com.ray.ch13;

import java.util.ArrayList;

public class Test {
	public static void main(String[] args) {
		// ArrayList<int> list;//error
		ArrayList<Integer> list = new ArrayList<Integer>();
		for (int i = 0; i < 10; i++) {
			list.add(i);
		}
	}

}


其实i是int类型,但是通过自动包装机制,直接转换成Integer类型。

但是随着数量的增加,上面的代码无疑会出现非常大的性能问题,这个是一个隐患。

 

2.自动包装机制不是万能的。

例子:

我们下面使用生成器来创建并装载对象。

package com.ray.ch13;

public class Test {
	public static void main(String[] args) {
		// FillArray.fill(new int[5], new MyGenerator());//error
		FillArray.fill(new Integer[5], new MyGenerator());
	}

}

interface Generator<T> {
	T next();
}

class MyGenerator implements Generator<Integer> {
	@Override
	public Integer next() {
		return 0;
	}
}

class FillArray<T> {
	public static <T> void fill(T[] arr, Generator<T> generator) {
		for (int i = 0; i < arr.length; i++) {
			arr[i] = generator.next();
		}
	}
}


观察上面的代码,在main方法里面,我们分别创建int和Integer的数组,int 的抛异常,在这里,自动包装机制是不起作用的。

 

总结:这一章节主要讨论了泛型不能使用基础类型这一个问题。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

<think>好的,用户给了一段CNC代码,需要我帮忙分析。首先,我得仔细看看这段代码的结构和内容。看起来用户可能是在处理数控机床的加工程序,特别是关于刀具路径的部分。用户之前的问题是关于G41D的使用,现在这段代码里多次出现了G41D[VC101],这说明用户可能是在实际应用中遇到了问题,或者需要优化这段代码。 首先,我需要确认这段代码的整体结构。看起来像是一个循环加工的程序,可能是在加工对称的工件,因为左右两侧的路径相似,比如X-14和X12这样的坐标。代码里使用了G00快速移动,G01直线插补,G03圆弧插补,还有G41D刀具半径补偿。用户可能想知道这段代码的功能,或者是否存在潜在的问题,比如过切、路径错误,或者效率优化。 接下来,我需要检查G41D的使用是否正确。在之前的回答中提到,不同系统可能用H或D调用补偿寄存器。这里用的是D[VC101],可能VC101是某个寄存器地址,但需要确认系统是否支持这种格式。例如,发那科系统通常用H,而西门子可能用D,但VC101看起来像是变量名,可能是在特定系统中的使用方式,用户可能需要确认其控制系统是否支持这种语法。 然后,观察路径部分。代码中多次重复了类似的路径,比如从X-14 Y-15.1开始,进行一系列的直线和圆弧运动,然后取消补偿,抬刀,再重复到另一侧。这可能是在加工对称的轮廓,比如凹槽或凸台。但需要注意补偿建立和取消的位置是否正确,是否有足够的直线段来建立补偿,否则可能导致刀具路径错误。 另外,注意到Z轴的移动,比如Z-10.15到Z-13.15,这可能是在进行分层下切,但需要确认每次下切的深度是否合理,是否有足够的排屑空间,避免过热或断刀。此外,F230的进给速度是否适合材料和刀具,这也是需要考虑的。 用户可能的深层需求是希望确保这段代码能正确加工出预期形状,避免碰撞或过切。此外,可能希望优化代码结构,减少重复,提高效率。例如,多次重复的路径是否可以通过宏程序或循环指令简化,减少代码行数,降低出错率。 还需要检查圆弧插补的R值是否正确,比如R5.和R4.1,是否与刀具半径匹配,避免因补偿值设置不当导致尺寸错误。同,在G40取消补偿,路径是否安全,避免突然的移动导致碰撞。 另外,用户可能对VC101变量设置的值是否正确有疑问,是否在加工前进行了正确的刀具半径测量和输入,这也是影响加工精度的重要因素。 总结来说,用户的需求可能包括:理解这段代码的具体加工路径,检查是否存在潜在的错误或风险,优化代码结构,以及确保刀具补偿的正确应用。需要针对这些方面进行详细分析,并提供相应的改进建议和相关问题,帮助用户进一步理解和应用。 </think>该CNC程序段呈现以下特征分析: 1. **核心加工逻辑** - 采用镜像对称加工模式(左侧X-14/Y-15与右侧X12/Y-17) - 通过G41D[VC101]调用刀具半径补偿(D代码可能为变量地址) - 执行连续凹槽轮廓加工(含R5与R4.1圆弧插补) 2. **关键工艺参数** ```nc Z轴切深:每次切深3mm(Z-10.15→Z-13.15) 进给速度:F230(默认单位可能是mm/min) 补偿值调用:VC101变量存储刀具半径值 ``` 3. **潜在优化点** - 存在重复路径代码(可封装为子程序) - 缺少安全高度抬刀(Z100.可能过低) -使用G02/G03的IJK模式(R参数可能引发精度问题) 4. **风险预警** - G41D[VC101]需确认系统支持变量地址格式 - 补偿建立段(G01 X-14 Y-10.1)长度应>刀具半径 - 连续深腔加工需增加退刀排屑段 改进示例: ```nc O1000(子程序加工左侧) G41 D#VC101(变量调用) G01 X-14 Y-10.1 F230 G03 X-19 Y-15.1 R5. G01 Y-18.1 G03 X-15 Y-22.1 R4.1 G01 X-12. G03 X-7 Y-17.1 R5. G40 G01 X-12 Y-17.1 M99 ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值