@Datapublic class PropertiesMessage implements Cloneable, Serializable { public Map<String, DeviceProperties> propertiesMap; @Override public PropertiesMessage clone() throws CloneNotSupportedException { return (PropertiesMessage) super.clone(); }}@Datapublic class DeviceProperties implements Cloneable, Serializable { public String value; @Override public DeviceProperties clone() throws CloneNotSupportedException { return (DeviceProperties) super.clone(); }}@RequiredArgsConstructor(onConstructor = @(@Autowired))public class StorageListen { private static PropertiesMessage filteredRealtimeData = new PropertiesMessage(); private PeriodStorage periodStorage; @Scheduled(cron="*/1 * * * * ?") @Async("PeriodStorage") public void periodStorage() throws CloneNotSupportedException { PropertiesMessage clone = filteredRealtimeData.clone(); Map<String,List<StorageConfig>> map = new HashMap(); List<StorageConfig> list = new ArrayList(); StorageConfig s1 = new StorageConfig(); s1.setValue("1"); StorageConfig s2 = new StorageConfig(); s2.setValue("1"); list.add(s1); list.add(s2); map.put("1",list); periodStorage.storageData(clone,map); }}@RequiredArgsConstructor(onConstructor = @(@Autowired))public class PeriodStorage { private static DeviceProperties filteredRealtimeData = new DeviceProperties(); public void storageData(PropertiesMessage message, Map<String,List<StorageConfig>> map) throws CloneNotSupportedException { map.entrySet().stream().forEach(k -> { k.getValue().parallelStream().forEach(y -> { DeviceProperties clone = filteredRealtimeData.clone(); System.out.println(y.toString()); System.out.println(clone.toString()); }) }); }}
时间: 2024-04-25 19:28:02 浏览: 76
这段代码看起来是Java语言实现的,其中定义了两个类PropertiesMessage和DeviceProperties,都实现了Cloneable和Serializable接口。另外还有一个StorageListen类和一个PeriodStorage类,其中StorageListen类定义了一个定时任务,每1秒钟执行一次periodStorage方法,该方法会将filteredRealtimeData对象克隆一份,然后调用PeriodStorage类的storageData方法,传入该克隆对象和一个map对象,map对象的键是字符串类型,值是一个列表,列表中的元素是一个StorageConfig对象,storageData方法会遍历map对象,对于每个键值对,遍历列表中的每个元素,将filteredRealtimeData对象再次克隆一份,然后输出两个对象的toString方法的返回值。
相关问题
oneable 接口并重写 Object 类中的 clone()方法; 2). 实现 Serializable 接口,通过对象的序列化和反序列化实
`Oneable`接口是一个假设的自定义接口,它并没有在Java标准库中存在。如果需要创建一个类似的概念,我们可以设想一个名为`Oneable`的接口,其中包含一个抽象方法`cloneWithAdditionalInfo()`,用于在克隆对象时添加额外的信息。例如:
```java
public interface Oneable<T> extends Cloneable {
T cloneWithAdditionalInfo();
}
```
然后,如果你有一个实现了这个接口的类,比如`MyClass`,你可以重写`Object`中的`clone()`方法,并在复制的基础上扩展:
```java
public class MyClass implements Oneable<MyClass> {
private String someData;
@Override
public MyClass cloneWithAdditionalInfo() {
MyClass copy = (MyClass) super.clone(); // 使用超类的 clone()
copy.someData = this.someData + " (additional info)";
return copy;
}
// ...其他方法...
}
```
至于`Serializable`接口,它是用于支持对象的序列化和反序列化的。当你实现`Serializable`,对象就可以通过`ObjectOutputStream`和`ObjectInputStream`进行序列化到字节流,以及从字节流恢复到原来的状态。通常会配合`transient`关键字一起使用,以避免不必要的字段被序列化。
```java
public class MyClass implements Oneable<MyClass>, Serializable {
private String someData;
private transient Date creationDate; // 只序列化非瞬态字段
// ...其他方法...
@Override
public void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
// 添加额外序列化步骤,如写入附加信息
}
@Override
public void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
// 处理反序列化后的附加信息
}
}
阅读全文