2011-11-11 5 views
1

클래스 계층 구조에 몇 가지 추가 레이어를 추가 할 때까지 사용자 자바 제네릭과 모든 것이 잘 작동하는 클래스가 있습니다.Java 제네릭과 "바운드 불일치"

문제가 "유형 삭제"와 관련이 있는지 궁금하지만이를 제거하기 위해 상속을 나타내는 방법을 모르겠습니다.

클래스 정의 :

public interface IBaseDAO <T, PK extends Serializable>; 
public interface IEntityDAO<T extends BaseEntity> extends IBaseDAO<T, Integer>; 
public interface IBaseFileDAO<T extends File> extends IEntityDAO<T>; 
public interface IInvoiceDAO extends IBaseFileDAO<Invoice>; 

public class BaseDAO<T, PK extends Serializable> implements IBaseDAO<T, PK>; 
public abstract class EntityDAO<T extends BaseEntity> extends BaseDAO<T, Integer> implements IEntityDAO<T>; 
public abstract class BaseFileDAO<T extends File> extends EntityDAO<T> implements IBaseFileDAO<T>; 
public class InvoiceDAO extends BaseFileDAO<Invoice> implements IInvoiceDAO; 

public abstract class BaseEntity implements Serializable; 
public class File extends BaseEntity; 
public abstract class Transaction extends File; 
public class Request extends Transaction; 
public class Invoice extends Request; 

오류는 다음과 같습니다

Bound mismatch: The type Invoice is not a valid substitute for the bounded parameter <T extends File> of the type BaseFileDAO<T> 
Bound mismatch: The type Invoice is not a valid substitute for the bounded parameter <T extends File> of the type IBaseFileDAO<T> 

내가 조금 여기에 내 깊이에서 오전, 누군가가 나에게 제거하는 송장 클래스를 표현하는 방법에 대한 몇 가지 조언을 줄 수 있습니다 오류?

편집 :이 도움이하지만 나는 또한이있는 경우

확실하지 : 나는 당신이 질문을 엉망 것 같아

public class FileDAO extends BaseFileDAO<File> implements IFileDAO; 
public interface IFileDAO extends IBaseFileDAO<File>; 
+4

이 문제를 해결하려면 13 개의 클래스/인터페이스가 필요합니다. 최소한의 예를 만들어서 읽기 쉽도록하십시오. –

+0

'java.io.File'과 충돌하지 않습니까? –

+0

은'IEntityDAO '과'EntityDAO '이되어야합니다. – gigadot

답변

0

...이 날 위해 컴파일 :

import java.io.Serializable; 

interface IBaseDAO <T, PK extends Serializable> { } 
interface IEntityDAO<T extends BaseEntity> extends IBaseDAO<T, Integer> { } 
interface IBaseFileDAO<T extends File> extends IEntityDAO<T> { } 
interface IInvoiceDAO extends IBaseFileDAO<Invoice> { } 

class BaseDAO<T, PK extends Serializable> implements IBaseDAO<T, PK> { } 
abstract class EntityDAO<T extends BaseEntity> extends BaseDAO<T, Integer> implements IEntityDAO<T> { } 
abstract class BaseFileDAO<T extends File> extends EntityDAO<T> implements IBaseFileDAO<T> { } 
class InvoiceDAO extends BaseFileDAO<Invoice> implements IInvoiceDAO { } 

abstract class BaseEntity implements Serializable { } 
class File extends BaseEntity { } 
abstract class Transaction extends File { } 
class Request extends Transaction { } 
class Invoice extends Request { } 

[여기 제공된 코드에서] 여기에 유형 삭제와 관련이 없습니다.

+0

방금 ​​제안한 코드로 Eclipse에서 새 프로젝트를 만들었고 serialVersionUID!에 대한 몇 가지 경고를 사용하여 컴파일하면됩니다. – hairyone