Java有transient
关键字.为什么JPA @Transient
不是简单地使用已经存在的java关键字?
我只是想知道所有这些注释之间的区别.我们为什么要使用这些...意味着它们没有影响,尤其是字段级别和属性级别.
使用混合级注释的目的是什么:
@Entity
@Access(AccessType.FIELD)
class Employee {
// why their is a field level access
private int id;
// whats the purpose of transient here
@Transient
private String phnnumber;
// why its a property level access
@Access(AccessType.property)
public String getPhnnumber() {
return "1234556";
}
}
Run Code Online (Sandbox Code Playgroud)
这堂课到底是什么意思?
我刚刚在Java中发现你可以声明一个字段'静态瞬态' - 编译器不会抱怨.这似乎没有任何用处,因为静态字段没有被序列化,我们都知道.
但我想知道,实际上是否存在"静态瞬态"字段有用的情况?
我正在使用一些静态方法和字段进行保存状态序列化.我可以发誓虽然序列化和静态造成了混乱.我应该让所有静态瞬态?膨胀呼叫会恢复静态正常吗?
我正在阅读Java的ArrayList的源代码,我遇到了它的支持数组声明:
private transient Object[] elementData;
Run Code Online (Sandbox Code Playgroud)
为什么这需要是暂时的?为什么不能将这个类序列化?
谢谢您的帮助!
我使用Jackson 2.1.4将POJO序列化为JSON,但我想忽略序列化的特定字段.我使用了瞬态,但它仍在序列化该元素.
public class TestElement {
int x;
private transient String y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在序列化如下:
public static void main(String[] args) throws JsonProcessingException {
TestElement testElement = new TestElement();
testElement.setX(10);
testElement.setY("adasd");
ObjectMapper om = new ObjectMapper();
String serialized = om.writeValueAsString(testElement);
System.err.println(serialized);
}
Run Code Online (Sandbox Code Playgroud)
请不要建议,@JsonIgnore
因为我不想将我的模型与杰克逊特定注释联系起来.可以仅使用瞬态完成吗?objectmapper上是否有用于可见性设置的API?
在java类java.util.Locale中,我发现关键字transient标记了一个方法.
public final class Locale
implements Cloneable, Serializable
{
private static class LocaleNameGetter
implements sun.util.LocaleServiceProviderPool.LocalizedObjectGetter
{
public transient String getObject(LocaleNameProvider localenameprovider, Locale locale, String s, Object aobj[])
{
if(!$assertionsDisabled && aobj.length != 2)
throw new AssertionError();
int i = ((Integer)aobj[0]).intValue();
String s1 = (String)aobj[1];
switch(i)
{
case 0: // '\0'
return localenameprovider.getDisplayLanguage(s1, locale);
case 1: // '\001'
return localenameprovider.getDisplayCountry(s1, locale);
case 2: // '\002'
return localenameprovider.getDisplayVariant(s1, locale);
}
if(!$assertionsDisabled)
throw new AssertionError();
else
return null;
}
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么会这样吗?
在Java反射世界中 -
我们如何确定Field对象是否具有transient修饰符?
http://docs.oracle.com/javase/tutorial/reflect/member/fieldModifiers.html
文档没有帮助.
我正在使用DB4o并试图避免从数据库中请求从未存储过的实例或类变量.