I want multiple return types, I think....

I'm working on a system where I want a factory method that returns AWT Components that implement some interface X. I can't simply use an abstract class Y that extends component and implements X because the components that I want to have implement X subclass things like JLabels and JPanels. Furthermore, I don't really care about a type Y, as it would be meaningless in my system other than being the combination of these two types.
This is a language issue because what I really want my function to look like is:
public {Component, X} createXComponent(...) {
  return new (thing that is both Component and implements X);
}where [Component, X] indicates the return type. Assuming that the abstract class is not an option, is there any way that I can design around this, and if not, might this sort of scenario possibly warrant a future langauge extension? It could come in the form of a type declaration that wasn't a class in itself, but indicated a named combination of 0 or 1 classes and some number of interfaces.
Thoughts?
Ben Kuhn

I think the answer to my question at this point is
that no, there's no convenient alternative design
solution, and I've settled on using a sig. that
returns X (and casting to component as needed), but I
was looking for a more semantically correct solution.That seems like the best way to do it. When needed you can use the instanceof operator to see if the cast will be allowed.
Another option may be to have your interface X include a method called
   public Component getComponent();The implementation in the concrete classes would be something like this:
   public Comonent getComponent() {
      return this;
   }Then if you wanted the Component view of the object you could call getComponent() rather than casting.
Just a thought.

Similar Messages

  • Flex services with multiple return types

    Hello,
    We are creating a webapplication with flex and php.
    Everything is working very good, until we got to the library part of the application.
    Every service so far had only 1 return type (eg: User, Group, ...)
    Now for the library we want to return a ArrayCollection of different types of objects. To be more specific the LibraryService should return a ArrayCollection containing Folder and File objects.
    But how to configure this in Flex (Flash Builder 4 (standard))?
    So far it converts every object to the type Object, i would really like it to be Folder or File
    The only solution we can think of right now is to create a new object Library that will contain 2 ArrayCollections, one of type Folder and one of type File. This could work ofcourse, but I wonder if there is a better solution for this OR that i can configure multiple return types for a service.
    Any ideas/advice is greatly appreciated.

    Normally if you are using Blazeds(Java stuff, i'm sure there should be something similar for php), you can map java objects to that of the AS objects, when you get the data back you are actually seeing the object which is a Folder or a File object rather than just a Object.

  • Multiple Return Types

    haven't been around in a while, so I thought I'd stir up some comments with a suggestion for a new feature in Java, which I'm sure has been suggested at some point, but I can't remember seeing it talked about, so here goes:
    Multiple Return Types:
    public String, int getStateInfo(String abbrev) {
       if("nj".equalsIgnoreCase(abbrev)) {
          return "New Jersey", 11408042;
       // ... and other states...
       return null, -1;
    String name, int population = getStateInfo("nj");
    System.out.println("The population of " + name + " is " + population + ".");Yes yes, I know. Create a StateInfo object with the fields needed. Still, I think that could be interesting.

    apart from it getting ugly with more than twoparameters
    What? How is this ugly? ;-)
    public String, int, String, Color, String, String
    getStateInfo(String abbrev) {
    return name, population, stateFlower, stateColor,
    or, stateAnimal, governorsName;
    there no indication on what the return valuesrepresent.
    Well, I guees the API docs would have to speak for
    themselves. Or better method naming... In that
    sense, it's no different then now. I could write a
    method "getStateName()" and return totally different.
    public String, int getStateNameAndPopulation(String
    abbrev) {...
    I used to like "tuples" when I studied The Tom Programming Language (that's how he calls them), as every CS student is a bit of a "featurist"... Now that I came to develop 40 hours a week and to love Java's simple and powerful expressiveness, I tend to find such constructs overly ugly to be avoided as possible... a matter of personal taste, too, I suppose...

  • Exception in Holder for Multiple Return Types

    Hi,
    I am implementing multiple return types as mentioned at url: -
    http://e-docs.bea.com/wls/docs70/webserv/implement.html#1058020
    I have a "Ticket" object and its holder "TicketHolder".
    I have built the service successfully which has the following method with its
    built files: -
    public String serviceMethod(String arg,TicketHolder out) {
    Ticket tc = new Ticket();
    tc.setticketId("001");
    out = new TicketHolder();
    out.value = tc;
    System.out.println("got it man");
    return arg;
    But when i try to invoke this method from its "http://localhost:8088/WebServices/RegisterTickets"
    link (note - RegisterTickets is the service name here), it gives me the following
    exception at server side as well as client side: -
    javax.xml.rpc.JAXRPCException: Failed to invoke the target:test.MyService@630693
    operation name:serviceMethod method:public java.lang.String test.MyService.serviceMethod(java.lang.String,test.TicketHolder)
    args:[Ljava.lang.Object;@3d51e3arg.length:2 Due to exception:java.lang.IllegalArgumentException:
    argument type mismatch                                                      
                               at weblogic.webservice.component.javaclass.JavaClassInvocationHandler.invoke(JavaClassInvocationHandler.java:97)
                                                   at weblogic.webservice.core.handler.InvokeHandler.handleRequest(InvokeHandler.java:78)
                                                                             at weblogic.webservice.core.HandlerChain.handleRequest(HandlerChain.java:131)
        at weblogic.webservice.core.DefaultOperation.process(DefaultOperation.java:539)
      at weblogic.webservice.core.DefaultWebService.invoke(DefaultWebService.java:264)
    Can someone help me in resolving this exception?
    Any help would be appreciated...
    thanks in advance,
    Rajesh
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

    apart from it getting ugly with more than twoparameters
    What? How is this ugly? ;-)
    public String, int, String, Color, String, String
    getStateInfo(String abbrev) {
    return name, population, stateFlower, stateColor,
    or, stateAnimal, governorsName;
    there no indication on what the return valuesrepresent.
    Well, I guees the API docs would have to speak for
    themselves. Or better method naming... In that
    sense, it's no different then now. I could write a
    method "getStateName()" and return totally different.
    public String, int getStateNameAndPopulation(String
    abbrev) {...
    I used to like "tuples" when I studied The Tom Programming Language (that's how he calls them), as every CS student is a bit of a "featurist"... Now that I came to develop 40 hours a week and to love Java's simple and powerful expressiveness, I tend to find such constructs overly ugly to be avoided as possible... a matter of personal taste, too, I suppose...

  • Covariant return types over Generic return types.

    Feeling rather slow on the uptake having only just discovered covariant return types (thanks again cowwoc), I've been looking over one of our soon to be released APIs and think using covariants makes muchos sense for it but there's one issue:
    public interface Foo {
         Foo get();
    public interface Bar {
         Bar get();
    public interface FooBar
              extends Foo, Bar {
         FooBar get();
    }Which isn't allowed, as the compiler states the return types are incompatible (I think incorrectly as it's been further overridden). Its generic equivalent is:
    public interface FooX<T> {
         T get();
    public interface BarX<T> {
         T get();
    public interface FooBarX
              extends FooX<FooBarX>, BarX<FooBarX> {
         FooBarX get();
    }Which works, and well, but the extra hassle of declaring/using generics is turning out to be a pain for our users (this pattern is used extensively). Does anyone have any simple suggestions/recommendations to resolve either the covariant issue or simplify the generics one? Also does anyone have any preferences to which one they prefer (and why)?
    Incidentally does anyone know the the rationale behind not allowing the first example, when clearly it can't be abused (can it)?

    BobDavies wrote:
    . it is because you can not override a method or its definition with the same signatur, which does not include return type.What do you mean "does not include return type"?
    method signature does not count the return type. i think java does allow you to repeat definitions in a sub class but when you put up a different retyrn type, it sees it as an attempt to do overriding, so it flags it out.
    the fact that it works is becuase you are not extending anything but itsself:I am aware of the reasons for the Generic version working, it achieves our aim, I just don't like it when in use. And was wondering why the joining covariants do not work. I still can't see the reason for the FooBar not being allowed when you are allowed to return subtypes. You cannot break the inheritance/return types expectations like this can you? E.g. if I write a bit of code using Foo, it will still work with FooBar, and the same with Bar using FooBar, no? Can you show me an example of why this isn't allowed?your generic version should NOT work either; it is working becuase you are confused:
    public interface FooBarX extends FooX<FooBarX>, BarX<FooBarX> only equals to
    public interface FooBarX extends FooBarX, FooBarX

  • I want to return my iPad 3, but I did not have an apple account at the time of purchase, and when I type in my order number and proceed to click "cancel order", it prompts me to log in with my apple I'd and then tells me that the account is not authorised

    I want to return my iPad 3, but I did not have an apple account at the time of purchase, and when I type in my order number and proceed to click "cancel order", it prompts me to log in with my apple I'd and then tells me that I am not authorised to do anything on the account in relation to the transaction. What should I do?

    You can view and edit your orders without an Apple ID by logging in with your order number, along with the shipping zip code or email address.
    I copied the text posted above from this website.
    http://store.apple.com/us/help/viewing_changing_orders
    Click or tap on the Order Status link here and you should be able to type in the order number and your zip code.
    To view or edit your Apple Online Store order, visit online Order Status and log in with your Apple ID and password.

  • Want to add multiple idoc type with single message type.

    Hi Gurus,
    I have a problem. I want to add multiple idoc type with single message type in WE20.
    How we can do this in WE20 or is there any other way to do that?
    Please help me.
    Thanks in advance.
    Srimanta.

    hi,
    basically in partner profile i.e. in we20 , we add details to the receiver / sender port that we have created using we21.
    so what exactly we do in that is that we first use the message type for those idocs that we have created.
    now based on those message type we create a process code. now this is the reason why you cannot apply several message types with the same name in we20... as process code is unque for each message type.
    so thats why you can only assign the same message name to several idocs in we82 and then in we20 define the process code for that message type.
    it will solve your problem.
    hope this will help you!!!
    Thanks & regards,
    punit raval.

  • I want to validate multiple input type=text with spry validation any one hepl me?

    I want to validate multiple input type=text with spry validation any one hepl me?
    my code is as below plz help me
               *Professional Experience             Years        Months                             

    Read;
    http://labs.adobe.com/technologies/spry/articles/textfield_overview/index.html
    http://labs.adobe.com/technologies/spry/widgets/textfieldvalidation/SpryValidationTextFiel d.html
    and check out the samples:
    http://labs.adobe.com/technologies/spry/samples/

  • Even when I select a specific media type (or multiple media types) for ingest, Prelude imports .JPG etc.  I want to only import video files.

    Even when I select a specific media type (or multiple media types) for ingest, Prelude imports .JPG etc.  I want to only import video files within a section of subfolders.
    please help
    adobe prelude cc2014

    Prelude will ingest only the files that you have selected (checked the box next to) in the Ingest Dialog. Can you provide more information or screen shots of what you Ingest Dialog looks like BEFORE you ingest and what your Project Panel looks like AFTER you ingest?
    Thanks -
    Michael

  • Before, when i closed Firefox with multiple tabs open, it prompted me and asked if I wanted to return to these tabs the next time. When i downloaded the new Firefox, i can't do that anymore. Is there an add-on to make that happen?

    I recently updated Firefox on my desktop and laptop. Before, when i closed Firefox, a window would open and ask me if i wanted to return to the same group of URL location tabs the next time i opened Firefox.
    Now it doesn't ask that, so i have to remember which sites i was using each time. Is there a way to return to the same group of URL locations each time I re-open Firefox?

    For a summary of what to do to get the old behaviour back see this post from [https://support.mozilla.com/en-US/questions/804339#answer-158823 Helper 7677]

  • Multiple return values (Bug-ID 4222792)

    I had exactly the same request for the same 3 reasons: strong type safety and code correctness verification at compile-time, code readability and ease of mantenance, performance.
    Here is what Sun replied to me:
    Autoboxing and varargs are provided as part of
    JSRs 14 and 201
    http://jcp.org/en/jsr/detail?id=14
    http://jcp.org/en/jsr/detail?id=201
    See also:
    http://forum.java.sun.com/forum.jsp?forum=316
    http://developer.java.sun.com/developer/earlyAccess/adding_generics/index.html
    Multiple return values is covered by Bug-ID 4222792
    Typically this is done by returning an array.
    http://developer.java.sun.com/developer/bugParade/bugs/4222792.html
    That's exactly the problem: we dynamically create instances of array objects that would better fit well within the operand stack without stressing the garbage collector with temporary Array object instances (and with their backing store: 2 separate allocations that need to be recycled when it is clearly a pollution that the operand stack would clean up more efficiently)
    If you would like to engage in a discussion with the Java Language developers, the Generics forum would be a better place:
    http://forum.java.sun.com/forum.jsp?forum=316
    I know that (my report was already refering to the JSR for language extension) Generics is not what I was refering to (even if a generic could handle multiple return values, it would still be an allocated Object
    instance to pack them, i.e. just less convenient than using a static class for type safety.
    The most common case of multiple return values involve values that have known static datatypes and that should be checked with strong typesafety.
    The simple case that involves returning two ints then will require at least two object instances and will not solve the garbage collection overhead.
    Using a array of variable objects is exactly similar, except that it requires two instances for the components and one instance for the generic array container. Using extra method parameters with Integer, Byte, ... boxing objects is more efficient, but for now the only practical solution (which causes the least pollution in the VM allocator and garbage collector) is to use a custom class to store the return values in a single instance.
    This is not natural, and needlessly complexifies many interfaces.
    So to avoid this pollution, some solutions are used such as packing two ints into a long and returning a long, depacking the long after return (not quite clean but still much faster at run-time for methods that need to be used with high frequencies within the application. In some case, the only way to cut down the overhead is to inline methods within the caller code, and this does not help code maintenance by splitting the implementation into small methods (something that C++ can do very easily, both because it supports native types parameters by reference, and because it also supports inline methods).
    Finally, suppose we don't want to use tricky code, difficult to maintain, then we'll have to use boxing Object types to allow passing arguments by reference. Shamely boxed native types cannot be allocated on the operand stack as local variables, so we need to instanciate these local variables before call, and we loose the capacity to track the cases where these local variables are not really initialized by an effective call to the method that will assign them. This does not help debugging, and is against the concept of a strongly typed language like Java should be:
    Java makes lots of efforts to track uninitialized variables, but has no way to determine if an already instanciated Object instance refered in a local variable has effectively received an effective assignment because only the instanciation is kept. A typical code will then need to be written like this:
    Integer a = null;
    Integer b = null;
    if (some condition) {
    //call.method(a, b, 0, 1, "dummy input arg");
    // the method is supposed to have assigned a value to a and b,
    // but can't if a and b have not been instanciated, so we perform:
    call.method(a = new Integer(), b = new Integer(), 0, 1, "dummy input
    arg");
    // we must suppose that the method has modified (not initialized!)
    the value
    // of a and b instances.
    now.use(a.value(), b.value())
    // are we sure here that a and b have received a value????
    // the code may be detected at run-time (a null exception)
    // or completely undetected (the method() above was called but it
    // forgot to assign a value to its referenced objects a and b, in which
    // case we are calling in fact: now.use(0, 0); with the default values
    // or a and b, assigned when they were instanciated)
    Very tricky... Hard to debug. It would be much simpler if we just used:
    int a;
    int b;
    if (some condition) {
    (a, b) = call.method(0, 1, "dummy input arg");
    now.use(a, b);
    The compiler would immediately detect the case where a and b are in fact not always initialized (possible use bere initialization), and the first invoked call.method() would not have to check if its arguments are not null, it would not compile if it forgets to return two values in some code path...
    There's no need to provide extra boxing objects in the source as well as at run-time, and there's no stress added to the VM allocator or garbage collector simply because return values are only allocated on the perand stack by the caller, directly instanciated within the callee which MUST (checked at compile-time) create such instances by using the return statement to instanciate them, and the caller now just needs to use directly the variables which were referenced before call (here a and b). Clean and mean. And it allows strong typechecking as well (so this is a real help for programmers.
    Note that the signature of the method() above is:
    class call {
    (int, int) method(int, int, String) { ... }
    id est:
    class "call", member name "method", member type "(IILjava.lang.string;)II"
    This last signature means that the method can only be called by returning the value into a pair of variables of type int, or using the return value as a pair of actual arguments for another method call such as:
    call.method(call.method("dummy input arg"), "other dummy input arg")
    This is strongly typed and convenient to write and debug and very efficient at run-time...

    Can anyone give me some real-world examples where
    multiple return values aren't better captured in a
    class that logically groups those values? I can of
    course give hundreds of examples for why it's better
    to capture method arguments as multiple values instead
    of as one "logical object", but whenever I've hankered
    for multiple return values, I end up rethinking my
    strategy and rewriting my code to be better Object
    Oriented.I'd personally say you're usually right. There's almost always a O-O way of avoiding the situation.
    Sometimes though, you really do just want to return "two ints" from a function. There's no logical object you can think of to put them in. So you end up polluting the namespace:
    public class MyUsefulClass {
    public TwoInts calculateSomething(int a, int b, int c) {
    public static class TwoInts {
        //now, do I use two public int fields here, making it
        //in essence a struct?
       //or do I make my two ints private & final, which
       //requires a constructor & two getters?
      //and while I'm at it, is it worth implementing
      //equals(), how about hashCode()? clone()?
      //readResolve() ?
    }The answer to most of the questions for something as simple as "TwoInts" is usually "no: its not worth implementing those methods", but I still have to think about them.
    More to the point, the TwoInts class looks so ugly polluting the top level namespace like that, MyUsefulClass.TwoInts is public, that I don't think I've ever actually created that class. I always find some way to avoid it, even if the workaround is just as ugly.
    For myself, I'd like to see some simple pass-by-value "Tuple" type. My fear is it'd be abused as a way for lazy programmers to avoid creating objects when they should have a logical type for readability & maintainability.
    Anyone who has maintained code where someone has passed in all their arguments as (mutable!) Maps, Collections and/or Arrays and "returned" values by mutating those structures knows what a nightmare it can be. Which I suppose is an argument that cuts both ways: on the one hand you can say: "why add Tuples which would be another easy thing to abuse", on the other: "why not add Tuples, given Arrays and the Collections framework already allow bad programmers to produce unmainable mush. One more feature isn't going to make a difference either way".
    Ho hum.

  • Should Collections be used as return types across threads?

    I am wondering when, if ever, it is appropriate to use a Collection as the return type of a method in a multi-threaded environment. Here is our situation:
    We have four classes -- Widget, WidgetManager, ClientA, and ClientB. ClientA and ClientB are running in different Threads from each other and from the WidgetManager.
    The WidgetManager class that uses a Collection of Widgets internally, and passes the Collection (or an Iterator over it) out as a return value of a method to ClientA, which is running in another thread. ClientA would start to go through it using next() and hasNext() of the Iterator. If the WidgetManager were to get a request from ClientB running in another thread to eliminate a Widget, it would attempt to remove it from the Collection. If ClientA were still looping through the Iterator, this would throw an IllegalStateException b/c the system would be in an inconsistent state. The Iterator given to the ClientA is directly linked to the actual Collection in the WidgetManager (am I right so far?).
    In my opinion, in most cases we don't want to synchronize Collections. In the example above, if we had passed out a synchronized Collection, then the WidgetManager couldn't touch the collection while the client was looping through the Iterator. If the client got hung up while looping, then the WidgetManager would be hung up. In this case, I think that it will be better to use the toArray() method of Collection to just dump out the contents to a plain array of Objects. Actually, the WidgetManager could convert this array of Objects to an array of Widgets before passing it out, which would give us the type checking that we don't get with Containers.
    The condition where you would want to use a synchronized Collection would be when you actually want the client to do some writing or removing from the Collection. I would expect this to be pretty rare since you usually dont want to give clients access to an interal member (the Collection) of a class.
    I think that it is also possible to have read-only Collections, but I think (don't know for sure) that you would still have the same IllegalStateException or synchronization probelms.
    Can someone point out the errors in my thinking? Or should you generally only use Collections as internal members in a multi-threaded environment, and use toArray() whenever you want to pass the Collection's data outside of the class?
    Thanks for any help.
    Keith

    I haven't tested what happens when you synchronize the
    Collection, but I think that you are right. But this
    causes the problem that I mentioned in the first post.
    That is, what happens if your client STARTS running
    through the Iterator, and then stops or gets hung up
    for some reason? I assume that you're still blocked.
    And it's pretty important to me in this case to not
    t be blocked -- WidgetManager is the highest level
    class in the system.
    I'd like to know if anyone has tested this.
    The Iterator implementations used in java.util do not use any synchronization by itself, (which is what you would expect since synchronization over multiple method call will involve much more complications and slower performance) . With iterator, you have to provide the necessary synchronization yourself to maintain thread-safety like this
    Iterator itr = get Iterator from collectionInstance ;
    synchronized(collectionInstance) {
    while(itr.hasNext())
    process itr.next() ...
    As long as your client code gracefully exits the synchronized block on a stop( or hangup, given that it is detected and handled fast enough), it will not be a problem.
    Also, I'd like an example of when you WOULD want to
    return a Collection. I'm specifically interested in
    when you would want to return one in a multi-threaded
    environment, but I'm beginning to wonder when you
    would EVER want to return one from a method.
    Collections are great for internal uses, but you lose
    type-checking and you expose the internals of your
    class to modification when you use them as return
    types. And if you're returning a read-only
    Collection, you might as well return an array, right?Using a read-only proxy will be much faster and space-efficient than toArray().

  • Overloading hassle with no args, different return types

    We're trying to create a document object that can be parsed from XML with xerces and then used as the model for a jtree and a styled-text editor. That means we want to:
    1. subclass stuff from org.w3c.dom
    2. implement interfaces from javax.swing.tree
    3. implement interfaces from javax.swing.text
    We figured that since they all represent similar tree structures, this would be a nice and clever thing to do.
    Hit a snag this morning:
    * org.w3c.dom.Node.getAttributes() returns NamedNodeMap
    * javax.swing.text.Element.getAttributes() returns AttributeSet
    So, our class gets a compile error on the conflicting return types for what it thinks is the same method.
    Any suggestions for what to do? Abandoning xerces isn't an option, and rewriting styled text ourselves isn't practial either.
    --Chris (invalidname)

    This is the problem with multiple inheritance. In C++, the problem is more pronounced because you can inherit two implmentations of the same method.
    In Java, whenever you inherit two methods with the same signature, even if the return types are the same, you have a similar problem. These two methods will likely have two different contracts, and you cannot fulfuill both contracts with one method.
    Example:
    interface Graphical { /** Draw object on screen */ void draw() { } }
    interface CardDeck { /** Draw a card */ void draw() { } }
    class CardGame implements Graphical, CardDeck { /** ??? */ void draw() { } }It is unfortunate that you're inheriting two different getAttributes() methods. You'll have to use composition and delegation instead of inheritance to get around the problem.

  • Custom components that accept multiple data types

    The components that come with Flex, such as Datagrid, can
    accept
    multiple data types as a data source. For instance, you can
    bind a
    Datagrid to XML return from an HTTPService request or you can
    build an
    array and bind to that. I'd like to build my own component
    that does
    something similar, but I can't find any examples of this. I
    don't
    really even know what terms I'd search under to find it.
    Can anyone out there give me any idea of how this is done?
    Also, I'm a
    bit hazy on how the column definitions you set up in the MXML
    tag get
    received inside the class. I'd appreciate any insight on how
    this
    works.
    Thanks;
    Amy

    "Amy Blankenship *AdobeCommunityExpert*"
    <[email protected]>
    wrote in message news:[email protected]...
    >
    > "rvollmar" <[email protected]> wrote in
    message
    > news:[email protected]...
    >> For the second part of your post, are you asking how
    to set up columns in
    >> ActionScript? e.g.
    >>
    >> private function setColumnConfig1(dg:DataGrid):void{
    >> colArray = new Array();
    >> var col1:DataGridColumn = new DataGridColumn();
    >> var col2:DataGridColumn = new DataGridColumn();
    >> var col3:DataGridColumn = new DataGridColumn();
    >> var col4:DataGridColumn = new DataGridColumn();
    >> var col5:DataGridColumn = new DataGridColumn();
    >> var col6:DataGridColumn = new DataGridColumn();
    >>
    >> col1.dataField = "recordName";
    >> col2.dataField = "image";
    >> col3.dataField = "recordAmount";
    >> col4.dataField = "who";
    >> col5.dataField = "where";
    >> col6.dataField = "when";
    >>
    >> col2.itemRenderer = application.ImageRenderer;
    >>
    >> colArray.push(col1);
    >> colArray.push(col2);
    >> colArray.push(col3);
    >> colArray.push(col4);
    >> colArray.push(col5);
    >> colArray.push(col6);
    >>
    >> dg.columns = colArray;
    >> }
    >>
    >> Or were you wondering, when one writes this in mxml:
    >>
    >> <mx:columns>
    >> <mx:DataGridColumn ...>
    >> ...
    >> </mx:columns>
    >>
    >> how do you then have the control use that
    information?
    >
    > The latter. But the fact is that I was misreading the
    example I was
    > looking at.
    >
    > <?xml version="1.0"?>
    > <!-- dpcontrols/DataGridSimpleAttributes.mxml -->
    > <mx:Application xmlns:mx="
    http://www.adobe.com/2006/mxml">
    > <mx:DataGrid>
    > <mx:ArrayCollection>
    > <mx:Object Artist="Pavement"
    > Album="Slanted and Enchanted" Price="11.99" />
    > <mx:Object Artist="Pavement"
    > Album="Brighten the Corners" Price="11.99" />
    > </mx:ArrayCollection>
    > </mx:DataGrid>
    > </mx:Application>
    > I was thinking the ArrayCollection was going to the
    columns, but of course
    > it is the dataProvider. Am I right in thinking that
    internally the
    > control has a defaultProperty metatag that enables the
    contents of the
    > parent DataGrid tag to just come in and populate the
    dataProvider through
    > PFM?Thanks;Amy
    OK, I have looked at the source file, and it looks like the
    [DefaultProperty] metatdata tag is at least not used in the
    ListBase.as
    class. So I am guessing it is either higher or lower in the
    heirarchy...?
    -Amy

  • Should/does -MyInterface give MyInterface return types?

    The variance-overview.pdf says that List<-E> has Object as the return type of the get method. If this is true, I'm disappointed. I'd expect the following to work quite happily: List<-List<*>> myList = buildList();
    List<*> elt1 = myList.get(0);There's no obvious reason why Object should be a supertype of List.

    I'm still a bit fuzzy about contravariance, but it all depends on what your buildList() method returns. I think this is all legal code:
        List<Object> list1 = new ArrayList<Object>();
        List<List<*>> list2 = new ArrayList<List<*>>();
        list1.add (new Object());
        list2.add (new ArrayList<Integer>());
        List<-List<*>> list3;
        list3 = list2;
        list3 = list1;
        Object o = list3.get(0); // o is not a List!Either of list1, list2 or list3 will accept list.add(new ArrayList<Integer>()) - however at the price that nothing can be guaranteed about the type of the contents of the array (in the second case, the list is only guaranteed to contain Object).
    What you want is for your buildList() method to return List<+List<*>>, the variant case (since you are reading from it).
        List<ArrayList<*>> list1 = new ArrayList<ArrayList<*>>();
        List<List<*>> list2 = new ArrayList<List<*>>();
        list1.add (new ArrayList<Integer>());
        list2.add (new ArrayList<Integer>());
        List<+List<*>> list3;
        list3 = list2;
        list3 = list1;
        List<*> o = list3.get(0); // o is a List

Maybe you are looking for