Questions tagged «static-methods»

既不需要类实例的方法,也不需要隐式访问此类实例的数据(或this,self,Me等)的方法。


21
Java:何时使用静态方法
我想知道何时使用静态方法?假设我有一个带有几个getter和setter的类,一个或两个方法,并且我希望这些方法只能在该类的实例对象上调用。这是否意味着我应该使用静态方法? 例如 Obj x = new Obj(); x.someMethod 要么 Obj.someMethod (这是静态方式吗?) 我很困惑!



24
为什么不能在Java接口中定义静态方法?
编辑: 从Java 8开始,接口中现在允许使用静态方法。 这是示例: public interface IXMLizable<T> { static T newInstanceFromXML(Element e); Element toXMLElement(); } 当然这行不通。但是为什么不呢? 可能的问题之一是,当您致电时会发生什么: IXMLizable.newInstanceFromXML(e); 在这种情况下,我认为它应该只调用一个空方法(即{})。所有子类都将被强制实现static方法,因此在调用static方法时它们都很好。那为什么不可能呢? 编辑:我想我正在寻找比“因为这就是Java的方式”更深的答案。 有某种特殊的技术原因为什么不能覆盖静态方法?也就是说,为什么Java的设计者决定使实例方法可重写而不是静态方法? 编辑:我的设计的问题是我试图使用接口来强制执行编码约定。 也就是说,该接口的目标是双重的: 我希望IXMLizable接口允许我将实现它的类转换为XML元素(使用多态性,效果很好)。 如果有人想创建实现IXMLizable接口的类的新实例,那么他们将始终知道将有一个newInstanceFromXML(Element e)静态构造函数。 除了在界面中添加注释之外,还有其他方法可以确保这一点吗?


9
如何从Java中的静态方法调用getClass()?
我有一个必须具有一些静态方法的类。在这些静态方法中,我需要调用方法getClass()进行以下调用: public static void startMusic() { URL songPath = getClass().getClassLoader().getResource("background.midi"); } 但是Eclipse告诉我: Cannot make a static reference to the non-static method getClass() from the type Object 解决此编译时错误的适当方法是什么?

7
命名空间+函数与类上的静态方法
假设我有或将要编写一组相关函数。假设它们与数学有关。在组织上,我应该: 编写这些函数并将它们放在我的MyMath名称空间中,并通过引用它们MyMath::XYZ() 创建一个名为的类MyMath,并使这些方法静态化,并类似地进行引用MyMath::XYZ() 为什么我会选择一个作为组织软件的方式?

21
如果私有帮助器方法可以是静态的,则它们应该是静态的
假设我有一个要实例化的类。我在类中有几个私有的“帮助器”方法,它们不需要访问任何类成员,而仅对它们的参数进行操作,并返回结果。 public class Example { private Something member; public double compute() { double total = 0; total += computeOne(member); total += computeMore(member); return total; } private double computeOne(Something arg) { ... } private double computeMore(Something arg) {... } } 有没有指定任何特别的原因computeOne,并computeMore为静态方法-或任何特别的理由不? 将它们设置为非静态无疑是最容易的,即使它们可以肯定是静态的而不会引起任何问题。

11
泛型类中的静态方法?
在Java中,我希望具有以下内容: class Clazz<T> { static void doIt(T object) { // ... } } 但是我明白了 无法静态引用非静态类型T 我不了解泛型的基本用途,因此没有太多意义。我无法在互联网上找到有关该主题的很多信息,这无济于事。 有人可以通过类似的方式澄清这种使用是否可能吗?另外,为什么我最初的尝试失败了?

15
单一方法上课-最佳方法?
说我有一个旨在执行单个功能的类。执行该功能后,可以将其销毁。是否有任何理由偏爱其中一种方法? // Initialize arguments in constructor MyClass myObject = new MyClass(arg1, arg2, arg3); myObject.myMethod(); // Pass arguments to method MyClass myObject = new MyClass(); myObject.myMethod(arg1, arg2, arg3); // Pass arguments to static method MyClass.myMethod(arg1, arg2, arg3); 我故意对细节含糊不清,以尝试获取针对不同情况的指导。但是我真的没有想到像Math.random()这样的简单库函数。我在想更多的类来执行一些特定的,复杂的任务,但只需要一个(公共)方法即可。
172 c#  java  oop  static-methods 

5
在类主体中调用类staticmethod?
当我尝试从类的主体中使用静态方法,并使用内置staticmethod函数作为装饰器来定义静态方法时,如下所示: class Klass(object): @staticmethod # use as decorator def _stat_func(): return 42 _ANS = _stat_func() # call the staticmethod def method(self): ret = Klass._stat_func() + Klass._ANS return ret 我收到以下错误: Traceback (most recent call last):<br> File "call_staticmethod.py", line 1, in <module> class Klass(object): File "call_staticmethod.py", line 7, in Klass _ANS = …

7
Kotlin中的静态扩展方法
如何在Kotlin中定义静态扩展方法?这有可能吗?我目前有一个扩展方法,如下所示。 public fun Uber.doMagic(context: Context) { // ... } 可以在实例上调用以上扩展。 uberInstance.doMagic(context) // Instance method 但是我如何使其变为静态方法,如下所示。 Uber.doMagic(context) // Static or class method

9
为什么将静态方法视为方法?
我正在为某门课程的一些代码编写解释,并且偶然使用了这些单词method并且function可以互换使用。我决定回过头来修正措辞,但在我的理解上遇到了一个漏洞。 据我了解,子例程是一个function如果它不作用于一个类的实例(其作用仅限于其显式输入/输出),并且是一个method如果它作用于一个类的实例(它可能带有消除导致实例不纯的副作用)。 关于这个话题,这里有很好的讨论。请注意,根据接受的答案的定义,静态method实际上应该是一个函数,因为永远不会隐式传递实例,并且它无法访问任何实例的成员。 有了这个主意,静态不应该methods是函数吗? 根据它们的定义,它们不作用于类的特定实例;他们只是因为关系而“束缚”在班上。我见过一些外观不错的站点,尽管它们将静态子例程称为“方法”(Oracle,Fredosaurus,ProgrammingSimplified),所以它们要么都忽略了术语,要么我就漏掉了一些东西(我猜是后者) 。 我想确保我使用的措词正确。 有人可以清除吗?

2
Java多线程环境中的静态方法行为
有一个简单的愚蠢问题困扰着我,并在我脑海中提出了几个论点。我想排除所有关于以下问题的疑问。 class Clstest{ public static String testStaticMethod(String inFileStr) { // section 0 // section 1 // do something with inFileStr // section 2 // section 3 return inFileStr; } } 假设有五个线程同时执行一个调用Clstest.testStaticMethod("arg-n")。 线程1调用Clstest.testStaticMethod("arg-1")。 当线程1位于第1节中时,线程2调用Clstest.testStaticMethod("arg-2")。 那么线程1将会发生什么?会进入睡眠状态吗? 当线程1获得机会时,它将从暂停的第1节继续执行吗? 当所有五个线程共享一个Clstest.testStaticMethod相同的Clstest.testStaticMethod线程时,如何处理? 有可能互换inFileStr多个线程发送的消息吗?

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.