java generieken - specificeert het generieke type

Ok hier is wat ik wil doen .. opencsv heeft de volgende constructor ..

CsvToBean csv2Bean=new CsvToBean();

In zijn huidige vorm, zal het elk voorwerp aannemen. dus het volgende werkt prima voor mij.

CsvToBean holdbackModelCsv=new CsvToBean();

Ik zou graag een generieke helper willen schrijven die de opencsv-oproepen zal omwikkelen. Ik wil het beperken tot alle objecten van klassen die mijn markerklasse CsvRecord uitbreiden.

public static  List readCsvRecords(InputStream srcRecords,     InputStream templateCsv, Class<? extends T> clazz) {
   //here i want to pass the class clazz to the CsvBean.. but don't know how!!
    CsvToBean csv2Bean=new CsvToBean();
}

Alle hulp?

0

1 antwoord

Je gaat op de goede manier, je hebt gewoon een beetje aanpassing nodig.

public static  List readCsvRecords(InputStream srcRecords, InputStream templateCsv) {
    CsvToBean csv2Bean = new CsvToBean();
}
1
toegevoegd
U hebt de klasse-parameter niet nodig, omdat de parameters van het Java-generieke type geen objecten zijn die u tijdens runtime doorgeeft. Het zijn slechts hints voor de compiler. Tijdens het compileren wanneer u probeert readCsvRecords te bellen, zal Java de oproepsite bekijken en proberen een type voor T. af te leiden. Het moet CsvRecord uitbreiden omdat u dat zei. En dat is het. Alle andere verwijzingen naar T zijn onbeperkt. Wanneer moet je een Klasse-object passeren? Stel dat u T wilt retourneren in plaats van lijst . Misschien moet je casten naar T. Dan heeft de methode een echt Class-object nodig om de cast te doen.
toegevoegd de auteur John Watts, de bron