在Java中,我想有一些东西:
class Clazz<T> {
  static void doIt(T object) {
    // shake that booty
  }
}
但我明白了
Cannot make a static reference to the non-static type T
我不了解基本用途之外的泛型,因此无法理解这一点.我无法在互联网上找到有关该主题的更多信息,这没有任何帮助.
有人可以通过类似的方式澄清这种使用是否可行?另外,为什么我的原始尝试不成功?
假设我有一个用于执行单个功能的类.执行该功能后,可以将其销毁.有没有理由更喜欢这些方法之一?
// 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()这样的简单库函数.我正在考虑更多执行某些特定复杂任务的类,但只需要一个(公共)方法来执行它.
我正在为一门课程的一些代码写一个解释,并且不小心使用了这些单词method并且function可以互换.我决定回过头来修改措辞,但在我的理解中遇到了一个漏洞.
根据我的理解,子程序是一个function如果它不作用于一个类的实例(它的效果仅限于它的显式输入/输出),并且是一个method如果它在一个类的实例上运行(它可能携带)对实例造成不纯的副作用).
这里有关于这个主题的很好的讨论.请注意,根据接受的答案的定义,静态method实际上应该是一个函数,因为实例永远不会被隐式传递,并且它不能访问任何实例的成员.
虽然这是心灵,但是静态methods实际上不应该是函数吗?
根据他们的定义,他们不会对某一类的特定情况采取行动; 由于关系,他们只与班级"捆绑".我已经看到一些好看的网站将静态子程序称为"方法"(Oracle,Fredosaurus,ProgrammingSimplified),所以要么它们都忽略了术语,要么我错过了一些东西(我的猜测是后者) .
我想确保我使用正确的措辞.
任何人都能清楚这一点吗?
当我尝试在类的主体内使用静态方法,并使用内置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 = _stat_func() 
  TypeError: 'staticmethod' object is not callable
我理解为什么会发生这种情况(描述符绑定),并且可以通过_stat_func()在上次使用后手动转换为static方法来解决它,如下所示:
class Klass(object):
    def _stat_func():
        return 42
    _ANS = _stat_func()  # use the non-staticmethod version
    _stat_func = staticmethod(_stat_func) …如何在Kotlin中定义静态扩展方法?这甚至可能吗?我目前有一个扩展方法,如下所示.
public fun Uber.doMagic(context: Context) {
    // ...
}
可以在实例上调用上述扩展名.
uberInstance.doMagic(context) // Instance method
但是如何使它成为静态方法,如下所示.
Uber.doMagic(context)         // Static or class method
有一个简单的愚蠢问题困扰着我并在脑海中提出了几个论点.我想抛弃以下问题的所有疑虑.
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多个线程发送的?
我的问题涉及静态方法与实例方法的性能特征及其可伸缩性.假设在这种情况下,所有类定义都在一个程序集中,并且需要多个离散指针类型.
考虑:
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.
}
上述类表示辅助样式模式.
在实例类中,解析实例方法需要花费一些时间来与StaticClass相反.
我的问题是:
保持状态不是问题(不需要字段或属性),使用静态类总是更好吗?
如果有相当多的静态类定义(例如100,每个都有许多静态方法),与相同数量的实例类定义相比,这会对执行性能或内存消耗产生负面影响吗?
当调用同一实例类中的另一个方法时,实例解析是否仍然发生?例如,使用[this]关键字,例如this.DoOperation2("abc")来自DoOperation1同一实例.
用Java构建多语言应用程序.从R.string资源XML文件插入String值时出错:
public static final String TTT =  (String) getText(R.string.TTT);
这是错误消息:
错误:无法从Context类型对非静态方法getText(int)进行静态引用
这是怎么造成的,我该如何解决?
在我可以使用的非静态方法中this.GetType(),它将返回Type.如何Type在静态方法中获得相同的内容?当然,我不能只写,typeof(ThisTypeName)因为ThisTypeName只在运行时才知道.谢谢!
当该类不需要跟踪内部状态时,我倾向于将类中的所有方法声明为静态.例如,如果我需要将A转换为B并且不依赖于可能变化的某个内部状态C,则创建静态转换.如果有一个我希望能够调整的内部状态C,那么我添加一个构造函数来设置C并且不使用静态转换.
我阅读了各种建议(包括在StackOverflow上),不要过度使用静态方法,但我仍然无法理解上面的经验法则错误.
这是一种合理的方法吗?
static-methods ×10
java ×5
c# ×3
.net ×1
decorator ×1
generics ×1
il ×1
kotlin ×1
methods ×1
oop ×1
performance ×1
python ×1
static ×1
terminology ×1
types ×1