标签: instantiation

可以在Java中实例化静态嵌套类吗?

从Oracle的Java 教程中我发现了这个文本:

与类方法和变量一样,静态嵌套类与其外部类相关联.和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法 - 它只能通过对象引用来使用它们.

注意:静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样.实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包.

使用封闭的类名访问静态嵌套类:

OuterClass.StaticNestedClass

例如,要为静态嵌套类创建对象,请使用以下语法:

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

我认为不可能实例化一个静态类,所以我并不真正理解粗体句子.

你知道这意味着什么吗?

java static nested instantiation

24
推荐指数
4
解决办法
2万
查看次数

我可以使用类的方法而不实例化这个类吗?

我有一个有几个方法的类,这些方法中没有构造函数.

所以,我想知道是否可以在没有创建类实例的情况下调用类的方法.

例如,我可以这样做:

NameOfClass.doMethod(x1,x2,...,xn)
Run Code Online (Sandbox Code Playgroud)

总的来说,我不明白为什么它不可能.我只是调用一个函数来做某事(或返回一些值).如果可能,如果方法为类的私有变量设置值,将会发生什么.我怎样才能达到这个值?以同样的方式?

NameOfClass.nameOfVariable
Run Code Online (Sandbox Code Playgroud)

java oop methods class instantiation

23
推荐指数
4
解决办法
7万
查看次数

泛型和Class.forName

我想使用其名称创建指定类的实例.我的代码如下所示.

我收到编译器警告.我这样做是对的吗?甚至可以使用类的名称并获取该类型的实例,因为我认为编译器不知道该类型应该是什么方式?

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)

谢谢

java generics instantiation

22
推荐指数
1
解决办法
3万
查看次数

为什么没有new关键字可以实例化一个struct?

为什么我们没有被强制实例化一个结构,比如在使用类时?

.net c# struct instantiation

21
推荐指数
5
解决办法
1万
查看次数

按类型实例化C++ lambda

我想要一种从函数中制作仿函数的方法.现在我尝试通过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++ lambda instantiation c++11

21
推荐指数
4
解决办法
3142
查看次数

分析模板元程序编译时间

我正在开发一个具有大量编译时计算的C++项目.漫长的编译时间正在减慢我们的速度.我怎样才能找到模板元程序中最慢的部分,以便我可以优化它们?(当我们有慢运行时计算时,我有很多分析器可供选择,例如valgrind的callgrind工具.所以我尝试构建一个调试GCC并分析它编译我们的代码,但我没有从中学到太多东西.)

我使用GCC和Clang,但欢迎任何建议.

profile_templates在Boost的网站上找到了,但似乎记录很少,需要jam/bjam构建系统.如果您展示如何在非卡纸项目1上使用它,我会向您投票.https://svn.boost.org/svn/boost/sandbox/tools/profile_templates/似乎计算实例数,而计算所花费的时间将是理想的.

1 我们的项目使用CMake并且足够小,只需将模板分析用于模板分析就可以接受.

c++ profiling instantiation template-meta-programming

21
推荐指数
2
解决办法
2477
查看次数

PMD:避免在循环内实例化新对象

我对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规则).但到目前为止,我至少理解了他们背后的想法.我不明白这条规则背后的原因.有人可以帮助我吗?

java loops instantiation pmd

21
推荐指数
1
解决办法
2万
查看次数

在PowerShell中实例化chrome对象

我有一个PowerShell脚本在IE中运行得很好但是我需要在Chrome中使用它.$ ie = new-object -com"InternetExplorer.Application"适用于IE.如何实例化Chrome浏览器?

powershell google-chrome instantiation

21
推荐指数
1
解决办法
5万
查看次数

为什么Object.create()和new Object()会评估不同的原型?

为什么这两个实现的行为不同?在评估他们的原型时,究竟是什么让他们与众不同?

使用指定的原型创建对象:

   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

javascript prototype instantiation

21
推荐指数
2
解决办法
925
查看次数

在PHP中使用依赖注入编写Controller类

如何解决在PHP 中组成Controller类的问题,应该是:

  • 通过使用依赖注入可以轻松测试,
  • 为最终程序员提供共享对象
  • 提供加载新用户库的方法

向下看,使用依赖注入框架进行控制器实例化


问题是,派生的控制器可能使用程序员想要的任何资源(例如框架提供的).如何创建对共享资源(数据库,用户,存储,缓存,帮助程序),用户定义的类或其他库的统一访问?

优雅的解决方

我的问题有几种可能的解决方案,但两者看起来都不是优雅的

  • 尝试通过构造函数传递所有共享对象?(甚至可以使用10个占位符创建构造函数)
  • 创造吸气者,解决者?(臃肿的代码)$controller->setApplication($app)
  • 在共享资源上应用单身人士User::getInstance()要么Database::getInstance()
  • 使用Dependency Injection容器作为控制器内部对象共享的单例?
  • 提供一个全球应用程序单例作为工厂?(这个在php框架中看起来很常用,但它强烈反对DI原则和Demeter定律)

我明白,创建强耦合类是不鼓励和放逐:)但是我不知道这个范例如何适用于其他程序员(一个Controller类)的起点,他们应该能够访问所提供的共享资源到MVC架构.我相信,将控制器类分解成更小的类会以某种方式破坏MVC的实际意义.


依赖注入框架

DI Framework看起来是一个可行的选择.但问题仍然存在.类似Controller的类不在Application层中,而是在RequestHandler/Response层中.

该层应该如何实例化控制器?

  • 将DI喷油器送入这一层?
  • DI框架作为单身人士?
  • 将隔离的DI框架配置仅用于此层并创建单独的DI注入器实例?

php model-view-controller dependency-injection instantiation

20
推荐指数
1
解决办法
4653
查看次数