Posté le 20/12/2005 à 17h42
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 ?
Posté le 20/12/2005 à 17h45
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
Posté le 20/12/2005 à 18h22
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
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,
Posté le 20/12/2005 à 23h11
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.
Posté le 21/12/2005 à 09h19
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