A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 思维 高级黑马   /  2014-8-6 12:47  /  1059 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 思维 于 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

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

14 个回复

倒序浏览
根本看不懂这个错误提示是什么意思!懂得大神顺解释是下!
回复 使用道具 举报
Collection collections=(Collection)Class.forName(className).getInstance();你得到ArrayList的接口,没有实例化子类对象就强制转换为Collection当然是不行的

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 很有耐心哦

查看全部评分

回复 使用道具 举报
裤裆里的温柔、 发表于 2014-8-6 15:03
Collection collections=(Collection)Class.forName(className).getInstance();你得到ArrayList的接口,没 ...

该怎么解决啊?
回复 使用道具 举报
思维 发表于 2014-8-6 12:51
根本看不懂这个错误提示是什么意思!懂得大神顺解释是下!

Class类哪里有getInstance这个方法,应该是newInstance
回复 使用道具 举报
InputStream ips=new FileInputStream("config.properties"); 这里用FileInputStream对应的应该是绝对路径
Class.forName(className).getInstance();这里拿到字节码后应该是新建对象newInstance
回复 使用道具 举报
思维 发表于 2014-8-6 15:19
该怎么解决啊?

getInstance()换成newInstance()
回复 使用道具 举报
裤裆里的温柔、 发表于 2014-8-6 17:17
getInstance()换成newInstance()

换成newInstance( )可以!好像又遇到了泛型问题!
回复 使用道具 举报
思维 发表于 2014-8-6 17:19
换成newInstance( )可以!好像又遇到了泛型问题!

e ,代码贴上来看看
回复 使用道具 举报

图片的倒数第二行和倒数第三行的提示!那个是泛型的问题吧!
回复 使用道具 举报
传入进去的是Collection的子类,如果传入Collection好像会报错
回复 使用道具 举报
木看出来哪里错了  哎 我也是菜鸟         
回复 使用道具 举报
本帖最后由 暗夜星辰 于 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 18:03
图片的倒数第二行和倒数第三行的提示!那个是泛型的问题吧!

那个可以不用管,只是个提示,用了1.5及以上的JDK没加泛型就报这个提示,加了泛型就没咯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马