Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
666 views
in Technique[技术] by (71.8m points)

generics - Java override constructor using List<CustomObjects> - "same erasure" error

Hi I want to override constructor in custom class MyList.

Code below can be compiled, I receive "same erasure" error. For compiler List<CustomClass1> is same type as List<CustomClass2>

Can someone suggest me how to solve this. I try using List<Object> and using instanceof but I can't solve this but without success

private static class MyList {

    private int type;

    public MyList (List<CustomClass1> custom1) {
                 type = 1;
    }

    public MyList (List<CustomClass2> custom2) {
                 type = 2;

    }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Because of what is called type erasure the generic type information is lost during compilation. Both compile down to public MyList(List l) when the type information is erased. This is just how Java works. Generics are only available during compile time.

When a generic type is instantiated, the compiler translates those types by a technique called type erasure — a process where the compiler removes all information related to type parameters and type arguments within a class or method. Type erasure enables Java applications that use generics to maintain binary compatibility with Java libraries and applications that were created before generics.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...