小编Mar*_*tin的帖子

在eclipse中缺少必需的库,用于非必需的库

我正在使用Eclipse for Java Develepers(在Windows 7上运行的Juno x64).

我有一个项目,我正在尝试一个我不再需要的jar(args4j),所以已经删除了依赖项.在某些时候,我的电脑出乎意料地失去了电力,我已经重新启动了Eclipse.

我的项目现在有错误"Project 'MyProject' is missing required library: '/path/to/args4j-2.0.21.jar'".在删除依赖项后,我正在使用该项目一段时间没有任何问题.

在Project Properties> Java Build Path下,任何选项卡中都没有对args4j的引用.

我试过了:

  • 在我的项目中的所有文件中搜索字符串"args4j",但没有匹配项.内部有很多参考文献<workspace>\.metadata\.plugins\org.eclipse.core.resources\.history\,但我不愿意因为害怕我可能会破坏别的东西来触摸它们.
  • [编辑] clean rebuild无效.

有谁知道Eclipse为什么抱怨,以及我可以做些什么来修复它?

java eclipse

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

目标C中数组的长度

我没有在任何问题中找到答案.我正在将一个整数数组传递给一个函数.现在我想遍历数组.但是,因为在C,C++中工作的东西很简单,使用arrayname.length给出了数组中的元素数量.找到它的方法是什么?[NSArrayObject length]适用于NSArray类型,但我希望它用于int [].甚至没有[XYZ计数]工作....所以想要另一种方式找到它.

arrays objective-c find

32
推荐指数
6
解决办法
8万
查看次数

Android Maps API 2中的多个信息窗口

我正在使用Maps API v2在Android上编写基于地图的应用.

我已经在地图上放置了标记,并且可以显示这些标记的自定义信息窗口,但AFAICT一次只能显示一个信息窗口.有几个我想要不同行为的地方:我想总是显示多个窗口的信息窗口,而不显示标记.

我想我可以编写一些代码来将信息窗口绘制到位图支持的画布,并将这些位图作为标记"图标"传递给地图.这种总结了我正在努力做的事情:我希望信息窗口成为我的标记.但是这种方法需要我编写自己的窗口框架绘图代码,我宁愿避免.

是否有更好的方法支持一次显示多个信息窗口?

android google-maps

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

Android中的安全枚举自定义属性

我认为这种情况很常见.我有一个Java枚举:

public enum Flavour { CHOCOLATE, STRAWBERRY }
Run Code Online (Sandbox Code Playgroud)

我在attrs.xml中定义了一个自定义属性:

<attr name="flavour">
    <enum name="chocolate" value="0" />
    <enum name="strawberry" value="1" />
</attr>
Run Code Online (Sandbox Code Playgroud)

但这感觉非常脆弱.它依赖于我正确地从属性手动映射到枚举.

如果有人在枚举Flavor的末尾添加"SARDINE",那么它显然不会自动添加到属性定义中.这很公平.

但更糟糕的是,如果有人在枚举的中间添加"SARDINE",它将破坏使用"草莓"的xml布局.

人们如何克服这一点?我考虑使用字符串(和使用Flavour.valueOf()),但我希望那里可能有一个更清洁的解决方案.

android android-custom-attributes

9
推荐指数
1
解决办法
563
查看次数

将泛型参数绑定到Class <?>时取消选中

我有一些代码,它采用外部提供的类名,并且需要构造一个实现某个接口的实例,让我们调用它Foo.

作为这个过程的一部分,我想拥有以下功能:

private static Class<? extends Foo> fooFromClassName(String name) throws ClassNotFoundException {
    return (Class<? extends Foo>) Class.forName(name);
}
Run Code Online (Sandbox Code Playgroud)

这显然会导致未经检查的警告,因为它确实是不安全的 - 调用者可能已经为我们所知道的所有人请求了"java.lang.Long".我最终喜欢这种方法来保证如果它不抛出,那么返回Class表示一个Foo实现.

我目前最好的解决方案是:

private static Class<? extends Foo> fooFromClassName(String name) throws ClassNotFoundException {
    Class<?> impl = Class.forName(name);
    if (Foo.class.isAssignableFrom(impl)) {
        @SuppressWarnings("unchecked")
        Class<? extends Foo> foo = (Class<? extends Foo>) impl;
        return foo;
    } else {
        // Throw something - ClassCastException perhaps.
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?有没有办法做到这一点不需要明确抑制警告?

java generics reflection

7
推荐指数
1
解决办法
221
查看次数

避免在tomcat/spring-boot中由慢客户端引起的线程饥饿

我有一个简单的spring-boot应用程序.它有一个端点,它从请求体中获取一个对象,并且什么都不做:

@Controller
class FooController {
    @RequestMapping(method=RequestMethod.POST, value="/foo")
    public void postFoo(@RequestBody Foo foo) {
    }
}
Run Code Online (Sandbox Code Playgroud)

非常简单的东西.

然后我通过telnet连接并通过适当的标头发送,好像我要发送一个json编码的对象,但从不发送请求体 - 我只是让连接挂起.

运行jstack,我可以看到tomcat已经将请求发送到spring.春天把它寄给了杰克逊.杰克逊被NIO阻止等待更多数据进入.

Thread 12128: (state = BLOCKED)
 - sun.misc.Unsafe.park(boolean, long) @bci=0 (Compiled frame; information may be imprecise)
 - java.util.concurrent.locks.LockSupport.parkNanos(java.lang.Object, long) @bci=20, line=226 (Compiled frame)
 ...
 - org.apache.tomcat.util.net.NioEndpoint$KeyAttachment.awaitLatch(java.util.concurrent.CountDownLatch, long, java.util.concurrent.TimeUnit) @bci=18, line=1582 (Compiled frame)
 ...
 - org.apache.tomcat.util.net.NioSelectorPool.read(java.nio.ByteBuffer, org.apache.tomcat.util.net.NioChannel, java.nio.channels.Selector, long) @bci=7, line=227 (Compiled frame)
 - org.apache.coyote.http11.InternalNioInputBuffer.readSocket(boolean, boolean) @bci=103, line=427 (Compiled frame)
...
 - org.apache.catalina.connector.CoyoteInputStream.read(byte[], int, int) @bci=76, line=200 (Compiled frame)
 - …
Run Code Online (Sandbox Code Playgroud)

java tomcat nio

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

由于模板基类而从不完整的类型初始化静态constexpr

我有一个模板基类,期望子类将自身作为模板参数传递。

看起来有点像这样:

template<typename T>
struct Base {
    constexpr Base(int x) : m_x(x) {}
private:
    int m_x;
};

struct Derived : public Base<Derived>
{
    static const Derived LIFE;
    constexpr Derived(int x) : Base(x) {}
};

const Derived Derived::LIFE = Derived(42);
Run Code Online (Sandbox Code Playgroud)

编译并按预期工作。但是现在我想将Derived :: LIFE设为constexpr。这有可能吗?

我不能只将它的const限定符更改为constexpr,因为constexpr需要在其声明中进行初始化:

test.cpp:10:28: error: constexpr static data member ‘LIFE’ must have an initializer
   static constexpr Derived LIFE;
Run Code Online (Sandbox Code Playgroud)

由于Derived是不完整的类型,因此无法在其中初始化:

test.cpp:10:45: error: invalid use of incomplete type ‘struct Derived’
   static constexpr Derived LIFE = Derived(42);
Run Code Online (Sandbox Code Playgroud)

我知道,如果Derived是完整类型,则此问题将消失,但是由于与该问题无关的原因,在这种特殊情况下,我非常喜欢使用自引用模板化基类。

如果我正确地理解了此答案的最后一段,听起来似乎至少有一些讨论会在将来的某个时候更改不完整类型的处理方式,但是现在对我无济于事。

有人知道我上面的代码中有一些技巧可以推迟LIFE的初始化吗?

c++ templates constexpr c++11

3
推荐指数
2
解决办法
1656
查看次数

为什么std :: atomic :: compare_exchange_xxx()的预期参数不是const&?

我相信我即将有一个面子,但这里有:

原型std::atomic::compare_expected_*

bool compare_exchange_strong (T& expected, T val,
       memory_order sync = memory_order_seq_cst) volatile noexcept;
Run Code Online (Sandbox Code Playgroud)

为什么expected不是const T &

static const handle_t INVALID_HANDLE = 0;
...
std::atomic<handle_t> handle(INVALID_HANDLE);
...
handle.compare_exchange_strong(INVALID_HANDLE, newValue);
Run Code Online (Sandbox Code Playgroud)

当然交换方法不需要修改预期值吗?

c++ atomic std c++11

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

注释对proguard没有影响

我很难找到基于他们注释的东西(在Android下).

我有一个注释,com.example.Keep:

@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR })
public @interface Keep {
}
Run Code Online (Sandbox Code Playgroud)

我有一个类,它只是通过反射构建的:

public class Bar extends Foo {
    @com.example.Keep
    Bar(String a, String b) { super(a, b); }

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

它按预期工作(类保持其构造函数,虽然有一个模糊的类名)当我的proguard配置包括以下内容:

-keepattributes Signature,*Annotation*,SourceFile,LineNumberTable
-keepclassmembers class ** extends com.example.Bar {
<init>(...);
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试将其更改为:它会删除构造函数:

-keepattributes Signature,*Annotation*,SourceFile,LineNumberTable
-keepclassmembers class ** extends com.example.Bar {
@com.example.Keep <init>(...);
}
Run Code Online (Sandbox Code Playgroud)

我用自己的注释和proguard的annotation.jar注释看到了相同的行为.我已经复制并粘贴了Foo导入的注释名称Keep,所以我相信它不是拼写错误或导入错误.

谁能想到我可能会失踪的东西?

java android proguard

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