我有一个类,其实例由底层平面格式初始化和使用。
class MyAttributeConverter implements AttributeConverter<XX, YY> {
public YY convertToDatabaseColumn(XX attribute) { return null; }
public XX convertToEntityAttribute(YY dbData) { return null; }
}
没有错,我认为我需要添加一些静态方法以用作方法引用。
private static MyAttributeConverter instance;
// just a lazy-initialization;
// no synchronization is required;
// multiple instantiation is not a problem;
private static MyAttributeConverter instance() {
if (instance == null) {
instance = new MyAttributeConverter();
}
return instance;
}
// do as MyAttributeConverter::toDatabaseColumn(xx)
public static YY toDatabaseColumn(XX attribute) {
return instance().convertToDatabaseColumn(attribute);
}
public static XX toEntityAttribute(YY dbData) {
return instance().convertToEntityAttribute(attribute);
}
仍然没有任何问题(我相信),我不喜欢instance
上课的坚持,这就是我尝试这样做的原因。
private static WeakReference<MyAttributeConverter> reference;
public static <R> R applyInstance(Function<? super MyAttributeConverter, ? extends R> function) {
MyAttributeConverter referent;
if (reference == null) {
referent = new MyAttributeConverter();
refernce = new WeakReference<>(referent);
return applyInstance(function);
}
referent = reference.get();
if (referent == null) {
referent = new MyAttributeConverter();
refernce = new WeakReference<>(referent);
return applyInstance(function);
}
return function.apply(referent); // @@?
}
我基本上什至不知道如何测试这段代码。我很抱歉我的问题可能有些含糊。
- 这是一种(正确/错误)方法吗?
reference.get()
成语里面有没有function.apply
可能null
?- 有没有可能出现内存泄漏等问题?
- 我应该依靠
SoftReference
而不是WeakReference
?
谢谢你。