C:\ Program Files \ Java \ jdk1.6.0_05 \ CoreJava \ v1 \ v1ch2 \ WelcomeApplet> dir 驱动器C中的卷没有标签。 卷序列号是2041-64E7 C:\ Program Files \ Java \ jdk1.6.0_05 \ CoreJava \ v1 \ v1ch2 \ WelcomeApplet目录 2009-07-02 23:54。 2009-07-02 23:54 2004-09-06 14:57 582 WelcomeApplet.html 2004-09-06 15:04 1,402 WelcomeApplet.java 2个文件1,984字节 2个Dir(s)2,557,210,624字节免费 C:\ Program Files \ Java \ jdk1.6.0_05 \ […]
它看起来像匿名类提供了闭包的基本function,是真的吗?
这是一个很长的一步,但我有一个有趣的编码情况,我希望能够创build匿名类的能力,但能够将它们作为parameter passing给期望接口或子类的方法。 换句话说,我希望能够做到这样的事情: public class MyBase { … } public void Foo(MyBase something) { … } … var q = db.SomeTable.Select(t => new : MyBase // yeah, I know I can't do this… { t.Field1, t.Field2, }); foreach (var item in q) Foo(item); 除了使用命名类之外,还有什么办法可以做到吗?
我有一个类,我们称之为LineGraph,它呈现一个线条图。 我需要inheritance它,但派生类只在一个地方使用,并耦合到使用它的类。 所以我正在使用一个内部类。 我看到两种方法来做到这一点: 匿名的内部类 public class Gui { LineGraph graph = new LineGraph() { // extra functionality here. }; } 命名的内部类 public class Gui { MyLineGraph graph = new MyLineGraph(); private class MyLineGraph extends LineGraph { // extra functionality here. } } 我不是匿名的内部类的粉丝,因为坦率地说,我认为它看起来真的很丑。 但是对于只在一个地方使用的子类来说,是一个命名的内部类的矫枉过正? 什么是公认的做法?
我们都知道,当我们创build一个这样的匿名类: var Employee = new { ID = 5, Name= "Prashant" }; …在运行时它将是types的: <>f__AnonymousType0<int,string> 有什么办法可以为这些类指定一个有意义的名字吗?
我有以下代码片段: public class A { public static void main(String[] arg) { new Thread() { public void run() { System.out.println("blah"); } }; } } 在这里,如何在不创build线程类的实例的情况下为线程调用start()方法?
有没有可能在Java中创build一个接口的实例? 我已经读过使用内部匿名类的地方,我们可以这样做,如下所示: interface Test { public void wish(); } class Main { public static void main(String[] args) { Test t=new Test() { public void wish() { System.out.println("output: hello how ru"); } }; t.wish(); } } cmd> javac Main.java cmd> java Main output: hello how ru 这里正确吗?
由于Java8最近刚刚发布,它的全新lambdaexpression式看起来非常酷,所以我想知道这是否意味着我们习以为常的匿名类的消亡。 我一直在研究一些这方面的知识,并且发现了一些关于Lambdaexpression式如何系统地replace这些类的很酷的例子,比如Collection的Sort方法,它用来得到一个Comparator的Anonymous实例来执行sorting: Collections.sort(personList, new Comparator<Person>(){ public int compare(Person p1, Person p2){ return p1.firstName.compareTo(p2.firstName); } }); 现在可以使用Lambdas完成: Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName)); 看起来令人惊讶的简洁。 所以我的问题是,有什么理由继续在Java8中使用这些类而不是Lambdas? 编辑 同样的问题,但在相反的方向,使用Lambdas而不是匿名类的好处是什么,因为Lambdas只能用于单一的方法接口,这个新function只是一个仅在less数情况下使用的快捷方式,还是真的有用吗?
给出以下代码: public interface Selectable { public void select(); } public class Container implements Selectable { public void select() { … } public void createAnonymousClass() { Selectable s = new Selectable() { public void select() { //see comment below. } }; } } 我想从我的匿名类的select()方法中访问Container.select() 。 但是, this.select()会再次调用匿名类的select()方法。 我的build议是: 在Container中引入一个字段,例如 private Container self = this; 现在我可以通过在匿名类中调用self.select()来访问Container.select() 。 […]
interface TestA { String toString(); } public class Test { public static void main(String[] args) { System.out.println(new TestA() { public String toString() { return "test"; } }); } } 结果是什么? 一个testing B. null C.在运行时抛出exception。 D.编译失败,因为第1行中有错误。 E.编译失败,因为第4行有错误。 F.编译失败,因为第5行有错误。 这个问题的答案是什么?为什么? 我还有一个关于这个问题的查询。 在第4行中,我们创build了一个对象A.是否可以创build一个接口的对象?