标签: static-methods

泛型类中的静态方法?

在Java中,我想有一些东西:

class Clazz<T> {
  static void doIt(T object) {
    // shake that booty
  }
}
Run Code Online (Sandbox Code Playgroud)

但我明白了

Cannot make a static reference to the non-static type T

我不了解基本用途之外的泛型,因此无法理解这一点.我无法在互联网上找到有关该主题的更多信息,这没有任何帮助.

有人可以通过类似的方式澄清这种使用是否可行?另外,为什么我的原始尝试不成功?

java generics static-methods

190
推荐指数
6
解决办法
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);
Run Code Online (Sandbox Code Playgroud)

我故意对细节模糊不清,试图获得针对不同情况的指导方针.但我并没有考虑像Math.random()这样的简单库函数.我正在考虑更多执行某些特定复杂任务的类,但只需要一个(公共)方法来执行它.

c# java oop static-methods

165
推荐指数
6
解决办法
8万
查看次数

为什么静态方法被认为是一种方法?

我正在为一门课程的一些代码写一个解释,并且不小心使用了这些单词method并且function可以互换.我决定回过头来修改措辞,但在我的理解中遇到了一个漏洞.

根据我的理解,子程序是一个function如果它不作用于一个类的实例(它的效果仅限于它的显式输入/输出),并且是一个method如果它在一个类的实例上运行(它可能携带)对实例造成不纯的副作用).

这里有关于这个主题的很好的讨论.请注意,根据接受的答案的定义,静态method实际上应该是一个函数,因为实例永远不会被隐式传递,并且它不能访问任何实例的成员.

虽然这是心灵,但是静态methods实际上不应该是函数吗?

根据他们的定义,他们不会对某一类的特定情况采取行动; 由于关系,他们只与班级"捆绑".我已经看到一些好看的网站将静态子程序称为"方法"(Oracle,Fredosaurus,ProgrammingSimplified),所以要么它们都忽略了术语,要么我错过了一些东西(我的猜测是后者) .

我想确保我使用正确的措辞.
任何人都能清楚这一点吗?

java methods static static-methods terminology

135
推荐指数
7
解决办法
6930
查看次数

在类体中调用类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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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 = _stat_func() 
  TypeError: 'staticmethod' object is not callable
Run Code Online (Sandbox Code Playgroud)

我理解为什么会发生这种情况(描述符绑定),并且可以通过_stat_func()在上次使用后手动转换为static方法来解决它,如下所示:

class Klass(object):

    def _stat_func():
        return 42

    _ANS = _stat_func()  # use the non-staticmethod version

    _stat_func = staticmethod(_stat_func) …
Run Code Online (Sandbox Code Playgroud)

python static-methods decorator

134
推荐指数
5
解决办法
9万
查看次数

Kotlin中的静态扩展方法

如何在Kotlin中定义静态扩展方法?这甚至可能吗?我目前有一个扩展方法,如下所示.

public fun Uber.doMagic(context: Context) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

可以在实例上调用上述扩展名.

uberInstance.doMagic(context) // Instance method
Run Code Online (Sandbox Code Playgroud)

但是如何使它成为静态方法,如下所示.

Uber.doMagic(context)         // Static or class method
Run Code Online (Sandbox Code Playgroud)

static-methods kotlin

125
推荐指数
5
解决办法
3万
查看次数

java中多线程环境中的静态方法行为

有一个简单的愚蠢问题困扰着我并在脑海中提出了几个论点.我想抛弃以下问题的所有疑虑.

class Clstest{

    public static String testStaticMethod(String inFileStr) {

        // section 0

        // section 1

        // do something with inFileStr

        // section 2

        // section 3

        return inFileStr;

    }

}
Run Code Online (Sandbox Code Playgroud)

假设有五个线程同时执行一次调用Clstest.testStaticMethod("arg-n").

线程1调用Clstest.testStaticMethod("arg-1").

当线程1在第1部分中时,线程2调用Clstest.testStaticMethod("arg-2").

那么线程1会发生什么?它会进入睡眠状态吗?

当线程1获得机会时,它会从暂停的第1部分恢复执行吗?

当所有五个线程之间共享一个Clstest.testStaticMethod并且相同时,它Clstest.testStaticMethod是如何发生的?

有没有可能交换inFileStr多个线程发送的?

java multithreading static-methods

112
推荐指数
2
解决办法
6万
查看次数

静态方法与实例方法的性能

我的问题涉及静态方法与实例方法的性能特征及其可伸缩性.假设在这种情况下,所有类定义都在一个程序集中,并且需要多个离散指针类型.

考虑:

public sealed class InstanceClass
{
      public int DoOperation1(string input)
      {
          // Some operation.
      }

      public int DoOperation2(string input)
      {
          // Some operation.
      }

      // … more instance methods.
}

public static class StaticClass
{
      public static int DoOperation1(string input)
      {
          // Some operation.
      }

      public static int DoOperation2(string input)
      {
          // Some operation.
      }

      // … more static methods.
}
Run Code Online (Sandbox Code Playgroud)

上述类表示辅助样式模式.

在实例类中,解析实例方法需要花费一些时间来与StaticClass相反.

我的问题是:

  1. 保持状态不是问题(不需要字段或属性),使用静态类总是更好吗?

  2. 如果有相当多的静态类定义(例如100,每个都有许多静态方法),与相同数量的实例类定义相比,这会对执行性能或内存消耗产生负面影响吗?

  3. 当调用同一实例类中的另一个方法时,实例解析是否仍然发生?例如,使用[this]关键字,例如this.DoOperation2("abc")来自DoOperation1同一实例.

c# performance il static-methods

103
推荐指数
2
解决办法
5万
查看次数

无法对非静态方法进行静态引用

用Java构建多语言应用程序.从R.string资源XML文件插入String值时出错:

public static final String TTT =  (String) getText(R.string.TTT);
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

错误:无法从Context类型对非静态方法getText(int)进行静态引用

这是怎么造成的,我该如何解决?

java static-methods compiler-errors

97
推荐指数
3
解决办法
37万
查看次数

.NET:在静态方法中确定"this"类的类型

在我可以使用的非静态方法中this.GetType(),它将返回Type.如何Type在静态方法中获得相同的内容?当然,我不能只写,typeof(ThisTypeName)因为ThisTypeName只在运行时才知道.谢谢!

.net c# static-methods types

92
推荐指数
4
解决办法
6万
查看次数

使用很多静态方法是件坏事吗?

当该类不需要跟踪内部状态时,我倾向于将类中的所有方法声明为静态.例如,如果我需要将A转换为B并且不依赖于可能变化的某个内部状态C,则创建静态转换.如果有一个我希望能够调整的内部状态C,那么我添加一个构造函数来设置C并且不使用静态转换.

我阅读了各种建议(包括在StackOverflow上),不要过度使用静态方法,但我仍然无法理解上面的经验法则错误.

这是一种合理的方法吗?

language-agnostic static-methods

90
推荐指数
8
解决办法
3万
查看次数