草庐IT

Final-Metaverse-Fantasy

全部标签

c++ - 虚拟继承 : Error: no unique final overrider

我知道在问这个问题之前和之前这里已经介绍了虚拟继承,我浏览了虚拟继承的详细信息,并浏览了类似问题的详细信息,如下所示:multiple-diamond-inheritance-compiles-without-virtual-but-doesnt-with和whydoesGCCgivemeanerror-finaloverrider我的问题略有不同,因为我没有使用纯虚函数,而是显式使用虚拟继承来拥有一个唯一的base类。层次结构如下:base/\/\der1der2\/der3我知道关于派生问题的可怕钻石,这就是我使用虚拟继承的原因。#includeclassbase{public:b

c++ - 从标记为 final 的类的构造函数中调用虚函数是不好的做法吗

通常从构造函数调用虚函数被认为是不好的做法,因为子对象中的覆盖函数不会被调用,因为对象尚未构造。但是,请考虑以下类:classbase{public:base(){}~base(){}private:virtualvoidstartFSM()=0;};classderivedfinal:publicbase,publicfsm_action_interface{public:derived():base{},theFSM_{}{startFSM();}///FSMinterfaceactionsprivate:virtualvoidstartFSM(){theFSM_.start();

c++ - 如何为类定义 'final' 成员函数

是否可以让我的成员函数final像在Java中一样,以便派生类不能覆盖它们? 最佳答案 C++11添加了一个final上下文关键字来支持这一点:classB{public:virtualvoidfoo()final;};classD:B{public:virtualvoidfoo();//error:declarationof'foo'overridesa'final'function};GCC4.7和Clang3.0支持final。正如Sergius在他的回答中指出的那样,自MSVC++2005起,MSVC++就支持它(使用拼写s

java - 如何设置 IntelliJ IDEA 14 以在可能的情况下添加 "final"关键字?

我想将我的IntelliJIDEA14设置为自动将final关键字添加到现有Java类的所有可能位置(参数、字段等)。我找到了一些带有宏和快捷方式的解决方案,但我想设置IntelliJ在保存文件时添加final关键字。有谁知道一个好的解决方案?也许你能推荐一些插件或插件组合? 最佳答案 首选项-代码样式问题自从2018.3版本我们可以启用复选框:Preferences/Settings>Editor>Inspections>Java>Codestyleissues>Localvariableorparametercanbefinal

java - "declare a static final serialVersionUID"警告是什么意思以及如何解决?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Whatdoesitmean:TheserializableclassdoesnotdeclareastaticfinalserialVersionUIDfield?Java编译器警告:可序列化类[*****]未声明long类型的静态最终serialVersionUID字段。为什么?如何解决? 最佳答案 这解释得很好here:TheserialVersionUIDisauniversalversionidentifierforaSerializablecl

java - 为什么静态字段(不是final)在java的内部类中受到限制

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:WhydoesJavaprohibitstaticfieldsininnerclasses?我正在阅读规范,并了解到内部类中不可能有静态成员,它不是最终的编译时间常量。classHasStatic{staticintj=100;}classmyInnerClassTest{classInnerextendsHasStatic{staticfinalintx=3;//OK:compile-timeconstantstaticinty=4;//Compile-timeerror:aninnerclass}stat

java - final 字段对于线程安全真的有用吗?

多年来,我每天都在使用Java内存模型。我认为我对数据竞争的概念以及避免它们的不同方法(例如,同步块(synchronizedblock)、volatile变量等)有很好的理解。但是,我认为我对内存模型仍有一些不完全了解的地方,即类的最终字段应该是线程安全的,无需任何进一步的同步。所以根据规范,如果一个对象被正确初始化(也就是说,没有对该对象的引用在其构造函数中以这种引用可以被另一个线程看到的方式转义),那么,在构造之后,任何线程看到对象的人将保证看到对对象的所有最终字段的引用(处于构造时的状态),而无需任何进一步的同步。特别是,标准(http://docs.oracle.com/ja

java - 为什么不可变类需要 final 关键字?

您能否澄清一下为什么我们将final关键字设置为不可变关键字时,在上课前需要它。我的意思是,如果我们将它的所有属性声明为private和final,那么它也是一个不可变类,不是吗?对不起,如果这个问题看起来很简单,但我真的很困惑。帮帮我。编辑:我知道声明为final的类不能被子类化。但是如果每个属性都是私有(private)的和final的,那有什么区别呢? 最佳答案 正如stacker所说,final确保该类没有被子类化。这一点很重要,因此任何依赖其不变性的代码都可以安全地这样做。例如,不可变类型(其中每个字段也是不可变类型)可以

java - 声明变量 final 和 static

此评论是在代码审查中发表的,发表评论的人已不在我们的团队中。Anytypethatmustberesolvedbytheclassloaderatruntimeshouldneverhaveinstanceswhichareheldbyreferencesdeclaredtobebothfinalandstatic.这是代码行:privatefinalstaticLoggerlog=LoggerFactory.getLogger(MyClass.class);我对声明记录器静态或非静态的争论很熟悉,但这个评论似乎更笼统。我找不到任何关于为什么static和final不好的解释。谁能详细

java - 如何测试实用程序项目的 final方法和静态方法?

我正在尝试为一个项目实现单元测试,它使用一个遗留的“实用程序”项目,其中散布着静态方法,并且许多类是最终的,或者它们的方法是最终的。我根本无法更新旧项目。JMock和EasyMock都对final方法感到窒息,而且我看不到测试静态调用的好方法。有什么技术可以测试这些? 最佳答案 如果您能够重构代码,则可以将您对最终/静态方法的调用包装在简单的实例方法中,例如:protectedFoodoBar(Stringname){returnUtility.doBar(name);}这允许您在单元测试中覆盖包装器方法以返回Foo的模拟实例。您也