clonedStack.push(((obj.getClass().getName()) obj).clone());
时间: 2024-10-14 15:10:13 浏览: 4
这条代码尝试通过首先获取对象的Class(对象的类型信息)的名称,然后将这个字符串和对象结合并调用`clone()`方法来创建一个深拷贝。但这实际上是错误的,因为这样做不会实现真正的深拷贝。原因有两点:
1. `((obj.getClass().getName()) obj)` 这部分语法是不正确的。Java表达式不能同时对类型名称和对象进行操作。`getClass().getName()`会返回一个表示对象类型的字符串,而`obj`是原始对象,两者之间不能直接连接。
2. 即使你能得到一个字符串表示类型的对象,`clone()`方法期望的是一个实现了`Cloneable`接口的对象,而非字符串。试图让一个字符串实例去调用`clone()`是无效的。
如果你想实现深度复制,你应该遍历`ArrayList`,检查每个元素是否实现了`Cloneable`接口,如果是,则调用`clone()`方法;如果不是,就直接将其添加到新栈中。例如,像这样:
```java
clonedStack.push(obj instanceof Cloneable ? ((Cloneable) obj).clone() : obj);
```
这样,只有当`obj`可被克隆时,才会生成其深拷贝。
相关问题
three.js obj叠加obj
在three.js中,可以通过将一个obj对象添加到另一个obj对象上来实现叠加效果。首先,使用ObjectLoader加载第一个obj对象,并将其添加到场景中。然后,使用ObjectLoader加载第二个obj对象,并将其添加到第一个obj对象上。这样,第二个obj对象就会叠加在第一个obj对象上。
以下是一个示例代码:
```javascript
var loader = new THREE.ObjectLoader();
// 加载第一个obj对象
loader.load('model1.json', function(obj1) {
obj1.scale.set(100, 100, 100);
scene.add(obj1);
// 加载第二个obj对象
loader.load('model2.json', function(obj2) {
obj2.position.set(0, 0, 0); // 设置第二个obj对象的位置
obj1.add(obj2); // 将第二个obj对象添加到第一个obj对象上
});
});
```
在这个示例中,首先加载了一个名为model1.json的obj对象,并将其添加到场景中。然后,加载了一个名为model2.json的obj对象,并将其添加到model1.json对象上。这样,model2.json对象就会叠加在model1.json对象上。
请注意,加载的obj对象需要具有相应的几何体和材质信息,以便正确显示和叠加。
#### 引用[.reference_title]
- *1* *2* *3* [three.js](https://blog.csdn.net/weixin_48622918/article/details/119417233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
three.js obj mtl
three.js obj mtl 是一个用于在three.js中加载和渲染3D模型的库。它使用OBJ和MTL文件格式作为模型的输入,让用户可以在网页上展示和交互式地操作3D模型。
在使用three.js obj mtl时,你可能会遇到某些问题,例如修改库中的代码来解决bug或者处理版本更新的问题。如果你想解决某个bug,你可以修改node_module > three-obj-mtl-loader > index.js文件的代码,定位到第543行进行修改。如果你正在使用webstorm,你可以使用CTRL G来定位到这一行。
另外,如果你遇到版本更新的问题,你可以暂时将three-obj-mtl-loader.js文件本地化,以便满足自动化部署的需求。