forstå Generics

stemmer
1
    @Entity
    @Table(name = your_entity)
    public class YourEntityClass implements IEntity<Long> {

        @Id
        @SequenceGenerator(name = gen_test_entity2_id, sequenceName = test_entity2_id_seq, allocationSize = 10)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = gen_test_entity2_id)
        private Long id;

        @Column(name = name, nullable = false, length = 64)
        private String name;

        /*
         * Create constructors, getters, setters, isEquals, hashcode, etc.
         */
    }

public interface IEntity<I extends Serializable> extends Serializable {

    /**
     * Property which represents id.
     */
    String P_ID = id;

    /**
     * Get primary key.
     *
     * @return primary key
     */
    I getId();

    /**
     * Set primary key.
     *
     * @param id primary key
     */
    void setId(I id);
}

For koden ovenfor, er spørsmålet mitt, hvorfor YourEntityClassmå passere Longi IEntity<Long>? Hvorfor ikke noe annet liker IEntity<String>? Er det fordi ider av type Long, og getter av idmå returnere samme type som vi har gitt til IEntity?

Publisert på 30/12/2009 klokken 00:55
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Den YourEntityClass gjennomfører et generisk grensesnitt, og det er å spesifisere den bestemte type for generiske grensesnitt. Den har en metode å bruke en bestemt type (Long) siden det er det å implementere dette grensesnittet innebærer.

Svarte 30/12/2009 kl. 01:02
kilden bruker

stemmer
4

YourEntityClasssetter <Long>i IEntityvilkårlig. Enhver type som implementerer Serializablekan gå dit.

Etter at du har valgt den type for I, din getId()har metoden for å returnere den samme type.

for eksempel kan du ha en annen klasse som implementerer IEntity<String>og getId()i så fall måtte returnere en String.

Svarte 30/12/2009 kl. 01:04
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more