首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

//.addList1(new ArrayList<String>())怎么去掉这两个斜杠

2012-12-19 
//.addList1(new ArrayListString())如何去掉这两个斜杠求问 返回类型如何变成内部类类型。。。。@SuppressW

//.addList1(new ArrayList<String>())如何去掉这两个斜杠
求问 返回类型如何变成内部类类型。。。。

@SuppressWarnings("unused")
public static void main(String[] args) {
List<String> l = new ArrayList<String>(){
private static final long serialVersionUID = -5162194221267685944L;
public List<String> addList(List<String> list ){
this.addAll(new TreeSet<String>(list){
private static final long serialVersionUID = 603932641888586401L;
{
System.out.println(this.getClass());
}
@Override
public Comparator<? super String> comparator() {
return super.comparator();
}
});
return this;
//return Class.forName(this.getClass().toString())this;
}
public List<String> addList1(List<String> list ){
this.addAll(new TreeSet<String>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo("");
}
}){
private static final long serialVersionUID = -603932641888586401L;
});
return this;
}
{
System.out.println(this.getClass());
}
}.addList(new ArrayList<String>())
//.addList1(new ArrayList<String>())
;

}

[最优解释]
匿名类型的方法签名完全取决于父类型,无论它内部定义多少public成员,我们都是无法访问的。除非你为这些public成员定义相应的访问接口,通过访问接口来进行访问。
[其他解释]
反射大神在哪里?
[其他解释]
不懂你要干嘛
[其他解释]


我来也!

问题一:匿名类无法多继承,你需要合成一个公共接口,因为只有通过这个接口才可以暴露出你想使用的addList1,参见ExtraArrayList
问题二:你需要了解下逆变的概念,顺便协变也可以了解下,参见addList方法的返回值




import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
public class Main {

@SuppressWarnings("unused")
    public static void main(String[] args) {
        List<String> l = new ExtraArrayList<String>() {
            private static final long serialVersionUID = -5162194221267685944L;
            public ExtraArrayList<String> addList(List<String> list) { // Contravariant is used
                this.addAll(new TreeSet<String>(list){
                    private static final long serialVersionUID = 603932641888586401L;
                    {
                        System.out.println(this.getClass());
                    }


                    @Override
                    public Comparator<? super String> comparator() {
                        return super.comparator();
                    }
                });
                return this;
//              return Class.forName(this.getClass().toString())this;
            }
            public List<String> addList1(List<String> list ){
                this.addAll(new TreeSet<String>(new Comparator<String>() {
                    public int compare(String o1, String o2) {
                        return o1.compareTo("");
                    }
                }){
                    private static final long serialVersionUID = -603932641888586401L;
                });
                return this;
            }
        {
            System.out.println(this.getClass());
        }
        }.addList(new ArrayList<String>())
        .addList1(new ArrayList<String>())
        ;
         
    }
}
interface ExtraListMethod<T> {
public List<T> addList1(List<String> list);
}
abstract class ExtraArrayList <T> extends ArrayList<T> implements ExtraListMethod<T> {
private static final long serialVersionUID = 1494777471260167L;
}


[其他解释]
逆变和协变的概念
[其他解释]
引用:
我来也!

问题一:匿名类无法多继承,你需要合成一个公共接口,因为只有通过这个接口才可以暴露出你想使用的addList1,参见ExtraArrayList
问题二:你需要了解下逆变的概念,顺便协变也可以了解下,参见addList方法的返回值



Java code?12345678910111213141516171819202122232425262728293031323334……

明白你的做法,你这样就是给匿名类一个名字。。。。
在不给名字的情况下,如何使用反射让addList返回类型变成匿名类?
[其他解释]

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;

public class Main2 {

@SuppressWarnings("unused")
    public static void main(String[] args) throws Exception {
        List<String> l = new ArrayList<String>() {
            private static final long serialVersionUID = -5162194221267685944L;
            public List<String> addList(List<String> list) { // Contravariant is used
                this.addAll(new TreeSet<String>(list){
                    private static final long serialVersionUID = 603932641888586401L;
                    {
                        System.out.println(this.getClass());
                    }
                    @Override
                    public Comparator<? super String> comparator() {
                        return super.comparator();
                    }
                });
                return this;
//              return Class.forName(this.getClass().toString())this;
            }
            public List<String> addList1(List<String> list ){
                this.addAll(new TreeSet<String>(new Comparator<String>() {
                    public int compare(String o1, String o2) {
                        return o1.compareTo("");
                    }
                }){
                    private static final long serialVersionUID = -603932641888586401L;


                });
                return this;
            }
        {
            System.out.println(this.getClass());
        }
        }.addList(new ArrayList<String>())
        //.addList1(new ArrayList<String>())
        ;
        Method m = l.getClass().getMethod("addList1", List.class);
        m.invoke(l, new ArrayList<String>());
    }
}


[其他解释]
引用:
Java code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Comparator;impor……
如何获得匿名类的类型才是关键啊
[其他解释]
引用:
匿名类型的方法签名完全取决于父类型,无论它内部定义多少public成员,我们都是无法访问的。除非你为这些public成员定义相应的访问接口,通过访问接口来进行访问。
你的想法是对的 没名字访问太难

热点排行