您当前的位置:首页 > 互联网教程

java如何深度copy一个object

发布时间:2025-05-23 09:30:20    发布人:远客网络

java如何深度copy一个object

一、java如何深度copy一个object

1、java本身好像没有提供这个方法的吧,只有你自己重新创建一个对象,然后赋值给这个对象。

2、iamge的复制可以用BufferedImage的方法:

3、public WritableRaster copyData(WritableRaster outRaster)计算 BufferedImage的一个任意矩形区域,并将其复制到指定的 WritableRaster。要计算的区域由指定 WritableRaster的边界确定。指定 WritableRaster必须具有与此图像兼容的 SampleModel。如果 outRaster为 null,则创建一个合适的 WritableRaster。

4、不过还有一个简单的办法,就是创建一个一样大小和一样类型的BufferedImage,然后把要复制的图画上去,这两个图片就是一样的了。

二、如何在Java应用程序中实现copy图像功能

在Java应用程序中实现copy图像功能:

用Java开发图形应用程序的朋友一定遇到过如何在程序中实现复制图像的功能。在jdk1.4以前,java本身就支持将程序中文字串复制给其它的非java应用程序使用,而将程序中的图像复制到非java应用程序简直难上加难。只到jdk1.4出来,这个问题才得以解决。要做复制功能,一般是继承TransferHandler类,实现Transferable接口,这样你的复制内容才能传到系统clipboard,为此我们来写一个ImageSelection类:/*** Copyright: Copyright(c) 2002*@author Turbo Chen*@version 1.00*/ import java.awt.*; import java.awt.image.*; import java.awt.datatransfer.*; import javax.swing.*; public class ImageSelection extends TransferHandler implements Transferable{ private static final DataFlavor flavors[]={DataFlavor.imageFlavor}; private Image image; public int getSourceActions(JComponent c){ return TransferHandler.COPY;} public boolean canImport(JComponent comp, DataFlavor flavor[]){ for(int i=0, n=flavor.length; i if(flavor[i].equals(flavors[0])){ return true;}} return false;}//将图像复制到Image对象. public Transferable createTransferable(JComponent comp){// Clear clip image= null; Icon icon= null; Rectangle rect= comp.getBounds(); BufferedImage bufImage= new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_RGB); Graphics g= bufImage.getGraphics(); comp.paint(g); if(bufImage!= null){ image= bufImage; return this;} return null;}// Transferable public Object getTransferData(DataFlavor flavor){ if(isDataFlavorSupported(flavor)){ return image;} return null;} public DataFlavor[] getTransferDataFlavors(){ return flavors;} public boolean isDataFlavorSupported(DataFlavor flavor){ return flavor.equals(flavors[0]);}}利用这个类,就可以轻松的将JComponent图像复制到系统clipboard了.怎么使用呢,再来看看下面的代码: final Clipboard clipboard= kit.getSystemClipboard(); Icon icon= new ImageIcon("myphoto.jpg"); final JLabel label= new JLabel(icon); label.setTransferHandler(new ImageSelection()); JButton copy= new JButton("Label Copy"); copy.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ TransferHandler handler= label.getTransferHandler(); handler.exportToClipboard(label, clipboard, TransferHandler.COPY);}});在你的程序中,要有一个JFrame,加上一个JLabel,一个JButton,将上面的代码加进入,你就可以在你的程序中看到图像如何复制到系统clipboard了.

三、java10 新特性 集合新增的copyof方法

1、Java10在java.util包下的List、Set、Map新增了静态方法copyOf。此方法生成一个不可修改的集合并返回。

2、运行代码时,会遇到错误。原因是尝试向copyOf返回的集合中添加元素,而该集合为不可变集合。

3、查看源码,发现返回的集合实际上是ImmutableCollections$ListN类的实例。该类继承自AbstractImmutableList。

4、AbstractImmutableList源码显示,所有对元素的增删改操作都会抛出异常,这意味着返回的是不可变集合。

5、具体到List、Set、Map的copyOf方法的实现,它们在生成新集合后返回。

6、综上,List、Set、Map新增的copyOf方法用于生成不可变集合。新集合不可修改,无法改变其中的内容。