标签: instantiation

在Java中使用默认值创建Annotation实例

如何创建以下注释的实例(所有字段都设置为其默认值).

    @Retention( RetentionPolicy.RUNTIME )
    public @interface Settings {
            String a() default "AAA";
            String b() default "BBB";
            String c() default "CCC";
    }
Run Code Online (Sandbox Code Playgroud)

我试过了new Settings(),但这似乎不起作用......

java annotations instantiation

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

无法实例化地图......为什么不呢?

Map<String, ArrayList<Pair<String, Integer>>> k = new  Map<String, ArrayList<Pair<String, Integer>>>();
Run Code Online (Sandbox Code Playgroud)

这行是在我的代码中.我想实例化一个包含String的Map,然后是一对字符串和整数的ArrayList.

Pair是我写的一个类,在我的包中.

我得到"无法实例化类型Map >>();

为什么不?对我来说似乎合理......

java instantiation

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

如何在C#中使用私有构造函数实例化对象?

我绝对记得在某个地方看到一个使用反射或其他东西这样做的例子.这与SqlParameterCollection用户无法创造的事情有关(如果我没有记错的话).不幸的是再也找不到了.

有人可以在这里分享这个技巧吗?并不是说我认为它是一种有效的开发方法,我只是对这样做的可能性非常感兴趣.

c# constructor instantiation private-constructor

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

PHP - 使用大量参数和默认值初始化对象的最佳方法

我正在设计一个类,它定义了一个高度复杂的对象,其中包含大量可选参数(50+),其中许多参数都有默认值(例如:) $type = 'foo'; $width = '300'; $interactive = false;.我正在尝试确定设置构造函数和实例/类变量的最佳方法,以便能够:

  • 让这个课程变得简单易用
  • 使类自动记录变得容易(即:使用phpDocumentor)
  • 优雅地编码

鉴于上述情况,我不想让构造函数传递大量的论据.我将传递一个包含初始化值的哈希,例如:$foo = new Foo(array('type'=>'bar', 'width'=>300, 'interactive'=>false));

在编写课程方面,我仍然觉得我宁愿......

class Foo {
    private $_type = 'default_type';
    private $_width = 100;
    private $_interactive = true;

    ...
}
Run Code Online (Sandbox Code Playgroud)

...因为我相信这将有助于文档生成(您可以获得类属性的列表,这可以让API用户知道他们必须使用的'选项'),并且"感觉"就像正确的方法一样它.

但是你遇到了将构造函数中的传入参数映射到类变量的问题,并且在没有利用符号表的情况下,你进入了一种"暴力"的方法,这让我无法实现目的(尽管我对其他人开放)意见).例如:

function __construct($args){
    if(isset($args['type'])) $_type = $args['type']; // yuck!
}
Run Code Online (Sandbox Code Playgroud)

我考虑过创建一个单独的类变量,它本身就是一个关联数组.初始化这将非常简单,例如:

private $_instance_params = array(
    'type' => 'default_type',
    'width' => 100,
    'interactive' => true
);

function __construct($args){
    foreach($args as $key=>$value){
        $_instance_params[$key] = $value;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎我没有利用私有类变量等本机功能,而且感觉文档生成不适用于这种方法.

感谢您阅读这篇文章; 我可能在这里问了很多,但我是PHP的新手,我真的只是寻找这种惯用/优雅的方式.你最好的做法是什么?


附录(有关此特定班级的详细信息) …

php constructor idioms class instantiation

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

System.Activator.CreateInstance(T)的性能问题是否足以阻止我们随便使用它?

System.Activator.CreateInstance(T)方法是否有性能问题(因为我怀疑它使用反射)大到足以阻止我们随便使用它?

.net performance instantiation activator

30
推荐指数
4
解决办法
1万
查看次数

确定类型是否为静态

假设我有一个Type电话type.

我想确定我是否可以使用我的类型执行此操作(实际上不对每种类型执行此操作):

如果type是,System.Windows.Point那么我可以这样做:

Point point1 = new Point();
Run Code Online (Sandbox Code Playgroud)

但是,如果type是,System.Environment那么这将不会飞:

Environment environment1 = new Environment(); //wrong
Run Code Online (Sandbox Code Playgroud)

因此,如果我遍历程序集中的每个可见类型,如何跳过将无法创建第二个实例的所有类型?我对反思很陌生,所以我的术语还不是很好.希望我在这里尝试做的很清楚.

.net c# reflection types instantiation

29
推荐指数
3
解决办法
9368
查看次数

为什么私有成员变量可以被类实例更改?

class TestClass
{
    private string _privateString = "hello";
    void ChangeData()
    {
        TestClass otherTestClass = new TestClass();
        otherTestClass._privateString = "world";
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码在C#中编译,并且在PHP中等效,但有人可以解释为什么otherTestClass._privateString可以在这里更改?

我认为类的实例在任何情况下都不应该能够更改私有成员变量,并且尝试访问otherTestClass._privateString会因"保护级别"错误而导致"无法访问".

但事实并非如此,那么为什么在自己的类中实例化一个对象可以让你访问私有成员呢?如果它,这不会破坏封装到一定程度?还是我错过了一些明显的东西?

  • (我不是在问上面的班级设计是不是很好的做法,只是想知道它背后的理论.)

Edit - Thanks for the answers and comments. To clarify, I'm also interested in knowing if being able to do this is regarded as a positive feature, or if it's a necessary tradeoff for better compile-time checking/code clarity/because most other languages do it that way or whatever. It seems to me …

c# oop encapsulation instantiation private-members

27
推荐指数
2
解决办法
2244
查看次数

Scala 2.10,它对JSON库和案例类验证/创建的影响

在Scala 2.10中,显然我们正在改进反思.

这将如何影响lift-json,jerkson,sjson和朋友?此外,我们能否在不久的将来期望内置的JSON语言功能和Scala中的Groovy优秀GSON?

我问的原因是我非常喜欢这样做:

case class Foo(a: String, b: Int, bar: Bar)
case class Bar(c: Int)
val foo = Foo("hey", 10, Bar(23))
val json = foo.toJson
Run Code Online (Sandbox Code Playgroud)

没有环跳(即样板准备工作),即使是任意复杂的对象图.也许我问得太多了,但总能做到梦想.请打破我的2.10梦想,或者通过备受期待的Scala版本打开新的途径.

此外,关于案例类,似乎验证/创建,scalaz验证是首选的武器.它看起来非常精彩,可以作为对象创建的安全代理或作为错误收集器.然而,作为一个Scewbie,我发现scalaz有点挑战性,并且尽管它有明显的力量,我仍然抵抗F-ing黑暗面;-)

无论如何,这里的重点是,2.10反射我们应该能够在运行时绑定从表单帖子到案例类的属性的字段,并仅基于属性类型执行基本验证(即不会指定单独的验证逻辑,指定属性foo必须是一个String,因为它的类型已在case类中定义,我们现在可以正确地反映它

那么,勇敢的新世界到来,还是现有的工具是可预见的未来的支柱?

reflection json scala instantiation coercion

25
推荐指数
2
解决办法
5397
查看次数

如何在Objective-C中从字符串中实例化类的对象?

我有一个字符串,它的值是必须实例化的类[MyClass]的名称,而MyClass有一个名为

 -(void)FunctionInClass;
Run Code Online (Sandbox Code Playgroud)

我正在使用名为NSClassFromString的方法来实例化MyClass.我想知道

1) what does NSClassFromString return?? 
2) what is id? 
3) How to call method -(void)FunctioninClass which is in MyClass using the instance.
Run Code Online (Sandbox Code Playgroud)

我该怎么办,我是在Objective-C for iPhone app中做的?

objective-c instantiation

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

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

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

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

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

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

OuterClass.StaticNestedClass

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

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

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

你知道这意味着什么吗?

java static nested instantiation

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