zoukankan      html  css  js  c++  java
  • 报错:Type mismatch: cannot convert from Object to Car

    问题描述:

    一个非常简单的spring项目,用静态工厂方法配置bean实例。项目的目录结构如下:

    代码如下:

    Car.java

     1 package com.tt.spring.beans.factory;
     2 
     3 public class Car {
     4 
     5     private String brand;
     6     private double price;
     7     
     8     public String getBrand() {
     9         return brand;
    10     }
    11     public void setBrand(String brand) {
    12         this.brand = brand;
    13     }
    14     public double getPrice() {
    15         return price;
    16     }
    17     public void setPrice(double price) {
    18         this.price = price;
    19     }
    20     
    21     public Car(){
    22         System.out.println("Car's Constructor...");
    23     }
    24     
    25     
    26     
    27     public Car(String brand, double price) {
    28         super();
    29         this.brand = brand;
    30         this.price = price;
    31     }
    32     
    33     @Override
    34     public String toString() {
    35         return "Car [brand=" + brand + ", price=" + price + "]";
    36     }
    37     
    38     
    39 }

    StaticCarFactory.java

     1 package com.tt.spring.beans.factory;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 /**
     7  * 静态工厂方法:直接调用某一个类的静态方法就可以返回Bean的实例
     8  */
     9 public class StaticCarFactory {
    10 
    11     
    12     private static Map<String,Car> cars = new HashMap<String, Car>();
    13     
    14     static{
    15         cars.put("Audi",new Car("Audi",300000));
    16         cars.put("Ford", new Car("Ford",40000));
    17     }
    18     
    19     //静态工厂方法
    20     public static Car getCar(String name){
    21         return cars.get(name);
    22         
    23     }
    24     
    25 }

    beans-factory.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:p="http://www.springframework.org/schema/p"
     6     xmlns:util="http://www.springframework.org/schema/util"
     7     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
     9         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    10 
    11     <!-- 通过静态方法来配置bean.注意不是配置静态工厂方法实例,而是配置bean实例 -->
    12     <bean id="car1" 
    13           class="com.tt.spring.beans.factory.StaticCarFactory"
    14           factory-method="getCar">
    15           <constructor-arg value="Audi"></constructor-arg>
    16     </bean>
    17     
    18     
    19 </beans>

    Main.java:

     1 package com.tt.spring.beans.factory;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Main {
     7 
     8     public static void main(String[] args){
     9         
    10         ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");
    11         
    12         Car car1 = (Car) ctx.getBean("car1");
    13         System.out.println(car1);
    14     }
    15 }

    运行Main.java程序,控制台报错如下:

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Type mismatch: cannot convert from Object to Car

    at com.tt.spring.beans.factory.Main.main(Main.java:12)

    原因分析:

    第一, 需要装 jre1.5.0及以上的版本

    第二, 在eclipse的'Window' 'Preference' 'Java'里,
    'Install JREs'里设置你装的jre

    第三,在eclipse的'Window' 'Preference' 'Java'里,
    'Compiler'里设'Compiler compliance level'为5.0以上
    (关键是第三步, 兼容级别)

    问题解决:

    由于我安装的jdk版本是1.8.0的,所以问题应该出在Compiler compliance level上。

    进入Window->Preference->Java->Compiler,发现Compiler compliance level=1.5

    将Compiler compliance level改成1.8:

     

    再运行Main.java代码,运行正常,控制台显示如下信息:

  • 相关阅读:
    JSTL标签用法
    (转)javascript正则实战
    Spring中几种数据源的配置
    (转)常用正则表达式
    EL表达式详解
    JAVA环境变量配置(转)
    S2SH整合步骤
    正则表达式30分钟教程(转)
    在Flash Player 10.2中使用原生鼠标指针
    time
  • 原文地址:https://www.cnblogs.com/TTTTT/p/6404683.html
Copyright © 2011-2022 走看看