从Oracle的Java 教程中我发现了这个文本:
与类方法和变量一样,静态嵌套类与其外部类相关联.和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法 - 它只能通过对象引用来使用它们.
注意:静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样.实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包.
使用封闭的类名访问静态嵌套类:
OuterClass.StaticNestedClass
例如,要为静态嵌套类创建对象,请使用以下语法:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
我认为不可能实例化一个静态类,所以我并不真正理解粗体句子.
你知道这意味着什么吗?
我有一个有几个方法的类,这些方法中没有构造函数.
所以,我想知道是否可以在没有创建类实例的情况下调用类的方法.
例如,我可以这样做:
NameOfClass.doMethod(x1,x2,...,xn)
Run Code Online (Sandbox Code Playgroud)
总的来说,我不明白为什么它不可能.我只是调用一个函数来做某事(或返回一些值).如果可能,如果方法为类的私有变量设置值,将会发生什么.我怎样才能达到这个值?以同样的方式?
NameOfClass.nameOfVariable
Run Code Online (Sandbox Code Playgroud) 我想使用其名称创建指定类的实例.我的代码如下所示.
我收到编译器警告.我这样做是对的吗?甚至可以使用类的名称并获取该类型的实例,因为我认为编译器不知道该类型应该是什么方式?
public static <T> T create(final String className) {
try {
final Class<?> clazz = Class.forName(className);
//WARNING: Type safety: Unchecked cast from capture#2-of ? to T
return (T) create(clazz);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static <T> T create(final Class<T> classToCreate) {
final Constructor<T> constructor;
try {
constructor = classToCreate.getDeclaredConstructor();
final T result = constructor.newInstance();
return result;
}
catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
为什么我们没有被强制实例化一个结构,比如在使用类时?
我想要一种从函数中制作仿函数的方法.现在我尝试通过lambda函数包装函数调用并稍后实例化它.但编译器说比删除lambda构造函数.那么有什么方法可以编译这段代码吗?或者也许是另一种方式?
#include <iostream>
void func()
{
std::cout << "Hello";
}
auto t = []{ func(); };
typedef decltype(t) functor_type;
template <class F>
void functor_caller()
{
F f;
f();
}
int main()
{
functor_caller<functor_type>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在我得到这样的编译器错误:
error: use of deleted function '<lambda()>::<lambda>()'
error: a lambda closure type has a deleted default constructor
Run Code Online (Sandbox Code Playgroud)
在我看来,唯一的方法是使用宏:
#define WRAP_FUNC(f) \
struct f##_functor \
{ \
template <class... Args > \
auto operator()(Args ... args) ->decltype(f(args...)) \
{ \
return f(args...); \
} \ …Run Code Online (Sandbox Code Playgroud) 我正在开发一个具有大量编译时计算的C++项目.漫长的编译时间正在减慢我们的速度.我怎样才能找到模板元程序中最慢的部分,以便我可以优化它们?(当我们有慢运行时计算时,我有很多分析器可供选择,例如valgrind的callgrind工具.所以我尝试构建一个调试GCC并分析它编译我们的代码,但我没有从中学到太多东西.)
我使用GCC和Clang,但欢迎任何建议.
我profile_templates在Boost的网站上找到了,但似乎记录很少,需要jam/bjam构建系统.如果您展示如何在非卡纸项目1上使用它,我会向您投票.https://svn.boost.org/svn/boost/sandbox/tools/profile_templates/似乎计算实例数,而计算所花费的时间将是理想的.
1 我们的项目使用CMake并且足够小,只需将模板分析用于模板分析就可以接受.
我对PMD规则有疑问Avoid instantiating new objects inside loops.这是一些示例代码:
import java.awt.Dimension;
public class PMDDemo {
public static void main(final String[] args) {
final Dimension[] arr = new Dimension[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Dimension(i, i); // rule violation here
}
}
}
Run Code Online (Sandbox Code Playgroud)
PMD在代码中的标记位置给出了上述规则违规.我怎么创造ň没有环内创建这些类的实例?
我知道PMD的一些规则是有争议的(比如onlyOneExit规则).但到目前为止,我至少理解了他们背后的想法.我不明白这条规则背后的原因.有人可以帮助我吗?
我有一个PowerShell脚本在IE中运行得很好但是我需要在Chrome中使用它.$ ie = new-object -com"InternetExplorer.Application"适用于IE.如何实例化Chrome浏览器?
为什么这两个实现的行为不同?在评估他们的原型时,究竟是什么让他们与众不同?
使用指定的原型创建对象:
function Foo() {}
// creates an object with a specified prototype
var bar = Object.create(Foo);
console.log(Object.getPrototypeOf(bar)); // returns: function Foo(){}
console.log(Foo.isPrototypeOf(bar)); // returns: true
Run Code Online (Sandbox Code Playgroud)
使用构造方法创建对象:
function Foo() {}
// creates an object with the constructor method
var bar = new Foo();
console.log(Object.getPrototypeOf(bar)); // returns: Foo {}
console.log(Foo.isPrototypeOf(bar)); // returns: false
Run Code Online (Sandbox Code Playgroud)
另外,为什么第二个实现返回Foo {}和false?
如何解决在PHP 中组成Controller类的问题,应该是:
向下看,使用依赖注入框架进行控制器实例化
问题是,派生的控制器可能使用程序员想要的任何资源(例如框架提供的).如何创建对共享资源(数据库,用户,存储,缓存,帮助程序),用户定义的类或其他库的统一访问?
我的问题有几种可能的解决方案,但两者看起来都不是优雅的
$controller->setApplication($app)User::getInstance()要么Database::getInstance()我明白,创建强耦合类是不鼓励和放逐:)但是我不知道这个范例如何适用于其他程序员(一个Controller类)的起点,他们应该能够访问所提供的共享资源到MVC架构.我相信,将控制器类分解成更小的类会以某种方式破坏MVC的实际意义.
DI Framework看起来是一个可行的选择.但问题仍然存在.类似Controller的类不在Application层中,而是在RequestHandler/Response层中.
该层应该如何实例化控制器?
php model-view-controller dependency-injection instantiation