小编cra*_*esh的帖子

检查类对象是否是Java中另一个类对象的子类

我正在玩Java的反射API并试图处理一些字段.现在我一直在确定我的领域类型.字符串很简单,就是这样myField.getType().equals(String.class).这同样适用于其他非派生类.但是我如何检查派生类?例如LinkedList作为的子类List.我找不到任何isSubclassOf(...)extends(...)方法.我是否需要getSuperClass()走遍所有人并自己找到我的supeclass?

java reflection class

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

检查字符串是否以另一个字符串开头:find或compare?

如果你想知道一个字符串是否以另一个字符串开头,那你将如何在C++/STL中做到这一点?在Java中String.startsWith,Python也有string.startwith,STL没有直接的方法.相反,有std::string::findstd::string::compare.到目前为止,我使用了两种方法,主要取决于我目前的心情:

if ( str1.compare( 0, str2.length(), str2 ) == 0 )
    do_something();
if ( str1.find(str2) == 0 )
    do_something();
Run Code Online (Sandbox Code Playgroud)

当然,你也可以做str.substr(0,str2.length()) == str2,也许还有其他一些方法可以达到同样的目的.find有点比较方便compare,但我看到更多人推荐compare这一点find.

但哪一个更受欢迎?有性能差异吗?它是依赖于实现的(GCC,VC++等)吗?

c++ string stl

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

EGit的兼容性 - 还是有替代品?

我正在使用Eclipse开发并使用git和gitorious来管理我的存储库.到现在为止,我在命令行中使用了git.我四处寻找将git集成到Eclipse中的方法,并找到了EGit.两年前也有人问过这个问题.但是由于EGit使用JGit,一个用Java编写的git 克隆,我担心它与原始git的兼容性.

我知道EGit缺少一些(可能很多)git的高级功能,因此我会将EGit用于日常基本用途,如提交,检出,拉动和推送,分支等,并使用git进行更高级 - 但不太频繁 - 任务.有经验吗?如果因为git和EGit不同意如何管理它们,我有可能不会使用EGit.

另一个问题:EGit有替代品吗?我找不到任何东西.

eclipse git egit

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

使用反射从抽象基类访问构造函数

我正在玩Java的Reflection.我有一个Base带构造函数的抽象类.

abstract class Base {
    public Base( String foo ) {
        // do some magic
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一些课程在扩展Base.它们没有太多逻辑.我想用Base构造函数实例化它们,而不必在这些派生类中编写一些代理构造函数.当然,我想用Reflection实例化那些派生类.说:

Class cls = SomeDerivedClass.class;
Constructor constr;
constr = cls.getConstructor( new Class[] { String.class } ); // will return null
Class clsBase = Base.class;
constr = clsBase.getConstructor( new Class[] { String.class } ); // ok
Base obj = (Base) constr.newInstance( new Object[] { "foo" } ); // will throw InstantiationException because it belongs to an abstract class …
Run Code Online (Sandbox Code Playgroud)

java reflection constructor

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

隐藏doxygen输出中的常见包

鉴于一些包装foo.bar.project.something.FirstModule foo.bar.project.something.SecondModule等,它们都有很长foo.bar.project.something的共同点.我如何告诉doxygen隐藏(或至少缩短)这些常见的包名,只打印FirstModule.SomeClassSecondModule.MyInterface在其输出中?

java doxygen

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

通过模板专门化继承

最近我发现了一个更容易进行模板特化而不是真正继承的情况.派生类只需实现一个纯虚函数,并且没有自己的成员.它是这样的:

#include <iostream>

class Interface {
public:
    virtual void calculate() = 0;
    virtual float getResult() = 0;
};

class Base : public Interface {
    float result;
public:
    Base() : result(1) {};
    virtual ~Base() {};

    virtual void calculate();
    virtual float getValue() = 0; // do some very complex calculation here

    float getResult() { return result; }
};

class DerivedA : public Base {
public:
    DerivedA() : Base() {};
    ~DerivedA() {};

    float getValue();
};

class DerivedB : public Base {
public:
    DerivedB() …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates

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

奇怪的回溯 - 错误在哪里?

我正在用C++开发一个图像处理应用程序.我已经看到很多编译器错误和回溯,但这个对我来说是新的.

#0  0xb80c5430 in __kernel_vsyscall ()
#1  0xb7d1b6d0 in raise () from /lib/tls/i686/cmov/libc.so.6
#2  0xb7d1d098 in abort () from /lib/tls/i686/cmov/libc.so.6
#3  0xb7d5924d in ?? () from /lib/tls/i686/cmov/libc.so.6
#4  0xb7d62276 in ?? () from /lib/tls/i686/cmov/libc.so.6
#5  0xb7d639c5 in malloc () from /lib/tls/i686/cmov/libc.so.6
#6  0xb7f42f47 in operator new () from /usr/lib/libstdc++.so.6
#7  0x0805bd20 in Image<Color>::fft (this=0xb467640) at ../image_processing/image.cpp:545
Run Code Online (Sandbox Code Playgroud)

这里发生了什么事?操作员new崩溃了,好的.但为什么?这不是内存不足(它试图分配大约128Kb,128x64像素,每个都有两个浮点数).此外,它不会接缝,因为它是我自己的代码中的错误(构造函数不会被触及!).

上述行(#7)中的代码是:

Image<Complex> *result = new Image<Complex>(this->resX, resY); 
// this->resX = 128, resY = 64 (both int), Complex is a typedef for std::complex<float>
Run Code Online (Sandbox Code Playgroud)

几乎相同的实例化在我的代码中的其他地方起作用.如果我注释掉这部分代码,稍后会在类似的部分崩溃.我不明白,我也没有任何想法,如何调试它.有帮助吗? …

c++ gdb backtrace

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

如何避免在重写Collection的方法中未经检查的强制转换?

我正在进行List实施.因此,我必须覆盖这些方法

Collection.containsAll(Collection<?> c);
Collection.removeAll(Collection<?> c);
Collection.retainAll(Collection<?> c);
Run Code Online (Sandbox Code Playgroud)

但正如Sun所解释的那样,他们接受任何类型内容的集合(请注意<?>).因此编译器不会检查集合,而是由我来检查它.但怎么办呢?instanceof由于类型擦除,每个元素都不起作用.下一个解决方案是将每个元素强制转换为ClassCastException.看这里:

public boolean containsAll( Collection<?> c ) {
    boolean foundAll = true;
    for ( Object element : c ) {
        try {
            foundAll &= this.contains( (T) element );
        } catch ( ClassCastException e ) {
            foundAll = false;
        }
    }
    return foundAll;
}
Run Code Online (Sandbox Code Playgroud)

其他两种方法看起来相似.这样可行.但它给了我编译器警告"警告:[unchecked] unchecked cast"!除非我用" @SuppressWarnings("unchecked")"来压制它,否则它将无法正常编译.

@SuppressWarnings("unchecked")除非我真的需要,否则我不想依赖" ".有没有办法避免它?你会如何实现这些方法containsAll(Collection<?> c)

编辑

对不起,伙计们,我还不够清楚.我不延伸AbstractList,我不想.我的列表由平衡二叉树实现.我有一个自己的实现的insert(),remove(),contains() …

java generics collections

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