首先让我们建立这个.
我有
public abstract class Foo
{
public static void StaticMethod()
{
}
}
public class Bar : Foo
{
}
Run Code Online (Sandbox Code Playgroud)
打电话有效吗?
Bar.StaticMethod();
Run Code Online (Sandbox Code Playgroud)
???
如果是这样,让我们展开前面的例子:
public abstract class Foo
{
public static void StaticMethod()
{
}
public abstract void VirtualMethod();
}
public class Bar : Foo
{
public override void VirtualMethod()
{
Trace.WriteLine("virtual from static!!!!");
}
}
Run Code Online (Sandbox Code Playgroud)
我应该如何在基类中构造StaticMethod,以便从派生类中使用VirtualMethod?我今天的咖啡因似乎太少/太多了,这里没有任何想法.
嗯,我知道我不能从静态方法调用实例方法.所以问题就出现了:
我可以从基类的静态方法创建派生类的实例.使用类似的东西:
public static void StaticMethod()
{
derived d=new derived();
d.VirtualMethod();
}
Run Code Online (Sandbox Code Playgroud)
为了说明的目的,我发明了新的关键字.
顺便说一句,我会赞成基于非反思的解决方案!
我试图将魔术方法装饰__getitem__成课堂上的类方法.这是我尝试的样本.我不介意使用classmethod或staticmethod装饰,但我不太清楚如何做到这一点.这是我尝试过的:
import ConfigParser
class Settings(object):
_env = None
_config = None
def __init__(self, env='dev'):
_env = env
# find the file
filePath = "C:\\temp\\app.config"
#load the file
_config = ConfigParser.ConfigParser()
_config.read(filePath)
@classmethod
def __getitem__(cls, key):
return cls._config.get(cls._env, key)
@classmethod
def loadEnv(cls, env):
cls._env = env
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试调用时,Settings['database']我收到以下错误.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected Array[Type], got str
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么.此外,有人可以建议是否有更好的方法来做到这一点?我甚至尝试过使用MetaClasses,但收效甚微(因为我不太了解python).
class Meta(type):
def __getitem__(*args):
return type.__getitem__(*args)
class Settings(object):
__metaclass__ = Meta
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我想在某些命名空间中从某个类执行静态方法,但是我将它用作方法参数时遇到问题.
例:
让我们说有一个类:
namespace ExampleNamespace {
public ref class A
{
public:
static int MethodA();
};
}
Run Code Online (Sandbox Code Playgroud)
我想在其他命名空间中使用MethodA作为另一个方法参数:
方法b(方法a());
我能让它发挥作用的唯一方法就是这样写:
ExampleNamespace::A^ a;
MethodB(a->MethodA());
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有'a'声明的情况下编写它?就像是
MethodB(ExampleNamespace::A->MethodA())
Run Code Online (Sandbox Code Playgroud)
不会工作......
先感谢您.
我收到以下错误: 类不是客观的c类名
- (void)CallStaticMethodForClass :(Class *)myClass
{
[myClass doSomething];
}
+ (void)doSomething
{
//
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试编译此代码,并且g ++一直告诉我"TimeFinder"尚未声明
头文件
#ifndef _TIMEFINDER_H
#define _TIMEFINDER_H
#include <vector>
#include "timefinder.cpp"
using namespace std;
class TimeFinder
{
public:
static vector<int> time_from_name(string filename);
static int calc_seconds (vector <int> time);
};
#endif
Run Code Online (Sandbox Code Playgroud)
CPP文件
#include "timefinder.h"
using namespace std;
vector<int> TimeFinder::time_from_name(string filename)//Line 14
{
//Method Body
}
int TimeFinder::calc_seconds (vector <int> time1)//Line 37
{
//Method Body
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我在网上查看了其他示例,我的代码似乎与其他人的代码相匹配......
编辑:确切的错误消息是
timefinder.cpp:14:错误:'TimeFinder'尚未声明
timefinder.cpp:37:错误:'TimeFinder'尚未声明
编辑2:对不起,我对此并不擅长,但我要感谢大家的建议.希望我的代码质量会因为它们而开始提高.
我一直在学习AS3中的封装,并使用get/set函数来创建(或看起来)只读的变量.我可以使用实例变量,但不能使用静态变量.我发现了这一点,这似乎表明可以在静态属性上使用get/set函数,但编译器一直告诉我我有重复的函数声明.这基本上就是我正在使用的:
package {
public class Foo {
protected static var bar:int = 0;
public static function get bar():int {return bar;}
}
}
Run Code Online (Sandbox Code Playgroud) 我需要在实用程序类中添加一个方法,其中包含一些静态方法,这些方法从JSON字符串中解析事物并返回一组数据.
问题是这些东西有各种各样的子类型,所以我创建了这个方法:
public static <E extends Thing> E[] parseThingsFromJSON(String body) {
return parser.fromJson(body, E[].class);
}
Run Code Online (Sandbox Code Playgroud)
调用者如何告诉这个方法是什么E?或者有更好的方法吗?
我最近在与JUnit和Mockito合作开发TDD.出于某种方法,我正在使用Util类(在项目上下文中具有方法的实用程序类).我面临的问题是如何在Mockito中模拟这些类.我无法在Mockito中找到关于静态方法的实现.有人建议在Mockito上使用PowerMock,但不会取代我的JunitMockitoRunner吗?
我使用静态函数的方式是:
public void doSomething(int x){
//Some code
Y y = Util.someStaticMethod(x);
//Some more code
}
Run Code Online (Sandbox Code Playgroud)
编辑:我也读到某处使用静态方法是代码气味,是一个糟糕的设计的标志.那么我应该如何重构设计以及我将获得哪些优势呢?
我有一个方法如下:
public static void method() {
int i = 0;
i = i + 1;
}
Run Code Online (Sandbox Code Playgroud)
我在静态方法中有一个int变量.并且该方法由几个线程访问.
我的问题是:
i变量是否符合竞争条件?我有几个self在其中使用的实例方法,但只在几个地方使用.
所以我可以直接从我使用参数调用这些方法的位置传递这些值,并将方法创建为staticmethod.这会消耗更少的内存吗?
static-methods ×10
java ×3
python ×2
static ×2
c# ×1
c++ ×1
c++-cli ×1
class ×1
decorator ×1
g++ ×1
generics ×1
inheritance ×1
junit ×1
memory ×1
mockito ×1
namespaces ×1
objective-c ×1
python-3.x ×1