Questions tagged «static»

5
使用仅包含静态方法的*** Helper或*** Util类是AntiPattern
我经常遇到Java或任何类型的语言中的helper或util类。因此,我问自己这是否是某种反模式,而此类类的存在只是软件设计和体系结构中缺少一些缺失。 通常,这些类仅使用静态方法进行限制,该方法可以完成很多工作。但大多数情况下,确实是上下文相关的并且是全状态的。 我的问题是,您对此类静态辅助程序/ util类有何看法,因为其优势当然是仅使用类名进行快速调用。 在哪种抽象级别上,您将避免使用此类? 我认为关键字“ static”应该只允许在类(Java)的声明中使用,而不能用于方法。我认为以这种方式使用它,是在Java中结合过程式和OO-范式并避免滥用关键字的一种很好的选择,也是中间的选择。 由于答案而增加的内容: 起初,我认为能够组合不同的范例甚至在机器或vm编译的代码中使用运行时解释的脚本语言是完全合法的。 我的经验是,在项目的开发过程中,此类帮助器和utils或其他名称正在不断增长,并在最初被设计为模块化和灵活的代码库的每个被遗忘的角落使用。而且由于缺乏时间进行重构或重新考虑设计,随着时间的推移,您的情况只会变得更糟。 我认为static应该从Java中删除。尤其是在现在可以使用更复杂的功能语言元素的地方。

4
使不依赖实例字段的方法变为静态吗?
最近,我开始在Groovy中为Java项目的集成测试框架进行编程。我将Intellij IDEA与Groovy插件一起使用,我很惊讶地看到所有非静态方法并且不依赖于任何实例字段,这是一个警告。但是,在Java中,这不是问题(至少从IDE的角度来看)。 是否将所有不依赖于任何实例字段的方法都转换为静态函数?如果为true,这是特定于Groovy还是通常可用于OOP?又为什么呢

1
我们在滥用静态方法吗?
几个月前,我开始从事一个新项目,在遍历代码时,它使我震惊了所使用的静态方法。它们不仅保留了实用程序方法collectionToCsvString(Collection<E> elements),而且还保留了大量业务逻辑。 当我问负责背后原因的那个人时,他说这是逃避斯普林暴政的一种方式。它围绕着这个思考过程进行了一些操作:要实现客户收据创建方法,我们可以提供服务 @Service public class CustomerReceiptCreationService { public CustomerReceipt createReceipt(Object... args) { CustomerReceipt receipt = new CustomerReceipt(); // creation logic return receipt; } } 现在,那个家伙说他不喜欢让Spring不必要地管理类,主要是因为它强加了限制,即客户类必须是Spring bean本身。我们最终将一切都由Spring管理,这几乎迫使我们以过程方式使用无状态对象。或多或少在这里说了什么https://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html 因此,除了上面的代码,他有 public class CustomerReceiptCreator { public static CustomerReceipt createReceipt(Object... args) { CustomerReceipt receipt = new CustomerReceipt(); // creation logic return receipt; } } …

1
C ++中的静态全局变量和匿名名称空间
为什么在引入静态全局变量(内部链接)和未命名的命名空间中的符号(外部链接,无论如何都无法从外部引用它)之间进行区分? 这些原因是否仍然有效,还是有新的原因? 除了匿名全局(或命名空间范围)联合必须具有static的任意规则之外,还剩下什么地方,它们又是什么? 对于积分,如果没有充分的理由使它们有所不同,是否有要求使它们相等的要求? 当C ++引入名称空间(C ++ 98),特别是未命名的名称空间时,由于热情高涨,静态全局变量被弃用,不如新事物,尽管C ++ 11对此进行了还原: 弃用static关键字…不再? 在C ++ 11之前,不能将具有内部链接的符号用作模板参数:为什么C ++ 03要求模板参数具有外部链接?

6
大量的时间,我想不出拥有对象而不是静态类的理由。对象有比我想象的更多的好处吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我了解对象的概念,作为Java程序员,我觉得OO范式在实践中自然而然地出现在我身上。 但是最近我发现自己在想: 等等,使用对象比使用静态类(具有适当的封装和OO做法)实际具有哪些实际好处? 我可以想到使用对象的两个好处(既重要又强大): 多态性:允许您在运行时动态灵活地交换功能。还可以轻松为系统添加新功能“零件”和替代品。例如,如果有一个Car设计用于处理Engine对象的类,并且您想向Car可以使用的系统中添加一个新的Engine,则可以创建一个新的 Engine子类并将该类的Car对象简单地传递给该 对象,而不必改变一切Car。您可以在运行时决定这样做。 能够“传递功能”:您可以动态地在系统中传递对象。 但是与静态类相比,对象还有更多优势吗? 通常,当我向系统添加新的“部件”时,我会通过创建新类并从中实例化对象来实现。 但是最近,当我停下来想一想时,我意识到在很多我通常使用对象的地方,静态类将与对象相同。 例如,我正在为我的应用程序添加一个保存/加载文件机制。 对于一个对象,代码的调用行将如下所示: Thing thing = fileLoader.load(file); 对于静态类,它看起来像这样: Thing thing = FileLoader.load(file); 有什么不同? 通常,当普通的静态类的行为相同时,我只是想不出实例化对象的理由。但是在OO系统中,静态类很少见。所以我一定想念一些东西。 除了上面列出的两个对象以外,对象还有其他优点吗?请解释。 编辑:澄清。在交换功能或传递数据时,我确实发现对象非常有用。例如,我写了一个组成旋律的应用程序。MelodyGenerator有几个不同的子类创建旋律,并且这些类的对象是可互换的(策略模式)。 旋律也是对象,因为传递它们很有用。和弦和音阶也是如此。 但是,系统的“静态”部分又将如何传递呢?例如-一种“保存文件”机制。为什么要在对象而不是静态类中实现它?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.