美文网首页
Android开发须知(2):Android中的entityBe

Android开发须知(2):Android中的entityBe

作者: 叶满林 | 来源:发表于2018-12-30 22:49 被阅读0次

    复杂的东西都是从简单的开始,如果想要打造一个极致精美的房间,那么你得造好每一块砖。想要打造一个漂亮的程序,就要做一个结构清晰目录(框架),并将把每一个种类(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架构模式,做个小铺垫,不知道对您是否有启发呢?我们改天再聊。

    相关文章

      网友评论

          本文标题:Android开发须知(2):Android中的entityBe

          本文链接:https://www.haomeiwen.com/subject/nkvblqtx.html