Note that there are some explanatory texts on larger screens.

plurals
  1. POCreating a Generic CsvReader
    primarykey
    data
    text
    <p>I'm trying to create a simple class to read a csv file and store the contents in an</p> <pre><code>ArrayList&lt;ArrayList&lt;T&gt;&gt;. </code></pre> <p>I'm creating a generic class CsvReader so that I can handle data of different types: int, double, String. If I had, say, a csv file of doubles, I was imagining I would use my class like this:</p> <pre><code>//possible method 1 CsvReader&lt;Double&gt; reader = new CsvReader&lt;Double&gt;(); ArrayList&lt;ArrayList&lt;Double&gt;&gt; contents = reader.getContents(); //possible method 2 CsvReader reader = new CsvReader(Double.class); ArrayList&lt;ArrayList&lt;Double&gt;&gt; contents = reader.getContents(); </code></pre> <p>But method 1 won't work since type erasure prevents you from writing code like</p> <pre><code>rowArrayList.add(new T(columnStringValue)); </code></pre> <p>But I can't even make the passing in a Double.class solution work. The problem is that what's really going on is that I need my class "parameterized" (in the general sense of that word, not the technical java generics sense) on a type with the following property: it has a ctor accepting a single String argument. That is, to create the row ArrayLists on, say, a Double csv file, I'd need to write:</p> <pre><code>StringTokenizer st = new StringTokenizer(line,","); ArrayList&lt;Double&gt; curRow = new ArrayList&lt;Double&gt;(); while (st.hasMoreTokens()) { curRow.add(new Double(st.nextToken()); } </code></pre> <p>Having passed in Double.class, I could get its String ctor using </p> <pre><code> Constructor ctor = c.getConstructor(new Class[] {String.class}); </code></pre> <p>but this has two problems. Most importantly, this is a general constructor that will return a type Object, which I cannot then downcast into a Double. Second, I would be missing "type" checking on the fact that I am requiring my passed in class to have a String arg constructor. </p> <p>My question is: How can I properly implement this general purpose CsvReader?</p> <p>Thanks, Jonah</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload