标签: anonymous-class

对于并行的小型已知冻结过程,是一个好的做法是创建匿名的AsyncTask吗?

例如:你会做一些需要几秒钟但不想冻结你的用户界面的东西,对吗?您可以使用AsyncTask但不想创建外部(或内部)类来解决小的冻结问题.

那么,这是一个很好的实践吗?

package com.example.stackoverflowsandbox;

import android.os.AsyncTask;

public class Foo {
    // E.g. before call foo method you change you Activity to loading state.
    private void foo() {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground( final Void ... params ) {
                // something you know that will take a few seconds

                return null;
            }

            @Override
            protected void onPostExecute( final Void result ) {
                // continue what you are doing...

                Foo.this.continueSomething();
            }
        }.execute();
    }

    private void continueSomething() {
        // some …
Run Code Online (Sandbox Code Playgroud)

multithreading android anonymous-class ui-thread android-asynctask

20
推荐指数
1
解决办法
1万
查看次数

在Java中设计规则引擎的有效设计模式/风格是什么?

我正在用Java实现规则引擎.我的规则引擎预定义了独立规则和规则集的列表.这里的规则只是一个逻辑.规则集将这些简单规则组合成有序集.

我是一个体面的java开发人员,但不是大师.我的同事为此建议了两个设计.我对这两个设计都不满意,因此这个问题.

我的项目中的规则示例: 假设输入是美国的位置,例如,美国加利福尼亚州圣巴巴拉或美国俄亥俄州,通常采用一些定义明确的城市,州和国家/地区字段.然后我可以有如下规则:

规则1:城市不为空
规则2:状态不为空
规则3:国家等于美国或美国
规则4:州长等于2

我的项目中的RuleSet示例:

RULESET:有效位置此规则集是上面定义的规则的有序集合.

我实现的两个设计模板如下:

设计1:将Enum与匿名内部类一起使用

Rule.java

public interface Rule {
    public Object apply(Object object);
}
Run Code Online (Sandbox Code Playgroud)

NlpRule.java

public enum NlpRule {
    CITY_NOT_NULL(new Rule() {

        @Override
        public Object apply(Object object) {
            String location = (String) object;
            String city = location.split(",")[0];
            if (city != null) {
                return true;
            }
            return false;
        }

    }),

    STATE_NOT_NULL(new Rule() {

        @Override
        public Object apply(Object object) {
            String location = (String) object;
            String state = location.split(",")[1]; …
Run Code Online (Sandbox Code Playgroud)

java enums design-patterns class anonymous-class

20
推荐指数
2
解决办法
2728
查看次数

将最终变量传递给匿名类

通过构造函数传递给匿名类的最终变量中,Jon Skeet提到变量通过自动生成的构造函数传递给匿名类实例.在这种情况下,为什么我无法使用反射来查看构造函数:

public static void main(String... args) throws InterruptedException {
final int x = 100;
new Thread() {
    public void run() {
        System.out.println(x);      
        for (Constructor<?> cons : this.getClass()
                .getDeclaredConstructors()) {
            StringBuilder str = new StringBuilder();
            str.append("constructor : ").append(cons.getName())
                    .append("(");
            for (Class<?> param : cons.getParameterTypes()) {
                str.append(param.getSimpleName()).append(", ");
            }
            if (str.charAt(str.length() - 1) == ' ') {
                str.replace(str.length() - 2, str.length(), ")");
            } else
                str.append(')');
            System.out.println(str);
        }
    }

}.start();
Thread.sleep(2000);
Run Code Online (Sandbox Code Playgroud)

}

输出是:

100
constructor : A$1()
Run Code Online (Sandbox Code Playgroud)

java constructor final anonymous-class inner-classes

19
推荐指数
2
解决办法
1507
查看次数

从匿名类调用新定义的方法

我实例化了一个匿名类的对象,我添加了一个新方法.

Date date = new Date() {
    public void someMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能从外部调用此方法,类似于:

date.someMethod();
Run Code Online (Sandbox Code Playgroud)

java anonymous-methods anonymous-class

18
推荐指数
4
解决办法
8992
查看次数

从内部匿名类访问外部匿名类

我只是好奇.有没有办法访问另一个匿名类中的匿名类中的父级?

我让这个例子创建一个JTable子类(匿名类)覆盖changeSelection,在里面我创建另一个匿名类.

MCVE:

public class Test{

    public static void main(String args []){

        JTable table = new JTable(){

            @Override
            public void changeSelection(
                final int row, final int column,
                final boolean toggle, final boolean extend) {

                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        super.changeSelection(row, column, toggle, extend); 
                        //more code here
                    }
                });
            }
        };

    }//end main

}//end test 
Run Code Online (Sandbox Code Playgroud)

我怎么能参考super.changeSelection(..)

java anonymous-class

17
推荐指数
1
解决办法
3979
查看次数

变量"有效最终"是什么意思?

匿名类的文档说明

匿名类无法访问其封闭范围中未声明为final或者有效final的局部变量.

我不明白变量是"有效最终"是什么意思.有人能提供一个例子来帮助我理解这意味着什么吗?

java final anonymous-class

17
推荐指数
2
解决办法
1732
查看次数

所有最终变量都是由匿名类捕获的吗?

我以为我知道答案,但是在一小时左右的搜索后我找不到任何确认.

在这段代码中:

public class Outer {

    // other code

    private void method1() {
        final SomeObject obj1 = new SomeObject(...);
        final SomeObject obj2 = new SomeObject(...);
        someManager.registerCallback(new SomeCallbackClass() {
            @Override
            public void onEvent() {
                 System.out.println(obj1.getName());
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

假设registerCallback将其参数保存在某处,以便匿名子类的对象将存活一段时间.显然,这个对象必须保持一个引用,obj1以便onEvent在调用时可以工作.

但是鉴于该对象没有使用obj2,它是否仍然保持引用obj2,以便obj2在对象存在时不能进行垃圾收集?我的印象是所有可见final(或有效的最终)局部变量和参数都被捕获,因此只要对象存活就无法进行GC,但我找不到任何说明这种或那种方式的东西.

它是依赖于实现的吗?

JLS中有一节可以解答这个问题吗?我无法在那里找到答案.

java anonymous-class

17
推荐指数
2
解决办法
1050
查看次数

动态构建匿名类混淆

我正在尝试使用反射创建匿名类的实例.但偶尔我会在瞬间看到奇怪的行为.

请查看这些类似的代码片段

public class HideAndSeek {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws IllegalAccessException, InstantiationException{

        final String finalString = "I'm final :)";

        Object object2 = new Object(){

            {
                System.out.println("Instance initializing block");
                System.out.println(finalString);
            }           

            private void hiddenMethod() {
                System.out.println("Use reflection to find me :)");
            }
        };

        Object tmp = object2.getClass().newInstance();
    }

}
Run Code Online (Sandbox Code Playgroud)

此代码运行良好,并且预期输出

Instance initializing block
I'm final :)
Instance initializing block
I'm final :)
Run Code Online (Sandbox Code Playgroud)

在此之后,我决定以简单的方式更改代码(只是添加了java.util.Calendar)

import java.util.Calendar;

    public class HideAndSeek {

        @SuppressWarnings("unchecked")
        public static void main(String[] args) throws IllegalAccessException, InstantiationException{ …
Run Code Online (Sandbox Code Playgroud)

java reflection calendar anonymous-class

16
推荐指数
1
解决办法
2136
查看次数

匿名类上的NotSerializableException

我有一个过滤项目的界面:

public interface KeyValFilter extends Serializable {
    public static final long serialVersionUID = 7069537470113689475L;
    public boolean acceptKey(String iKey, Iterable<String> iValues);
    public boolean acceptValue(String iKey, String value);
}
Run Code Online (Sandbox Code Playgroud)

以及包含类型成员的类KeyValFilter.

public class KeyValFilterCollector extends KeyValCollectorSkeleton {
    private static final long serialVersionUID = -3364382369044221888L;
    KeyValFilter filter;
    public KeyValFilterCollector(KeyValFilter filter) {
        this.filter=filter;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试KeyValFilterCollector使用匿名类实现时KeyValFilter:

new KeyValFilterCollector(new KeyValFilter() {
        private static final long serialVersionUID = 7069537470113689475L;
        public boolean acceptKey(String iKey, Iterable<String> iValues) {
            for (String value : iValues) …
Run Code Online (Sandbox Code Playgroud)

java serialization hadoop interface anonymous-class

16
推荐指数
2
解决办法
6597
查看次数

LINQ选择具有匿名类型和用户定义类型的查询

匿名类在c#中只读取属性.这通常用于在linq select query中声明从数据库中获取特定值.在我的代码中,我有以下查询.让我混淆使用新语句选择匿名类的新对象的事情.我有一个模型类StudentClerkshipsLogModel.当我使用模型名称时,查询结果允许编辑.

var query = (from entity in _tblStudentClerkshipsLog.GetQueryable()
             where entity.StudentID == intStudentID                             
             select new StudentClerkshipsLogModel
             {
                 StudentClerkshipID = entity.StudentClerkshipID,
                 StudentID = entity.StudentID,
                 ClerkshipID = entity.ClerkshipID,
             }).ToList();
Run Code Online (Sandbox Code Playgroud)

当我newselect声明后没有提到类型时我无法退出.编译器引发错误.匿名对象是只读的.

var query = (from entity in _tblStudentClerkshipsLog.GetQueryable()
             where entity.StudentID == intStudentID                             
             select new 
             {
                 StudentClerkshipID = entity.StudentClerkshipID,
                 StudentID = entity.StudentID,
                 ClerkshipID = entity.ClerkshipID,
             }).ToList()
Run Code Online (Sandbox Code Playgroud)

我的问题是linq如何以不同方式绑定两个查询.两个查询都有动态绑定,或者第一个是静态的.

谢谢

c# linq anonymous-class dynamic-binding

16
推荐指数
2
解决办法
1万
查看次数