Produit du jour : Eme Des mains et des mots Moyen et Confirmé (Niveaux 5 à 12) à partir de 49.00 € (Logiciel)
20/12/2005 16:12 par Aurélien MOREAU | 6 réponse(s) | Signaler un contenu abusif ou erroné
Bonjour,

Voici une simplification d'un problème que je rencontre:

IC.java:

interface IA {
IA op();
}

interface IB {
IB op();
}

public interface IC extends IA, IB{
IC op();
}


J'arrive à compiler un tel code sour Eclipse 3.1 avec les
options de compilation ("Java Compiler") suivantes:

Compiler compliance level: 5.0
Generated .class files compatibility : 1.4
Source compatibility: 1.4


Par contre impossible de le compiler à la main avec la JDK
de sun:

> javac -version IC.java
javac 1.5.0
IC.java:9: types IB and IA are incompatible; both define
op(), but with unrelated return types
public interface IC extends IA, IB {
^
1error

Peut-on m'éclairer sur ce problème de comportement des
compilos ? Il y a-t-il une option pour javac permettant de
compiler un tel code ?

Merci d'avance
Voir les 6 réponses - Poster une réponseCe sujet ne répond pas à vos besoins ? Posez votre question !
 
Composant +/- Developper
Mettre en parametre d'une methode SOAP ...
 

Réponses

Aurélien MOREAU wrote:
Bonjour,

Voici une simplification d'un problème que je rencontre:

IC.java:

interface IA {
IA op();
}

interface IB {
IB op();
}

public interface IC extends IA, IB{
IC op();
}


J'arrive à compiler un tel code sour Eclipse 3.1 avec les options de
compilation ("Java Compiler") suivantes:

Compiler compliance level: 5.0
Generated .class files compatibility : 1.4
Source compatibility: 1.4


Par contre impossible de le compiler à la main avec la JDK de sun:

javac -version IC.java
javac 1.5.0

IC.java:9: types IB and IA are incompatible; both define op(), but with
unrelated return types
public interface IC extends IA, IB {
^
1error

Peut-on m'éclairer sur ce problème de comportement des compilos ? Il y
a-t-il une option pour javac permettant de compiler un tel code ?


Euh le but est difficile a comprendre. IC doit il avoir les 3 méthodes

IC op();

IB op();

IA op();

? Si c'est le but, c'est impossible en java


dans l'article 43a83338$0$31138$, Kupee à
a écrit le 20/12/05 17:42 :

Aurélien MOREAU wrote:
Bonjour,

Voici une simplification d'un problème que je rencontre:

IC.java:

interface IA {
IA op();
}

interface IB {
IB op();
}

public interface IC extends IA, IB{
IC op();
}


J'arrive à compiler un tel code sour Eclipse 3.1 avec les options de
compilation ("Java Compiler") suivantes:

Compiler compliance level: 5.0
Generated .class files compatibility : 1.4
Source compatibility: 1.4


Par contre impossible de le compiler à la main avec la JDK de sun:

javac -version IC.java
javac 1.5.0

IC.java:9: types IB and IA are incompatible; both define op(), but with
unrelated return types
public interface IC extends IA, IB {
^
1error

Peut-on m'éclairer sur ce problème de comportement des compilos ? Il y
a-t-il une option pour javac permettant de compiler un tel code ?


Euh le but est difficile a comprendre. IC doit il avoir les 3 méthodes

IC op();

IB op();

IA op();

? Si c'est le but, c'est impossible en java


Le type de retour ne fait pas parti de la signature de la methode donc 3
signatures identiques == conflit !



dans l'article 43a83338$0$31138$, Kupee à
a écrit le 20/12/05 17:42 :

Aurélien MOREAU wrote:
Bonjour,

Voici une simplification d'un problème que je rencontre:

IC.java:

interface IA {
IA op();
}

interface IB {
IB op();
}

public interface IC extends IA, IB{
IC op();
}


J'arrive à compiler un tel code sour Eclipse 3.1 avec les options de
compilation ("Java Compiler") suivantes:

Compiler compliance level: 5.0
Generated .class files compatibility : 1.4
Source compatibility: 1.4


Par contre impossible de le compiler à la main avec la JDK de sun:

javac -version IC.java
javac 1.5.0

IC.java:9: types IB and IA are incompatible; both define op(), but with
unrelated return types
public interface IC extends IA, IB {
^
1error

Peut-on m'éclairer sur ce problème de comportement des compilos ? Il y
a-t-il une option pour javac permettant de compiler un tel code ?
Euh le but est difficile a comprendre. IC doit il avoir les 3 méthodes


IC op();

IB op();

IA op();

? Si c'est le but, c'est impossible en java
Non, une classe implémentant IC ne devra définir que <<IC


op()>>
L'idée est qu'une classe implémentant IC doit être
manipulable comme une IA ou une IB mais je n'ai pas la main
sur les interface IA, IB (provient d'un autre projet).



Le type de retour ne fait pas parti de la signature de la methode donc 3
signatures identiques == conflit !

Je ne connais pas plus que ca le système de type de Java,

mais je suis d'accord avec vous il devrait avoir conflit
pour ce que j'en connais. Mais théoriquement cette surcharge
est valide au niveau de la variance/contravariance
(Spécialisation et sous-typage : thème et variations, Roland
Ducournau)

De plus, je le répète ce code compile et tourne sous
Eclipse3.1 avec les options définies plus haut.
Je crois par contre que le compilateur d'Eclipse est un
compilateur embarqué spécifique.





dans l'article 43a83338$0$31138$, Kupee à
a écrit le 20/12/05 17:42 :

Aurélien MOREAU wrote:

Bonjour,

Voici une simplification d'un problème que je rencontre:

IC.java:

interface IA {
IA op();
}

interface IB {
IB op();
}

public interface IC extends IA, IB{
IC op();
}


J'arrive à compiler un tel code sour Eclipse 3.1 avec les options de
compilation ("Java Compiler") suivantes:

Compiler compliance level: 5.0
Generated .class files compatibility : 1.4
Source compatibility: 1.4


Par contre impossible de le compiler à la main avec la JDK de sun:

javac -version IC.java


javac 1.5.0
IC.java:9: types IB and IA are incompatible; both define op(), but with
unrelated return types
public interface IC extends IA, IB {
^
1error

Peut-on m'éclairer sur ce problème de comportement des compilos ? Il y
a-t-il une option pour javac permettant de compiler un tel code ?


Euh le but est difficile a comprendre. IC doit il avoir les 3 méthodes

IC op();

IB op();

IA op();

? Si c'est le but, c'est impossible en java



Non, une classe implémentant IC ne devra définir que <<IC op()>>
L'idée est qu'une classe implémentant IC doit être manipulable comme une
IA ou une IB mais je n'ai pas la main sur les interface IA, IB (provient
d'un autre projet).



Le type de retour ne fait pas parti de la signature de la methode donc 3
signatures identiques == conflit !

Je ne connais pas plus que ca le système de type de Java, mais je suis

d'accord avec vous il devrait avoir conflit pour ce que j'en connais.
Mais théoriquement cette surcharge est valide au niveau de la
variance/contravariance (Spécialisation et sous-typage : thème et
variations, Roland Ducournau)

De plus, je le répète ce code compile et tourne sous Eclipse3.1 avec les
options définies plus haut.
Je crois par contre que le compilateur d'Eclipse est un compilateur
embarqué spécifique.


Salut, c'est effectivement très étonnant et pas vraiment naturel. Une
classe qui implémente IC doit définir la méthode IC op() et c'est tout.
Cela s'entends peut-etre comme de la surcharge (en gros l'extend IA et
IB ne sert à rien), mais je ne croyais pas que c'était possible. Tu
devrais poster ton code sur le forum eclipse.





Effectivement, ça devrait compiler puisque java 5.0 accepte les
redéfinitions avec type compatible (covariance je crois).

interface IA { IA op() }

interface IC extends IA { IC op() }

devrait marcher. Alors pourquoi pas avec deux héritages.

Peut-etre une option de compilation du compilo sun?


"Aurélien MOREAU" a écrit dans le message de
news:43a81f69$0$15706$
Bonjour,

Voici une simplification d'un problème que je rencontre:

IC.java:

interface IA {
IA op();
}

interface IB {
IB op();
}

public interface IC extends IA, IB{
IC op();
}


J'arrive à compiler un tel code sour Eclipse 3.1 avec les
options de compilation ("Java Compiler") suivantes:

Compiler compliance level: 5.0
Generated .class files compatibility : 1.4
Source compatibility: 1.4


Par contre impossible de le compiler à la main avec la JDK
de sun:

javac -version IC.java
javac 1.5.0

IC.java:9: types IB and IA are incompatible; both define
op(), but with unrelated return types
public interface IC extends IA, IB {
^
1error

Peut-on m'éclairer sur ce problème de comportement des
compilos ? Il y a-t-il une option pour javac permettant de
compiler un tel code ?

Merci d'avance



Vous devez être enregistré pour répondre ou poser vos questions. S'inscrire...