package combine.invokeTest;
public class InvokeTest {
public static BaseClass getClass(String className) throws ClassNotFoundException {
return (BaseClass) ClassFactory.newInstance1(className);
// return (BaseClass) ClassFactory.newInstance2(className);
}
public static void main(String[] args) throws InstantiationException,
IllegalAccessException, SecurityException {
try {
String className = "combine.invokeTest.SubClass" ;
BaseClass bClass = getClass(className) ;
bClass.f() ;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
class BaseClass {
BaseClass() {
System.out.println("BaseClass Construct!");
}
public void f() {
System.out.println("BaseClass! ");
}
}
class SubClass extends BaseClass {
SubClass() {
System.out.println("SubClass Construct!");
}
public void f() {
System.out.println("SubClass!");
}
}
package combine.invokeTest;
import java.lang.reflect.Constructor;
import org.apache.hadoop.conf.Configuration;
public class ClassFactory {
private static final Class<?>[] EMPTY_ARRAY = new Class[]{};
public static <T> T newInstance1(String classPath) {
T result;
try {
Class<?> policy = Class.forName(classPath);
result = (T) policy.newInstance(); //采用Class对象的newInstance
} catch (Exception e) {
throw new RuntimeException(e);
}
return result;
}
public static <T> T newInstance2( String classPath) {
T result;
try {
Class<?> theClass = Class.forName(classPath);
Constructor<T> meth = (Constructor<T>)theClass.getDeclaredConstructor(EMPTY_ARRAY);
meth.setAccessible(true);
result = meth.newInstance(); //采用Constructor对象的newInstance
} catch (Exception e) {
throw new RuntimeException(e);
}
return result;
}
}
上述代码中,String className也可以作为Conf从配置文件中读取,参考Hama中的反射工厂实现代码;
public class MessageManagerFactory {
public static final String MESSAGE_MANAGER_CLASS = "hama.messenger.class";
/**
* Returns a messenger via reflection based on what was configured.
*
* @param conf
* @return a messenger that was configured.
*/
@SuppressWarnings("unchecked")
public static <M extends Writable> MessageManager<M> getMessageManager(
Configuration conf) throws ClassNotFoundException {
return (MessageManager<M>) ReflectionUtils.newInstance(conf
.getClassByName(conf.get(MESSAGE_MANAGER_CLASS,
org.apache.hama.bsp.message.HamaMessageManagerImpl.class
.getCanonicalName())), conf);
}
}
进入
ReflectionUtils类,
public static <T> T newInstance(Class<T> theClass, Configuration conf) {
T result;
try {
Constructor<T> meth = (Constructor<T>) CONSTRUCTOR_CACHE.get(theClass);
if (meth == null) {
meth = theClass.getDeclaredConstructor(EMPTY_ARRAY);
meth.setAccessible(true);
CONSTRUCTOR_CACHE.put(theClass, meth);
}
result = meth.newInstance(); //使用java.lang.reflect.Constructor<T>创建的constructor创建实例
} catch (Exception e) {
throw new RuntimeException(e);
}
setConf(result, conf);
return result;
}
分享到:
相关推荐
1.Hama-0.6.0,里面含有安装版和源码两部分,与hadoop-1.0.3 结合使用,已在Linux(RHEL和Ubuntu)平台测试通过。 2. Hama是基于HDFS上的BSP模型实现。
分布式模式的Hama安装笔记,内容如下: 1.参考“hadoop安装.txt”,完成hadoop的安装。节点信息如下: 192.168.1.160 hadoop-1 192.168.1.161 hadoop-2 192.168.1.162 hadoop-3 2.添加环境变量 在/etc/profile...
汉密顿焦虑量表(HAMA) 填表注意事项:在最适合病人情况中划一个钩“√”,所有项目采用0~4分的5级评分法,各级的标准为:(0)为无症状;(1)轻;(2)中等;(3)重;(4)极重。 无症状 轻 中等 重 极重 1、...
基于Hama并行计算框架的多层级作业调度算法的研究及实现 胡月胜
refined.zip,scala的简单求精类型scala的简单求精类型
HAMA焦虑量表.doc
HAMA抑郁量表.pdf
2021年HAMA焦虑量表
汉密尔顿焦虑量表HAMA项打印版.pdf
汉密顿焦虑量表(HAMA)(Hamilton Anxiety Scale.doc
汉密尔顿焦虑量表HAMA(14项打印版)-2页.pdf
基于Hama并行计算框架的多层级作业调度算法的研究及实现.pdf
综合护理干预对无肝素血液透析患者HAMA凝血程度及不良反应率的影响分析
哈马珠 Hama Beads 编辑器
将Spark和Hama两种分布式并行计算模型整合到Hadoop生态系统中,分别用于支持内存计算和整体同步并行计算。将Hadoop集群构建成master-slave对等结构,解决全局同步和局部同步问题。最后,在Hadoop集群上,利用有限...
Arduino库,用于从Ventus W174 / W132(已测试),Auriol H13726,Hama EWS 1500,Meteoscan W155 / W160读取天气数据 此处描述了气象站的传输协议: : 可以通过接收器模块RXB6 / MX-RM-5V进行通信,也可以直接...
赠送jar包:hppc-0.7.1.jar; 赠送原API文档:hppc-0.7.1-javadoc.jar; 赠送源代码:hppc-0.7.1-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。