当没有实例字段或实例方法或调用方法以获得类的实例时,私有构造函数可用于阻止创建类实例,谁知道这话含

当没有实例字段或实例方法或调用方法以获得类的实例时,私有构造函数可用于阻止创建类实例,谁知道这话含,第1张

说的是设计模式中的singleton(单例模式)吗

单例模式的要点

显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例(即私有构造方法,并自己调用);三是它必须自行向整个系统提供这个实例(即有返回此类唯一实例的公共方法)。

本文主要阐述Objective-C如何通过runtime反射获取方法并调用

属性和变量的反射遍历可以参考 >

TgetClass()或者Tclass都是非法的,因为T是泛型变量。

由于一个类的类型是什么是在编译期处理的,故不能在运行时直接在Base里得到T的实际类型。

有一种变通的实现方式:

import javalangreflectArray;

import javalangreflectParameterizedType;

import javalangreflectType;

public class Generic extends Base<String> {

public static void main(String[] args) {

Generic c = new Generic();

Systemoutprintln(carray);

}

Object array ;

public Generic() {

array = ArraynewInstance(getGenericType(0), 100);

}

}

class Base<T> {

public Class getGenericType(int index) {

Type genType = getClass()getGenericSuperclass();

if (!(genType instanceof ParameterizedType)) {

return Objectclass;

}

Type[] params = ((ParameterizedType) genType)getActualTypeArguments();

if (index >= paramslength || index < 0) {

throw new RuntimeException("Index outof bounds");

}

if (!(params[index] instanceof Class)) {

return Objectclass;

}

return (Class) params[index];

}

}

其中Base<T>是泛型类,在父类中声明getGenericType,子类继承具体的Base<String>,那么在子类中就可以通过getGenericType(0)获取到String的class

以上就是关于当没有实例字段或实例方法或调用方法以获得类的实例时,私有构造函数可用于阻止创建类实例,谁知道这话含全部的内容,包括:当没有实例字段或实例方法或调用方法以获得类的实例时,私有构造函数可用于阻止创建类实例,谁知道这话含、OC通过runtime反射获取所有实例方法和类对象方法(静态方法)、如何获得java 泛型类中T的实例等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9364719.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存