要是什么条件都没有的话 应该做不了你这种方式 返回的类型应该是Object (Class.forName(className)).newInstance();这句话是调用的构造方法
破坏了singleton模式BaseClass theClass = (BaseClass)(Class.forName(className)).newInstance();
你这样编码 返回的只能是BaseClass或者子类 你这个方法问题很大有个方法不知道能不能对你有用一般singleton模式都有特定的方法返回自己的实例 如 instance
可以用以下的方法判断 是不是有这个方法
java.lang.reflect.Method mothed = SingleClass.class.getMethod("instance ", null);
如果没有 这句话会抛异常
java.lang.NoSuchMethodException
抓住它 返回这个 (Class.forName(className)).newInstance(); 对象如果有这个方法 就是singleton 调用这个方法
mothed.invoke(singleClass, null);
得到唯一的实例 返回它
破坏了singleton模式BaseClass theClass = (BaseClass)(Class.forName(className)).newInstance();
你这样编码 返回的只能是BaseClass或者子类 你这个方法问题很大有个方法不知道能不能对你有用一般singleton模式都有特定的方法返回自己的实例 如 instance
可以用以下的方法判断 是不是有这个方法
java.lang.reflect.Method mothed = SingleClass.class.getMethod("instance ", null);
如果没有 这句话会抛异常
java.lang.NoSuchMethodException
抓住它 返回这个 (Class.forName(className)).newInstance(); 对象如果有这个方法 就是singleton 调用这个方法
mothed.invoke(singleClass, null);
得到唯一的实例 返回它
解决方案 »
- 关于jdk6中对脚本引擎的支持
- 在jsp页面上转向action里的参数,在别的.java中怎样取到该参数
- 求助,torque问题
- 请问 两个java工程之间如何传递参数?
- websphere数据源配置文件在哪里?
- 大家好,请教关于JBOSS 部署发布的问题
- 要取List里面的BEAN对象属性值,但是该对象所属BEAN类要在运行期才可以知道,该怎么实现呢?
- 急!异常:java.net.SocketException: Connection reset by peer: socket write error是怎么回事???
- 如果一个表生成视图是需要将某些字段另命名, 怎样绑定数据
- 我在很多java书或ejb书里面都见到“回调”这个词,一时不太明白?
- weblogic配置jms
- 请问corba里怎么实现:返回服务器上所有Object的IOR(对象引用)集合(100分相送)!!!
String className = theContainer.get(funcId);
//className就是我要实例化的singleton模式类的完整类名(包括包名)
//因为是用工厂模式创建类的实例,所以事先不能知道类名,所以这个XXX就不知道怎么替换了……
java.lang.reflect.Method mothed = XXX.class.getMethod("instance ", null);
……
}
呵呵得到对象实例对应的的类 调用方法 getClass() 就可以了
好像还可以import java.lang.reflect.*;class Product {}
class Product1 extends Product {
static Product1 product = new Product1();
public static Product1 getInstance() {
System.out.println("singleton");
return product;
}
}
class Product2 extends Product {}public class TestFactory { public TestFactory() {
} public static Product factory(String val) {
Product product = null;
try {
product = (Product) (Class.forName(val)).newInstance();
try {
Method mothed = (Method)product.getClass().getMethod("getInstance", null);
product = (Product)mothed.invoke(product, null);
} catch (java.lang.NoSuchMethodException ex1) {
return product;
} catch (java.lang.SecurityException ex2) {
ex2.printStackTrace();
} }
catch (Exception e) {
e.printStackTrace();
}
return product;
}
public static void main(String[] args) {
TestFactory.factory("Product1");
TestFactory.factory("Product2");
}}