2010-10-27 21 views
0

J'ai besoin de quelques conseils concernant l'approche en Java, car les délégués sont légèrement différents de .NET. Je me plais à créer des interfaces qui ont le même nom et le même nom de méthode, mais la seule chose qui les différencie est le nombre de paramètres. Quelque chose comme Actions dans .NETDélégués en Java comme dans .NET

Certains exemples de code.

Ce qui fonctionne pour l'instant, c'est la classe abstraite implémentée comme ceci.

public abstract class AbstractValidators { 

    public <T1> boolean isValid(T1 t1) { 
     return false; 
    } 

    public <T1,T2> boolean isValid(T1 t1, T2 t2) { 
     return false; 
    } 

    //And so one 

} 

Ensuite, dans certains cours, nous pouvons faire quelque chose comme ça.

public class SomeClass { 

AbstractValidators validateStrVsInter = new AbstractValidators() { 

    public <String,Integer> boolean isValid(String t1, Integer t2) { //Don't be fool by colors the String and Integer are only names of generic parameters 
     return true; 
    } 

}; 


public void doStaff() { 

    this.validateStrVsInter.<String,Integer>isValid("String", 100); // return true; 

} 

} 

Ce travail, mais n'est pas belle solution à mon humble avis ce que j'ai besoin est quelque chose comme divers interafaces qui pourraient être affectés à un ..

public interface IValidator<T1> { 
     public boolean isValid(T1 t); 
    } 

public interface IValidator<T1,T2> { 
    public boolean isValid(T1 t, T2 t2); 
} 

Quelques idées?

EDIT:

Qu'est-ce que l'objectif est?

Très simple d'avoir la possibilité de changer la définition

isValid(String t1, Integer t2) { } 

dans

isValid(String t1, Integer t2, Double t3) { } 

et invocation

validator.isValid("1",2); 

à

validator.isValid("1",2, 3.0); 

Sans modification de l'importation des classes, etc.

Répondre

0

Vous savez que vous pouvez créer une interface implémentant plusieurs autres interfaces qui les rejoignent essentiellement?

+0

Oui. Mais alors je suis obligé de mettre en œuvre toutes les méthodes, plus spécifiques. Je voudrais choisir un outil et effectuer une opération dessus. –

+0

Faites ensuite comme dans Swing et créez un adaptateur avec des implémentations vides pour chaque méthode. Vous venez ensuite de remplacer celui dont vous avez besoin. –

0

Utilisez le nom de fichier dans l'implémentation de l'interface.

public class interfaces implements package.a.IValidator, package.b.IValidator