在intellij idea中查看org.apache.commons.dbcp.BasicDataSource
的源代码时,我发现了这个错误
Class 'BasicDataSource' must either be declared abstract or implement abstract method 'getParentLogger()' in 'CommonDataSource'
我使用下面的maven依赖
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
和这个配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost/test?useUnicode=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
但我的项目可以成功运行。然后我写了一个测试类来模拟这个错误
public class Foo {
public static void main(String[] args) {
System.out.println("hello world");
}
interface IA{
String getParentLog();
}
class AImpl implements IA{
public void doSomething(){
System.out.println("doSomething");
}
}
}
但这次我无法运行它并出现编译错误
Error:(14, 5) java: com.foobar.Foo.AImpl is not abstract and does not override abstract method getParentLog() in com.foobar.Foo.IA
为什么会这样?
答案 0 :(得分:0)
两件事 -
BasicDataSource
类,或者使用了一些其他依赖项,这些依赖项带来了上面示例中实现的DataSource
类的另一个实现。请确认您没有使用在类路径中带来冲突类的任何其他依赖项。请注意,在使用上述依赖项commons-dbcp:1.4
时,将使用以下语法从包DataSource
导入类javax.sql
:
public interface DataSource extends javax.sql.CommonDataSource,
java.sql.Wrapper { .. }
第二部分,名为AImpl
的类不是abstract
,在这种情况下,它必须定义它所实现的interface
的方法 -
class AImpl implements IA{
public void doSomething(){
System.out.println("doSomething");
}
@Override
String getParentLog() {
/** Define how getParentLog is implemented in this class */
return null; // return string here after the above definition
}
}