`
allwefantasy
  • 浏览: 47662 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 语言静态变量和静态方法继承机制的吐槽

阅读更多

假设,如果,要是,'静态变量'的继承能够按照我‘天真的以为是的那个样子’,会怎么样呢?

class Person {
    public static String name = "person";
    public static String name(){
         return name;
    }

}

class Person2 extends Person {
}

class Person3 extends Person {

}

Person2 和 Person3 都继承自Person.

接着我希望如此:

public class Test {
    public static void main(String[] args) {
        Person2.name = "person2";
        Person3.name = "person3"

        Person.name();//希望能打印出 "person"
        Person2.name();//希望能打印出 "person2"
        Person3.name();//希望能打印出 "person3"

    }


}

但是最后都打印了出person3.总结一句:

静态变量和静态方法是完全特定属于某个类的。继承自父类的类访问到的静态变量也是它父亲的。你可以申明自己的静态变量覆盖父类的静态变量,但是如果你用的是继承自父类的静态方法获取静态变量,你最终得到的也是父类的静态变量。

这是完全操蛋的设计!!!

继承就应该是继承到父类的一份copy!

为什么我强烈的希望继承的是copy 而不是一个简单引用呢?

因为它让java的某种申明式语法成为不可能。

下面全部是基于静态变量和方法继承后在子类会获得一份新的copy的假设而成立的(这实际上是不被支持的),千万不要以为下面的例子是正确的

举个例子,我在设计一个模型类的时候:


public class Document {
  protected static String storeIn = "";
  public static void storeIn(String name){
     storeIn = name;
  }

  public static String storeIn(){
      return storeIn;
  }
  …….
}

public class Person extends Document {
    static {
        storeIn("persons");
        hasMany("addresses", new Options(map(
                Options.n_kclass, Address.class,
                Options.n_foreignKey, "person_id"
        )));
    }
}

每个子类可以通过静态变量存储的自己的配置信息。通过继承自父类从而避免每次去申明这些静态变量和方法。 看出端倪了吗?静态变量完全可以作为一个类似Annotation的东西,并且会比Annotation更简单。Annotation是啥,就是对某个类(域,方法等)进行注解,对吗?

上面Person的写法完全等价于:

@StoreIn("persons")
public class Person extends Document {
    @HasMany(Options.n_kclass=Address.class)
    private List addresses;
    .....
}

第一眼感觉上都差不多。但是Annotation存在诸多限制,比如里面不能存复杂类型的信息。而且一旦写了,就写死啦,就不能改啦。 那如果使用静态变量呢?

我要那storeIn的信息怎么拿?

Person.storeIn();

//annotation的拿法
Person.getClass.getAnnotations()
....blablalba...好多。

然后程序在运行的时候完全可以修改静态变量的值。如果你觉得不安全,你还可以通过final 进行限制。

其实刚才说了那么多,还有一个点子没说到,就是,静态变量都是继承自父类的,你没必要在子类像Annotation一个一个去写。对一个类的注解信息你完全就像调用一个简单的方法进行设置。多爽。

但是现在因为刚才我说的Java糟糕的静态继承设计,使得这成为不可能。不然,还需要Annotation吗?需要!但完全可以只作为静态变量的一个补充。

分享到:
评论

相关推荐

    非阻塞式服务器Web.Java.zip

    随便打开几个J2EE的网站,我就不想吐槽那个URL了。Web.Java使用正则表达式来配置URL,这样做可以提供足够强大和灵活的URL模式。比如像用“/Article/23”想获取文章的ID可以这样来配置URL HttpServer.setPATH("/...

    一线研发之声之吐槽51谁能解?

    在电子工程领域,51单片机是许多初学者入门的首选平台,因其简单易用而...无论你是正在探索51的世界,还是已经熟悉其特性的老手,都有很多可以吐槽和学习的地方。在电子工程的道路上,不断学习和实践是提升自己的关键。

    WxApplication:这是一个微信小程序代码,欢迎大佬,巨佬吐槽

    在描述中,"WxApplication"被提及,表明这是一个关于微信小程序的项目,而"欢迎大佬,巨佬吐槽"这部分则是作者的幽默表达,他希望有经验的开发者能对他的代码提出意见或批评,以促进项目的完善。 标签"JavaScript...

    windows下自己动手一步步编译ffmpeg和ffplay

    此外,作者也表达了对于FFmpeg学习困难的吐槽,因为它不仅本身庞大,还涉及到众多外部库的支持。每种编码格式(如H264、MP3等)都需要对应的库文件支持。这使得FFmpeg的学习曲线较为陡峭,因此编译FFmpeg的过程中...

    javaee电子商城系统课程设计样本.doc

    javaee电子商城系统课程设计样本.doc

    scratch少儿编程逻辑思维游戏源码-糖果大爆险.zip

    scratch少儿编程逻辑思维游戏源码-糖果大爆险.zip

    spring-boot-2.7.2.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-1.3.6.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    GIS安装施工综合方案.doc

    GIS安装施工综合方案.doc

    基于PHP+CSS+JS+MySQL的选题系统源码——B/S架构下多角色登录与权限管理

    内容概要:本文详细介绍了选题系统源码,涵盖PHP、CSS、JavaScript和MySQL四种核心技术。系统采用B/S架构,支持管理员、审核员、教师和学生四种身份登录,每种身份有独立的功能权限。文中提供了详细的环境搭建指南,如使用phpStudy和Navicat进行项目管理和数据库操作。此外,还展示了关键代码片段,如登录验证、权限管理、数据库设计以及界面优化方法。同时,针对性能优化提出了建议,如解决N+1查询问题的方法。 适合人群:适用于有一定编程基础,尤其是对PHP和Web开发感兴趣的开发者和技术爱好者。 使用场景及目标:① 学习并掌握B/S架构的应用开发流程;② 实践多角色登录和权限管理的具体实现;③ 提升Web应用的界面优化和用户体验;④ 掌握数据库设计和性能优化技巧。 其他说明:本文不仅提供了完整的代码示例,还包括了详细的开发文档和支持材料,帮助读者快速上手并深入理解整个项目的构建过程。

    scratch少儿编程逻辑思维游戏源码-下水道冒险猫.zip

    scratch少儿编程逻辑思维游戏源码-下水道冒险猫.zip

    scratch少儿编程逻辑思维游戏源码-下雨时向北的路.zip

    scratch少儿编程逻辑思维游戏源码-下雨时向北的路.zip

    三相下垂双逆变器同步并联控制技术的研究与应用

    内容概要:本文深入探讨了三相下垂双逆变器同步并联控制技术,重点介绍了下垂控制的基本原理及其在微电网中的应用。文章详细解释了下垂控制如何通过调整频率和电压幅值来实现负载的自动分配,并讨论了在多台逆变器并联时可能出现的环流问题以及解决方案,如虚拟阻抗法。此外,还介绍了同步环节的关键技术,特别是改进型锁相环的应用,并提供了具体的实现代码示例。最后,文章分享了一些实用的调试技巧和经验,强调了参数整定的重要性。 适用人群:从事电力电子、微电网控制领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解三相下垂双逆变器同步并联控制技术的工程师和科研人员,旨在帮助他们掌握核心技术,解决实际工程中的问题。 其他说明:文中提供的代码示例和调试方法有助于读者更好地理解和应用相关技术,提高系统的稳定性和性能。

    spring-data-redis-1.2.1.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    GEPLC机组自动化装置编程使用说明书.doc

    GEPLC机组自动化装置编程使用说明书.doc

    scratch少儿编程逻辑思维游戏源码-我的领土.zip

    scratch少儿编程逻辑思维游戏源码-我的领土.zip

    spring-boot-1.3.3.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-我的世界 MMO V1.6.zip

    scratch少儿编程逻辑思维游戏源码-我的世界 MMO V1.6.zip

    scratch少儿编程逻辑思维游戏源码-坦克(1).zip

    scratch少儿编程逻辑思维游戏源码-坦克(1).zip

    GSM移动通信网容量解决方案.doc

    GSM移动通信网容量解决方案.doc

Global site tag (gtag.js) - Google Analytics