小编Arn*_*her的帖子

Proguard在Java中删除Anonymous类中的Anonymous类

我有一个问题,当你在匿名类中声明一个匿名类时,Proguard不工作.这是一个基本示例中的样子:

public class Class1 {
  public void function1 (){
     new Class2(){
        @Override
        public void function2(){
          new Class3(){
            @Override
            public void function3(){
              // do something
            }
          }
        }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

在gradle构建脚本期间,正在执行proguard.现在我收到以下错误:

 my.package.Class1$2$1: can't find enclosing method 'void function2()' in program class my.package.Class1$2
Run Code Online (Sandbox Code Playgroud)

如果我将代码更改为只有1个"级别"的匿名类,则proguard正在完成而没有错误.这有效:

public class Class1 {
  public void function1 (){
      Class3 class3Instance = new Class3(){
            @Override
            public void function3(){
              // do something
            }
      }
      new Class2(){
        @Override
        public void function2(){
           //do something with class3Instance  
        }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

该项目是一个Android项目,但据我所知,这应该不重要. …

java android proguard anonymous-class

12
推荐指数
1
解决办法
651
查看次数

使用couchDB甚至使用erlang的过滤器非常慢

我有一个数据库(couchDB),其中包含大约90,000个文档.这些文件非常简单:

{
   "_id": "1894496e-1c9e-4b40-9ba6-65ffeaca2ccf",
   "_rev": "1-2d978d19-3651-4af9-a8d5-b70759655e6a",
   "productName": "Cola"
}
Run Code Online (Sandbox Code Playgroud)

现在我希望有一天能够将这个数据库与移动设备同步.显然,90k的文档不应该同时使用手机.这就是我编写过滤函数的原因.这些应该按"productName"过滤.首先在Jlang中稍后在Erlang中获得性能.这些Filter函数在JavaScript中如下所示:

{
   "_id": "_design/local_filters",
   "_rev": "11-57abe842a82c9835d63597be2b05117d",
   "filters": {
       "by_fanta": "function(doc, req){ if(doc.productName == 'Fanta'){ return doc;}}",
       "by_wasser": "function(doc, req){if(doc.productName == 'Wasser'){ return doc;}}",
       "by_sprite": "function(doc, req){if(doc.productName == 'Sprite'){ return doc;}}"
   }
}
Run Code Online (Sandbox Code Playgroud)

在Erlang中这样:

{
   "_id": "_design/erlang_filter",
   "_rev": "74-f537ec4b6508cee1995baacfddffa6d4",
   "language": "erlang",
   "filters": {
       "by_fanta": "fun({Doc}, {Req}) ->  case proplists:get_value(<<\"productName\">>, Doc) of <<\"Fanta\">> -> true; _ -> false end end.",
       "by_wasser": "fun({Doc}, {Req}) ->  case proplists:get_value(<<\"productName\">>, Doc) of <<\"Wasser\">> -> true; _ -> …
Run Code Online (Sandbox Code Playgroud)

javascript erlang couchdb view filter

11
推荐指数
1
解决办法
1129
查看次数

C++在抽象类的函数定义中

我想知道是否可以在函数中执行侦听器/抽象类的Java样式实现.

在Java中,如果我有一个如下界面:

public interface ExampleListener {
    public void callExampleListenerMethod();
}
Run Code Online (Sandbox Code Playgroud)

我知道可以在一个方法中实现这个接口,以便快速使用这样的东西:

someRandomJavaFunction{
   //do some stuff
   ExampleListener object = new ExampleListener() {
        @Override
        public void callExampleListenerMethod() {
            //do other stuff
        }
   });
}
Run Code Online (Sandbox Code Playgroud)

如果我有一个像这样定义的抽象类,现在可以在C++中以某种方式完成第二部分

class ExampleListener {

  public:
     virtual ~ExampleListener(); //virtual destructor is apparently important

     virtual void callExampleListenerMethod() = 0; //method to implement

};
Run Code Online (Sandbox Code Playgroud)

当然我可以简单地将它用作Base类,我不得不实现该方法.但是有可能对java进行类似的"动态"实现吗?

c++ abstract-class interface abstract

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

使用c ++ _ shared stl将库构建与ndk r10链接到使用ndk r13的项目构建

我们有一个用android ndk r10e构建的预建库.我们正在开发的项目正在使用ndk r13b进行构建.当尝试链接库时,我们的构建失败,并且包含ndk stl提供的类(如字符串)的库的所有函数都有未定义的引用错误.错误:

Foo.cpp:39: undefined reference to `namespaceFoo::Bar::fooBar(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)'
Run Code Online (Sandbox Code Playgroud)

我们通过使用ndk 13构建它来修复此问题与另一个库.不幸的是,对于其中一个必要的库,它是我们无法控制的.

我们将c ++ _ shared lib链接为stl.

有没有办法让这项工作?我们能以某种方式将库构建与ndk r10正确链接吗?

编辑:明确我们使用c ++ _ shared stl.这似乎是一个底层问题.

android stl android-ndk ndk-build

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

SSL_shutdown()返回-1,而errno为0

在我的C ++应用程序中,我使用OpenSSL使用非阻塞BIO连接到服务器。我正在为Mac OS X和iOS开发。

第一次调用SSL_shutdown()返回0。这意味着我必须SSL_shutdown()再次调用:

可能会出现以下返回值:

0关闭尚未完成。如果将执行双向关闭,则第二次调用SSL_shutdown()。SSL_get_error的输出可能会产生误导,因为即使没有发生错误,也可能会标记错误的SSL_ERROR_SYSCALL。

<0关闭不成功,因为在协议级别发生了致命错误或发生了连接故障。如果需要采取措施继续非阻塞BIO的操作,也会发生这种情况。使用返回值ret调用SSL_get_error找出原因。

https://www.openssl.org/docs/ssl/SSL_shutdown.html

到目前为止,上帝。问题是在第二次致电时发生SSL_shutdown()。这将返回-1,表示发生了错误(请参见上文)。现在,如果我检查SSL_get_error()得到错误SSL_ERROR_SYSCALL,则该错误又意味着发生了系统错误。但是现在抓住了。如果我检查errno它返回0->未知错误。到目前为止,我对该问题的了解是,这可能意味着该服务器只是“挂断”了,但是说实话,这并不令我满意。

这是我关闭的实现:

int result = 0;
int shutdownResult;
while ((shutdownResult = SSL_shutdown(sslHandle)) != 1) { //close connection 1 means everything is shut down ok
  if (shutdownResult == 0) { //we are supposed to call shutdown again
    continue;
  } else if (SSL_get_error(sslHandle, shutdownResult) == SSL_ERROR_WANT_READ) {
                [...] //omitted want read code, in this case the application never reaches this point …
Run Code Online (Sandbox Code Playgroud)

c++ ssl openssl nonblocking system-error

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