小编Sat*_*ish的帖子

如何使方法返回类型通用?

考虑这个例子(典型的OOP书籍):

我有一个Animal班级,每个人都Animal可以有很多朋友.
和子类一样Dog,Duck,Mouse等它添加特定的行为一样bark(),quack()等等.

这是Animal班级:

public class Animal {
    private Map<String,Animal> friends = new HashMap<>();

    public void addFriend(String name, Animal animal){
        friends.put(name,animal);
    }

    public Animal callFriend(String name){
        return friends.get(name);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里有一些代码片段有很多类型转换:

Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());

((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();
Run Code Online (Sandbox Code Playgroud)

有什么办法可以使用泛型来返回类型来摆脱类型转换,这样我就可以说了

jerry.callFriend("spike").bark();
jerry.callFriend("quacker").quack();
Run Code Online (Sandbox Code Playgroud)

这里有一些返回类型的初始代码作为一个从未使用过的参数传递给方法.

public<T extends Animal> T callFriend(String name, T unusedTypeObj){
    return (T)friends.get(name);        
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在运行时找出返回类型而不使用额外的参数instanceof?或者至少通过传递类型的类而不是虚拟实例. …

java generics return-value

557
推荐指数
11
解决办法
64万
查看次数

如何使用堆栈跟踪或反射找到方法的调用者?

我需要找到一个方法的调用者.是否可以使用堆栈跟踪或反射?

java stack-trace

378
推荐指数
8
解决办法
25万
查看次数

SSH到Windows中的Vagrant框?

我正在使用Vagrant在Windows中启动VirtualBox VM.在其他平台上,我可以

$ vagrant ssh
Run Code Online (Sandbox Code Playgroud)

连接到VM.

如何在Windows中连接到此Vagrant框?

在Vagrant文​​档中建议使用PuTTy的方式也不起作用:

http://docs-v1.vagrantup.com/v1/docs/getting-started/ssh.html

windows ssh virtualbox virtual-machine vagrant

170
推荐指数
7
解决办法
16万
查看次数

如何在IntelliJ IDEA中选择骆驼字的单个单词

IntelliJ IDEA中的快捷方式是移动或选择一个单词的单个单词?假设我有一个LongMultiWordVariableName,我希望能够将光标移动到每个单词进行编辑或选择部分变量.

Eclipse有一个快捷方式来执行此操作Ctrl+ / 用于移动和Ctrl+ Shift+ / 用于选择.

keyboard-shortcuts intellij-idea

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

如何配置Tomcat从webapps外部的外部文件夹提供图像?

如何使用Tomcat从webapps外部的公用文件夹提供图像文件?我不想在不同的端口上使用第二个Apache文件服务器,因为图像文件是同一个应用程序的一部分.我不想在webapps中为公共文件夹创建一个符号链接,因为我的应用程序被部署为war文件....是否有一个更简单的解决方案,类似于在webapps中使用静态内容的默认servlet,用于外部webapps之外的静态内容

tomcat

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

如何在Vim中导航多个ctags匹配?

我正在使用Ctrl- ]在Vim中使用Ctags进行导航.如果有多个匹配项,如何导航到备用文件?

防爆.something.publish在包含多次出现的代码库中publish:

class Foo
  def publish
  end
end

class Bar
  def publish
  end
end
Run Code Online (Sandbox Code Playgroud)

vim ctags exuberant-ctags

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

Java(任何框架)中是否有一个CRUD生成器实用程序,如Rails中的Scaffolding?

Java中的CRUD生成器实用程序是否像Rails中的Scaffolding一样?可以在任何框架甚至是普通的servlet中.必须在jsp中生成控制器+视图,而不仅仅是DAO代码......

java ruby-on-rails crud scaffolding

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

如何使用vim-fugitive查看任何提交的git diff?

vim-fugitive并排git diff非常适合查看未分段文件的差异.

我如何使用vim-fugitive来git diff

  • 分阶段的文件?
  • 任何git修订版?

vim vimdiff git-diff vim-fugitive

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

如何在Paredit模式下删除额外的parens?

我在Emacs中使用Paredit来编辑Lisp代码.如何删除我意外插入的一对额外的parens?没有额外的命令,Paredit不允许这样做.

((square 5))(square 5)

lisp emacs clojure paredit

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

如何从地图中删除多个键?

我有一个从地图中删除键的函数:

(defn remove-key [key map]
  (into {}
        (remove (fn [[k v]] (#{key} k))
                map)))

(remove-key :foo {:foo 1 :bar 2 :baz 3})
Run Code Online (Sandbox Code Playgroud)

如何使用多个键应用此功能?

(remove-keys [:foo :bar] {:foo 1 :bar 2 :baz 3})
Run Code Online (Sandbox Code Playgroud)

我有一个使用循环... recur的实现.在Clojure中有更惯用的方法吗?

(defn remove-keys [keys map]
  (loop [keys keys
         map map]
    (if (empty? keys)
      map
      (recur (rest keys) (remove-key (first keys) map)))))
Run Code Online (Sandbox Code Playgroud)

clojure

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