标签: anonymous-class

从匿名内部类设置外部变量

有没有办法从Java中的匿名内部类访问调用者范围的变量?

以下是了解我需要的示例代码:

public Long getNumber(final String type, final String refNumber, final Long year) throws ServiceException {
    Long result = null;
    try {
        Session session = PersistenceHelper.getSession();
        session.doWork(new Work() {
                public void execute(Connection conn) throws SQLException {
                    CallableStatement st = conn.prepareCall("{ CALL PACKAGE.procedure(?, ?, ?, ?) }");
                    st.setString(1, type);
                    st.setString(2, refNumber);
                    st.setLong(3, year);
                    st.registerOutParameter(4, OracleTypes.NUMBER);
                    st.execute();
                    result = st.getLong(4) ;
                }
            });
    } catch (Exception e) {
        log.error(e);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

代码位于DAO服务类中.显然它不会编译,因为它要求result是final,如果是 - 它不会编译,因为我尝试修改最终的var.我被JDK5绑定了.除了doWork()完全放弃之外,有没有办法从内部设置结果值doWork()

java anonymous-class

52
推荐指数
5
解决办法
4万
查看次数

是否有可能使匿名类继承另一个类?

这是一个很长的镜头,但我有一个有趣的编码情况,我希望能够动态创建匿名类,但能够将它们作为参数传递给期望接口或子类的方法.换句话说,我希望能够做到这样的事情:

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);
Run Code Online (Sandbox Code Playgroud)

除了使用命名类之外,还有什么方法可以做到这一点吗?

c# anonymous-class

50
推荐指数
2
解决办法
9582
查看次数

转换为匿名类型

我今天遇到了以下问题,我想知道我的问题是否有解决方案.

我的想法是构建匿名类并将其用作WinForm BindingSource的数据源:

public void Init()
{
    var option1 = new
                  {
                      Id = TemplateAction.Update,
                      Option = "Update the Templates",
                      Description = "Bla bla 1."
                  };

    var option2 = new
                  {
                      Id = TemplateAction.Download,
                      Option = "Download the Templates",
                      Description = "Bla bla 2."
                  };

    var list = new[] {option1, option2}.ToList();

    bsOptions.DataSource = list; // my BindingSource

    // cboTemplates is a ComboBox
    cboTemplates.DataSource = bsOptions; 
    cboTemplates.ValueMember = "Id";
    cboTemplates.DisplayMember = "Option";

    lblInfoTemplates.DataBindings.Add("Text", bsOptions, "Description");
}
Run Code Online (Sandbox Code Playgroud)

到目前为止工作正常.

我遇到的问题是从BindingSource的"Current"属性中获取Id,因为我无法将其强制转换为匿名类型:

private void cmdOK_Click(object …
Run Code Online (Sandbox Code Playgroud)

c# anonymous-types anonymous-class

49
推荐指数
4
解决办法
4万
查看次数

Anonymous-Inner类显示不需要的修饰符

据我了解,下面的代码应该打印出来true.

但是,当我运行此代码时,它正在打印false.

来自匿名类的 Java文档 15.9.5.:

匿名类总是隐式最终的

public class Test {
    public static void main(String args[]) {
        Object o = new Object() {
        };
        System.out.println("Annonymous class is final: " + Modifier.isFinal(o.getClass().getModifiers()));
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解这种行为.

java final anonymous-class jls

45
推荐指数
3
解决办法
1742
查看次数

匿名vs命名的内部类? - 最佳做法?

我有一个类,我们称之为LineGraph,它呈现一个折线图.我需要对它进行子类化,但派生类仅在一个地方使用,并且与使用它的类耦合.所以我使用内部类.

我看到两种方法:

匿名内部阶级

public class Gui {
    LineGraph graph = new LineGraph() {
        // extra functionality here.
    };
}
Run Code Online (Sandbox Code Playgroud)

命名内部类

public class Gui {
    MyLineGraph graph = new MyLineGraph();

    private class MyLineGraph extends LineGraph {
        // extra functionality here.
    }
}
Run Code Online (Sandbox Code Playgroud)

我不是匿名内部阶级的粉丝,因为坦率地说,我认为它看起来真的很难看.但是在一个仅在一个地方使用的子类的情况下,命名的内部类是否过度杀伤?什么是公认的做法?

java oop inheritance class anonymous-class

44
推荐指数
5
解决办法
3万
查看次数

我可以在C#中为匿名类指定有意义的名称吗?

我们都知道,当我们创建一个这样的匿名类时:

var Employee = new { ID = 5, Name= "Prashant" };
Run Code Online (Sandbox Code Playgroud)

...在运行时它将是类型:

<>f__AnonymousType0<int,string>
Run Code Online (Sandbox Code Playgroud)

有没有办法为这些类指定有意义的名称?

.net c# anonymous-class c#-3.0

43
推荐指数
6
解决办法
4万
查看次数

Python有没有类似Java的匿名内部类?

在Java中,您可以使用匿名内部类定义新的内联类.当您只需要重写该类的单个方法时,这非常有用.

假设您要创建一个子类OptionParser,只覆盖一个方法(例如exit()).在Java中,您可以编写如下内容:

new OptionParser () {

    public void exit() {
        // body of the method
    }
};
Run Code Online (Sandbox Code Playgroud)

这段代码创建了一个匿名类,OptionParser它只扩展和覆盖该exit()方法.

Python中有类似的习惯用法吗?在这些情况下使用哪种成语?

python class anonymous-class

39
推荐指数
6
解决办法
2万
查看次数

在Java中使用匿名类被认为是不好的风格还是好的?

我知道在实现Listener和类似的东西时,匿名类可以保存输入.他们试图取代一些封闭用法.

但社区对这种语言特征的价值有何看法?它是否有意义并且您经常使用它吗?它是否使代码更清晰,更易理解,更易于维护?或者匿名类使代码可读性降低?

您对此有什么看法,请举例说明/支持您的意见吗?

java coding-style anonymous-class

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

我可以在C++中创建匿名类并捕获像Java中的外部变量吗?

在Java中,当我需要一个回调函数时,我必须实现一个匿名类.在匿名类中,我可以访问外部变量final.

现在我在C++中做同样的事情.我理解C++ lambda工作得更好但有时候我需要传入许多带有匿名类的函数,我只需要传入一个实例.

我尝试了以下示例.它适用于GCC 4.3.4.

class IA {
public:
  virtual int f(int x) = 0;  
};

int main() {
    class : public IA {
        int f(int x) { return x + 1; }
    } a;
    doFancyWork(&a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有可能像这样捕获外部变量吗?

int main() {
    int y = 100; // mark y as final if possible
    class : public IA {
        int f(int x) { return x + y; }
    } a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

更新:

第二个例子不会编译.错误在这里,

prog.cpp: In member …
Run Code Online (Sandbox Code Playgroud)

c++ lambda anonymous-class c++11

37
推荐指数
3
解决办法
3万
查看次数

有没有办法将动态或匿名对象转换为强类型的声明对象?

如果我有一个动态对象或匿名对象,其结构与强类型对象的结构完全匹配,是否有.NET方法从动态对象构建类型化对象?

我知道我可以使用LINQ dynamicList.Select(dynamic => new Typed { .... }类型的东西,或者我可以使用Automapper,但我想知道是否没有专门为此构建的东西?

.net anonymous-class dynamicobject c#-4.0

37
推荐指数
3
解决办法
3万
查看次数