标签: anonymous-class

Java构造有什么作用?

我是java的新手如果这是一个非常简单的问题,请耐心等待,但我很好奇这个带有{code}的方法调用 - 请参阅下面的代码,以获取方法addSelectionListener中的示例.这样做的目的是什么?我一直在通过文档寻找解释,但似乎无法找到这种做法被称为从不介意任何有用的信息.

    setStatusLine.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {

            String message = "I would like to say hello to you.";
            if (pressed) {
                message = "Thank you for using me";
            }
            setStatusLine(message);
            pressed = !pressed;
        }
    });
Run Code Online (Sandbox Code Playgroud)

感谢您提供的任何帮助或见解

java anonymous-class

8
推荐指数
1
解决办法
253
查看次数

匿名类型可以继承其他类型吗?

根据StringComparer.OrdinalIgnoreCase属性的MSDN文档:

OrdinalIgnoreCase属性实际上返回从StringComparer类派生的匿名类的实例.

这是一个我不熟悉的功能 - 带继承的匿名类型吗?或者通过"匿名类",作者只是意味着"内部类派生自StringComparer客户端代码不可见"?

.net c# anonymous-types anonymous-class stringcomparer

8
推荐指数
2
解决办法
3468
查看次数

单身人士,Enums和匿名内部课程

您可能知道,有些人使用Enum of 1实例声明单例,因为JVM保证总是会有一个没有并发问题的实例来处理...

那么具有多个实例的枚举呢?我们可以说像Enum这样的东西是一种有序的单身人士共享一个共同的界面吗?为什么?

public enum EnumPriceType {

    WITH_TAXES {
        @Override
        public float getPrice(float input) {
            return input*1.20f;
        }
        public String getFormattedPrice(float input) {
            return input*1.20f + " €";
        }
        },

    WITHOUT_TAXES {
        @Override
        public float getPrice(float input) {
            return input;
        }
    },
    ;

    public abstract float getPrice(float input);

    public static void main(String[] args) {
        WITH_TAXES.getFormattedPrice(33f);
    }

}
Run Code Online (Sandbox Code Playgroud)

在此代码中,为什么这不起作用:WITH_TAXES.getFormattedPrice(33f); 如果不通过公共接口无法调用公共方法,那么声明公共方法的兴趣是什么?我想这就是为什么我没有看到任何语法能够为Enum的一个实例声明一个接口.


编辑:

似乎枚举实例是一种特殊的匿名类.因此,我理解为什么你不能称之为该方法.

我的问题有点与:为什么匿名类不能实现一个接口(除了它可能已经实现的接口!)

我完全理解为什么我们不能这样做:

Vehicle veh = new Vehicle() {
    public String getName() {
        return "toto";
    }
}; …
Run Code Online (Sandbox Code Playgroud)

java enums scjp anonymous-class java-ee

8
推荐指数
1
解决办法
3245
查看次数

使用Gson序列化匿名类

你有什么理由不能将匿名类序列化为Json吗?

例:

public class AnonymousTest
{
    private Gson gson = new Gson();

    public void goWild()
    {
        this.callBack(new Result()
        {
            public void loginResult(Result loginAttempt)
            {
                // Output null
                System.out.println(this.gson.toJson(result));   
            }
        });
    }

    public void callBack(Result result)
    {
        // Output null
        System.out.println(this.gson.toJson(result));
        result.loginResult(result);
    }

    public static void main(String[] args) 
    {
        new AnonymousTest().goWild();
    }
}
Run Code Online (Sandbox Code Playgroud)

刚开始吧:)

java anonymous-class gson

8
推荐指数
1
解决办法
3916
查看次数

如何使用成员变量与接口和匿名实现

请检查下面的Java代码:

public class Test
{
  public static void main(String arg[]) throws Throwable
  {
      Test t = new Test();
      System.out.println(t.meth().s);           //OP: Old value
      System.out.println(t.meth().getVal());    //OP: String Implementation
  }
  private TestInter meth()
  {
    return new TestInter()
    {
      public String s = "String Implementation";
      public String getVal()
      {
        return this.s;
      }
    };
  }
}
interface TestInter
{
  String s = "Old value";
  String getVal();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我已匿名创建了一个界面.当我直接访问界面变量时,它将显示"旧值".

t.meth().s =>"旧价值"

通过getVal()方法访问它会返回正确的值,

t.meth().getVal()=>"字符串实现"

我不明白这段代码是如何工作的,有人可以向我解释一下吗?

java interface anonymous-class

8
推荐指数
1
解决办法
2233
查看次数

匿名类的构造函数的访问修饰符是什么?

注意:这是一个自我回答的问题.这可能是一个非常简单的,但我认为值得分享.

假设我有一个匿名类声明:

MyObject myObj1 = new MyObject() {

};
Run Code Online (Sandbox Code Playgroud)

在哪里MyObject:

class MyObject {

    public MyObject() { // explicit public constructor
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

从Java语言规范的这一部分(强调我的):

匿名类不能具有显式声明的构造函数.相反,匿名构造函数是为匿名类隐式声明的.

如果我试图获得public构造函数的数量:

// Number of public constructors; prints 0
System.out.println(myObj1.getClass().getConstructors().length);
Run Code Online (Sandbox Code Playgroud)

它按预期打印零,即匿名构造函数不是public.

它也不是private,因为如果我们从定义匿名类的同一个包中的不同类调用以下内容(通过传递实例myObj1):

myObj1.getClass().getDeclaredConstructor().newInstance();
Run Code Online (Sandbox Code Playgroud)

它完成没有IllegalAccessException.

匿名类中隐式构造函数的访问修饰符是什么?

java constructor anonymous-class

8
推荐指数
1
解决办法
204
查看次数

如何检测匿名类的实例?

从PHP7开始,我们有匿名类.

我们怎么知道an $instance是一个匿名类的实例?

php instance anonymous-class

8
推荐指数
1
解决办法
567
查看次数

Java:在匿名类中定义泛型方法

以下java代码工作正常.

public static void main(String[] arg){
    JPanel p = (new JPanel());
    p.add( new Object(){
        JButton f(JButton x){
            x.setEnabled(false);
            return x;
        }}.f(new JButton("B")) );
    JFrame w = new JFrame("W");
    w.add(p);
    w.pack();
    w.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

如果该方法更改为其通用形式,则程序将失败.

public static void main(String[] arg){
    JPanel p = (new JPanel());
    p.add( new Object(){
        <T> T f(T x){
            x.setEnabled(false);
            return x;
        }}.f(new JButton("B")) );
    JFrame w = new JFrame("W");
    w.add(p);
    w.pack();
    w.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

为什么会失败?如何在匿名类中定义泛型方法?

这个问题是出于学习目的.

java anonymous-class generic-method

8
推荐指数
2
解决办法
1034
查看次数

Optional.orElse 不使用匿名类型编译

我在使用Optionals 和匿名类时遇到了一个奇怪的问题:

public class Foo {
    interface Bar {
    }

    void doesNotCompile() {
        Optional.of(new Bar() {
        }).orElse(new Bar() {
        });
    }

    void doesNotCompile2() {
        final Bar bar = new Bar() {
        };
        Optional.of(new Bar() {
        }).orElse(bar);
    }

    void compiles1() {
        final Bar bar = new Bar() {
        };
        Optional.of(bar).orElse(new Bar() {
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

前两种方法不编译会报错

java: incompatible types: <anonymous test.Foo.Bar> cannot be converted to <anonymous test.Foo.Bar>
Run Code Online (Sandbox Code Playgroud)

我预料到了,因为这两种Bar方法都实现了接口,所以这三种方法都可以工作。我也无法弄清楚为什么第三个选项解决了这个问题。任何人都可以解释一下吗?

java anonymous-class optional

8
推荐指数
3
解决办法
353
查看次数

Lambda 表达式和等效的匿名类

如果我有一个将单方法接口作为参数的方法,我可以这样调用它:

foo(new Bar() {
    @Override
    public String baz(String qux) {
        return modify(qux) + transmogrify(qux);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果我必须foo在一个紧密循环中调用数百万次,我可能更愿意避免每次通过循环创建匿名类的新实例:

final Bar bar = new Bar() {
        @Override
        public String baz(String qux) {
            return modify(qux) + transmogrify(qux);
        }
    };

while (...) {
    foo(bar);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我用 lambda 表达式替换匿名类:

while (...) {
    foo(qux -> modify(qux) + transmogrify(qux));
}
Run Code Online (Sandbox Code Playgroud)

这个 lambda 表达式是否等同于上述匿名类示例中的第一个或第二个片段?

java lambda anonymous-class

8
推荐指数
1
解决办法
110
查看次数