- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在完成一个项目,其中有 100-150 个类和……噗……很多很多方法。对于开发,我从一开始就使用了“尽可能使用修饰符‘final’”保存操作。但这让我的方法(以及我手动创建而不是使用助手创建的类)没有他们应得的最终/抽象关键字。真的,我不想通过每个类和方法声明来手动完成它们。我确定有一种方法可以告诉 eclipse '以最严格的方式为我做这件事(即,如果一个类从未实例化,则将其设置为抽象类,否则,如果从未扩展,则将其设置为最终类,否则什么都没有,以及类似的东西 - 显然没有抽象部分 - 用于方法)。
我说的对吗?如果是这样,那是哪条路?
最佳答案
执行您的启发式方法可能会有问题。这可能是 eclipse 没有实现它们的原因。
将代码中未扩展的所有类设置为 final
- IDE 如何知道它们是否打算扩展到其他地方?仅当您确实打算禁止扩展时,才将它们设置为 final
。
abstract
也是如此 - IDE 无法知道您是在编写一个框架,还是只是一个领域模型 .jar
,那里从来没有将是任何初始化。自动使实体抽象
可能会在以后搬起石头砸你的脚。
变量很少出现这种情况,因此这个启发式 eclipse 可以做到。
编辑我想我必须详细说明我的推理。
添加 final
修饰符对变量没有问题,因为它们大部分是本地化的——它们在您控制的代码范围内。很少有可修改的变量对第 3 方代码可见并且无需调用方法即可修改。
如果变量上的 final
修饰符过多,它的影响将仅限于您的代码,您可能会很快注意到它。所以最坏的情况是您将不得不打开文件并删除修饰符。
类的情况有所不同——其中许多是公共(public)的,因此可供第 3 方代码访问。如果您将代码中所有未实例化的类都声明为 abstract
,您将有效地禁止其他人实例化它——而这一次您甚至不会知道。所以这里最坏的情况是其他人将无法使用您的代码。这就是为什么我不会将其自动化 - 大多数时候您会希望第 3 方代码能够实例化您定义的类。
然而,关于何时使类 final
有一个启发式方法 - 当一个类只有静态方法时。 PMD 和 Checkstyle 等一些工具知道这一点,并且会告诉您。这个选项实际上很适合 eclipse,但不幸的是没有实现。
至于默认让 classees final
- andersoj 和许多其他人坚持“为继承而设计或禁止它”的原则 - 我认为这是由 Joshua Bloch 在他的“Effective Java”一书中介绍的.其他人则认为,默认“密封”所有类将违反开闭原则。我倾向于后者。
关于java - 变量声明 - 尽可能使用修饰符 'final'。是的,类和方法是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431781/
SQL FMDB 的修饰符在哪里描述?特别是,如何在要插入的字符串中放置引号。比如我想将名称“Mac's Place”插入数据库?谢谢 最佳答案 如果在 SQL 中使用 executeUpdate 和
我读过 article在 MSDN 上。它解释了为什么“in”应该只与自定义只读结构一起使用,否则会有性能损失。但是,我不太明白如何对原始类型使用“in”。由于 C# 中的所有内置值类型都是不可变的,
“__printflike__ 修饰符”到底是什么?这个词是什么意思? 最佳答案 据推测,它会告诉编译器您正在使用的函数接受格式为 [anything, ] format, ... 的参数,其中 fo
我在 VS2010 上使用 ReSharper 插件,我正在生成一个接口(interface)方法。ReSharper 在参数名称上放置一个 @。那是做什么用的? int Count(Func @wh
我在写小偷中用了大量的正则,所以在接下来的版本中要逐步减少正则的应用 在PHP正则表达式中需要转义的字符如下: $^*()+={}[]|/:<>.?'" 注意:perl风
http://msdn.microsoft.com/en-us/library/435f1dw2.aspx public class Base { public string Field; }
根据scala-wartremover静态分析工具我必须将“final”放在我创建的每个案例类前面:错误消息显示“案例类必须是最终的”。 根据scapegoat (Scala 的另一个静态分析工具)相
在 tcsh 中,我可以通过以下方式从路径末尾提取第二个路径元素 cd /some/long/directory/structure/path/ set x=`pwd` echo ${x:h:h:t}
我找到了很多 SwiftUI 教程,其中修饰符 .resizable() 用于图像。它似乎不再适用于带有 Swift 5 的 Xcode 13.3.1。 导入了 SwiftUI。如果您自己键入整个修饰
我已经设置好了音频播放器 除了步进器的当前功能外,我还想为 onIncrement 和 onDecrement 播放单独的声音。 这个项目使用核心数据来持久化。 $estimatorData.qty
来自 linux 内核脚本/mod/modpost.c: static int is_vmlinux(const char *modname) { const char *myname;
我刚刚遇到了一个BNF Grammar for JAVA 。其中,“修饰符”有一个称为“threadsafe”的终结符号。但是,我以前从未见过它,也无法在《Java 语言规范》Java SE 7 版
我创建了一个脚本,它将我组中的所有帖子嵌入到我的网站上。为此,我必须知道所有可能的修饰符“附件”类型。 现在我知道,那个类型可以是: 分享, video_share_youtube。 但我不知道在哪里
在 tcsh 中,我可以通过以下方式从路径末尾提取第二个路径元素 cd /some/long/directory/structure/path/ set x=`pwd` echo ${x:h:h:t}
我找到了很多 SwiftUI 教程,其中修饰符 .resizable() 用于图像。它似乎不再适用于带有 Swift 5 的 Xcode 13.3.1。 导入了 SwiftUI。如果您自己键入整个修饰
我正在编写一个代表一些简单几何形状的 Java 类。 最上面abstract类(它本身是包私有(private))我已经声明了需要从同一包中的子类访问的属性。 如果我将属性声明为 final在 Abs
我已经设置好了音频播放器 除了步进器的当前功能外,我还想为 onIncrement 和 onDecrement 播放单独的声音。 这个项目使用核心数据来持久化。 $estimatorData.qty
明确地说,我是 不是 询问如何使用 ViewModifier 协议(protocol)来创建一个带有 body 函数的结构,然后可以使用它来修改 View 。这个问题有点不同。 我正在尝试创建 Nav
我有一个内部类,用于存储我用于游戏的控件的信息,现在我想在其中存储一个静态 ArrayList,其中包含所有控件的名称。但我收到此错误:“修饰符 static 只允许在常量变量声明中” private
public class This_testing { int x,y; public This_testing(int x,int y){ //Why modifier void
我是一名优秀的程序员,十分优秀!