Android开发须知(2):Android中的entityBe
复杂的东西都是从简单的开始,如果想要打造一个极致精美的房间,那么你得造好每一块砖。想要打造一个漂亮的程序,就要做一个结构清晰目录(框架),并将把每一个种类(view、entity、adapter)按照特定的规则进行书写。
刚开始,我们就先从比较简单的entityBean开始。
从entity与JavaBean的区别开始
很多Java小白对这两个概念很模糊,尤其是和我一样自学杂七杂八的视频来扩充自己知识库的小伙伴,因为没有统一的规范所以就不是很清楚这一块。
entity:实体类,包装实体。没有业务逻辑。
JavaBean:按照一定的java规范创建的类,可以有自己的逻辑。
大部分情况下,javabean与entity长的差不多的。但是追究根源的话,两个还是不一样的。
Android中的entityBean与传统的JavaBean
不知道有多少和我一样从web转到Android的小伙伴。我们传统的JavaBean是这样写的
public class UserBean implements Serializable{
private static final long serialVersionUID= 123456;
private String name;
private int age;
public UserBean() {
}
public UserBean(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UserBean{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
嗯,咋们来盘点一下:
1.公共的无参构+有参数造方法。2.类的声明是非final类型。3.实现可序列化接口4.为属性声明访问器:JavaBean中的属性应该设置为private,所以为属性提供getter/setter方法。
很标准有没有?但是,在android中的bean类是这样写的
public class UserBean{
public String name;
public int age;
@Override
public String toString() {
return "UserBean{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
在Android序列化不推荐用get-set方法,因为这样性能很低,而内存是有限的。Android不像web哪样对其他框架依赖那么紧密,自然也不用严格按照JavaBean那样写。所以实体属性定义成public。
Bean类除了这些之外,我们还有知道几个细节
1.继承Serializable接口我们需要写定义serialVersionUID
Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。
在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常[InvalidCastException]
在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。
2.面向接口编程
List<?> list= new ArrayList<?>是我们常见的写法
这样做有什么好处呢?比如说有个项目,开发某项目前期,用户很少,系统都是单线程执行,所以使用了ArrayList。但随着业务与用户的提升,开始牵扯到了多线程安全问题,我们只需要要改List<?> list= new Vector,其他的方法不用改变。但是如果你是ArrayList<?> list= new ArrayList<?>那你就惨了,所有用到ArrayList独有的方法都得改得不偿失。
3.泛型为String,则不用声明。
并不是所有带"<>"的我们都要声明存储对象的。这得从泛型的定义开始说起:
泛型的定义:在程序中我们将一个对象放入集合中,但是集合不会记住对象的类型,当我们在次使用对象的时候,对象变为Object类型,而程序中还是原来的类型,我们必须要自己转换其类型,为了解决这个问题,则提出泛型。
由此可知,显式类型参数字符串可以完全不使用泛型
4.内部类使用static
静态类和方法只属于类本身,并不属于该类的对象。如果想要创建一个内部类可以直接进行创建,而不先创建一个外部类对象,
一个小小的Bean类,也能挖出来这么多坑。当然,说这个主要是为了我下来将MVP架构模式,做个小铺垫,不知道对您是否有启发呢?我们改天再聊。