Java wildcards... in D
    Voitech via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Mon Jan 18 11:19:22 PST 2016
    
    
  
Hi. I'm trying to parse an simple string expression to something 
like Element array. Each Element can have a value of unknown 
type, which will be further combined and calculated to let say 
real/double/float value, no mather.
In Java i had something like generics and this could be 
implemented like:
class Element<T> {
     T value;
     Element(T value){
     this.value=value;
     }
}
class Parser{
Collection<Element<?>> parse(String expression){
     Collection<Element<?>> retVal = new ArrayList<>();
     //"expression"  would be parser but for this example lets say 
we just create  new elements
     Element<Integer> e1= new Element<>();
     e1.value=3;
     Element<String> e2 = new Element<>();
     e2.value="+"
     retValue.add(e1);
     retValue.add(e2);
     ...
     return retValue;
     }
}
And then in other class not connected through module or template 
parameter or anything i could call it just:
Parser p = new Parser();
Collection<Element<?>>  elements=p.parse("(1+2+3)/6");
and then check weather (element.value instanceof Operator) or 
other stuff.
if i do something like this in D:
module calculator;
class Element(T) {
	T value;
	this(T value){
		this.value=value;
	}
}
and then:
	Element[] parse(string expression){
             Element[] returnSlice;
             ...
             //"expression"  would be parser but for this example  
lets say we just create  new elements
             Element!(int) e1 = new Element();
             e1.value=3;
             Element!(string) e2= new Element();
             e2.value="+";
             returnSlice~=e1;
             returnSlice~=e2;
             return returnSlice;
         }
I'm getting error:
class calculator.Element used as a type.
How to represent this class template parameter T of Element(T) as 
wildcard Element(?) ??
Cheers Voitech
    
    
More information about the Digitalmars-d-learn
mailing list