javaApplication.java

 
 
//在泛型为Integer的ArrayList中存放一个String类型的对象
package net . xsoftlab . baike ;
import java.lang.reflect.Method ;
import java.util.ArrayList ;
public class TestReflect {
public static void main ( String [] args ) throws Exception {
ArrayList < Integer > list = new ArrayList < Integer >();
Method method = list . getClass (). getMethod ( "add" , Object . class );
method . invoke ( list , "Java反射机制实例。" );
System . out . println ( list . get ( 0 ));
}
}

//通过反射取得并修改数组的信息
package net . xsoftlab . baike ;
import java.lang.reflect.Array ;
public class TestReflect {
public static void main ( String [] args ) throws Exception {
int [] temp = { 1 , 2 , 3 , 4 , 5 };
Class <?> demo = temp . getClass (). getComponentType ();
System . out . println ( "数组类型: " + demo . getName ());
System . out . println ( "数组长度 " + Array . getLength ( temp ));
System . out . println ( "数组的第一个元素: " + Array . get ( temp , 0 ));
Array . set ( temp , 0 , 100 );
System . out . println ( "修改之后数组第一个元素为: " + Array . get ( temp , 0 ));
}
}

//通过反射机制修改数组的大小
package net . xsoftlab . baike ;
import java.lang.reflect.Array ;
public class TestReflect {
public static void main ( String [] args ) throws Exception {
int [] temp = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
int [] newTemp = ( int []) arrayInc ( temp , 15 );
print ( newTemp );
String [] atr = { "a" , "b" , "c" };
String [] str1 = ( String []) arrayInc ( atr , 8 );
print ( str1 );
}
// 修改数组大小
public static Object arrayInc ( Object obj , int len ) {
Class <?> arr = obj . getClass (). getComponentType ();
Object newArr = Array . newInstance ( arr , len );
int co = Array . getLength ( obj );
System . arraycopy ( obj , 0 , newArr , 0 , co );
return newArr ;
}
// 打印
public static void print ( Object obj ) {
Class <?> c = obj . getClass ();
if (! c . isArray ()) {
return ;
}
System . out . println ( "数组长度为: " + Array . getLength ( obj ));
for ( int i = 0 ; i < Array . getLength ( obj ); i ++) {
System . out . print ( Array . get ( obj , i ) + " " );
}
System . out . println ();
}
}

//将反射机制应用于工厂模式
package net . xsoftlab . baike ;
interface fruit {
public abstract void eat ();
}
class Apple implements fruit {
public void eat () {
System . out . println ( "Apple" );
}
}
class Orange implements fruit {
public void eat () {
System . out . println ( "Orange" );
}
}
class Factory {
public static fruit getInstance ( String ClassName ) {
fruit f = null ;
try {
f = ( fruit ) Class . forName ( ClassName ). newInstance ();
} catch ( Exception e ) {
e . printStackTrace ();
}
return f ;
}
}
/**
* 对于普通的工厂模式当我们在添加一个子类的时候,就需要对应的修改工厂类。 当我们添加很多的子类的时候,会很麻烦。
* Java 工厂模式可以参考
* http://baike.xsoftlab.net/view/java-factory-pattern
*
* 现在我们利用反射机制实现工厂模式,可以在不修改工厂类的情况下添加任意多个子类。
*
* 但是有一点仍然很麻烦,就是需要知道完整的包名和类名,这里可以使用properties配置文件来完成。
*
* java 读取 properties 配置文件 的方法可以参考
* http://baike.xsoftlab.net/view/java-read-the-properties-configuration-file
*
* @author xsoftlab.net
*/
public class TestReflect {
public static void main ( String [] args ) throws Exception {
fruit f = Factory . getInstance ( "net.xsoftlab.baike.Apple" );
if ( f != null ) {
f . eat ();
}
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值