黑马程序员技术交流社区

标题: 这个反射的问题怎么解决? [打印本页]

作者: 思维    时间: 2014-8-6 12:47
标题: 这个反射的问题怎么解决?
本帖最后由 思维 于 2014-8-6 17:20 编辑

今天写了一个关于反射的小程序!实现一个简单的框架功能!一直无法编译通过!谁知道哪里出错了啊?
config.properties内容为className=java.util.ArrayList。上代码:
  1. import java.util.*;
  2. import java.io.*;
  3. class ReflectPoint{
  4.         private int x;
  5.         public int y;
  6.         public ReflectPoint(int x,int y){
  7.                 this.x=x;
  8.                 this.y=y;
  9.         }
  10. }
  11. class ReflectTest1{
  12.         public static void main(String[] args)throws Exception{
  13.                 InputStream ips=new FileInputStream("config.properties");
  14.                 Properties props=new Properties();
  15.                 props.load(ips);
  16.                 ips.close();        //释放对象关联的系统资源
  17.                 String className=props.getProperty("className");
  18.                 Collection collections=(Collection)Class.forName(className).getInstance();
  19.                 //Collection collection=new HashSet();
  20.                 ReflectPoint pt1=new ReflectPoint(3,3);
  21.                 ReflectPoint pt2=new ReflectPoint(5,5);
  22.                 ReflectPoint pt3=new ReflectPoint(3,3);
  23.                 collections.add(pt1);
  24.                 collections.add(pt2);
  25.                 collections.add(pt3);
  26.                 collections.add(pt1);
  27.                 System.out.println(collections.size());
  28.         }
  29. }
复制代码

捕获.JPG (69.69 KB, 下载次数: 17)

捕获.JPG

作者: 思维    时间: 2014-8-6 12:51
根本看不懂这个错误提示是什么意思!懂得大神顺解释是下!
作者: 裤裆里的温柔、    时间: 2014-8-6 15:03
Collection collections=(Collection)Class.forName(className).getInstance();你得到ArrayList的接口,没有实例化子类对象就强制转换为Collection当然是不行的
作者: 思维    时间: 2014-8-6 15:19
裤裆里的温柔、 发表于 2014-8-6 15:03
Collection collections=(Collection)Class.forName(className).getInstance();你得到ArrayList的接口,没 ...

该怎么解决啊?
作者: fantacyleo    时间: 2014-8-6 15:22
思维 发表于 2014-8-6 12:51
根本看不懂这个错误提示是什么意思!懂得大神顺解释是下!

Class类哪里有getInstance这个方法,应该是newInstance
作者: cheye0207    时间: 2014-8-6 15:24
InputStream ips=new FileInputStream("config.properties"); 这里用FileInputStream对应的应该是绝对路径
Class.forName(className).getInstance();这里拿到字节码后应该是新建对象newInstance

作者: 裤裆里的温柔、    时间: 2014-8-6 17:17
思维 发表于 2014-8-6 15:19
该怎么解决啊?

getInstance()换成newInstance()
作者: 思维    时间: 2014-8-6 17:19
裤裆里的温柔、 发表于 2014-8-6 17:17
getInstance()换成newInstance()

换成newInstance( )可以!好像又遇到了泛型问题!
作者: 裤裆里的温柔、    时间: 2014-8-6 17:22
思维 发表于 2014-8-6 17:19
换成newInstance( )可以!好像又遇到了泛型问题!

e ,代码贴上来看看
作者: 思维    时间: 2014-8-6 18:03
裤裆里的温柔、 发表于 2014-8-6 17:22
e ,代码贴上来看看

图片的倒数第二行和倒数第三行的提示!那个是泛型的问题吧!
作者: Bule丶    时间: 2014-8-6 18:16
传入进去的是Collection的子类,如果传入Collection好像会报错
作者: 黑马学前班    时间: 2014-8-6 18:35
木看出来哪里错了  哎 我也是菜鸟         
作者: 暗夜星辰    时间: 2014-8-6 18:53
本帖最后由 暗夜星辰 于 2014-8-6 18:58 编辑
  1. import java.io.FileInputStream;
  2. import java.util.Collection;
  3. import java.util.HashSet;
  4. import java.util.Properties;


  5. public class RefelctTest {
  6.         public static void main(String[] args) throws Exception
  7.         {
  8.                 FileInputStream fis = new FileInputStream("config.properties");
  9.                 Properties prop = new Properties();
  10.                 prop.load(fis);
  11.                 fis.close();
  12.                 String className = prop.getProperty("className");
  13.                 Collection coll = (Collection)Class.forName(className).newInstance();
  14.                
  15.                
  16.                
  17. //                Collection coll = new HashSet();
  18.                
  19.                 RefelctPoint pt1 = new RefelctPoint(3,3);
  20.                 RefelctPoint pt2 = new RefelctPoint(4,4);
  21.                 RefelctPoint pt3 = new RefelctPoint(3,3);
  22.                
  23.                 coll.add(pt1);
  24.                 coll.add(pt2);
  25.                 coll.add(pt3);
  26.                 coll.add(pt1);
  27.         //        coll.add(pt3);
  28.         //        pt1.y = 7;
  29.                 //coll.remove(pt1);
  30.                 System.out.println(coll.size());
  31.                
  32.         }
  33. }
复制代码
Collection coll = (Collection)Class.forName(className).newInstance();这句话的问题,之前看错了,不好意思。


作者: 裤裆里的温柔、    时间: 2014-8-6 21:12
思维 发表于 2014-8-6 18:03
图片的倒数第二行和倒数第三行的提示!那个是泛型的问题吧!

那个可以不用管,只是个提示,用了1.5及以上的JDK没加泛型就报这个提示,加了泛型就没咯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2