考虑这个例子(典型的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
?或者至少通过传递类型的类而不是虚拟实例. …
我正在使用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
IntelliJ IDEA中的快捷方式是移动或选择一个单词的单个单词?假设我有一个LongMultiWordVariableName,我希望能够将光标移动到每个单词进行编辑或选择部分变量.
Eclipse有一个快捷方式来执行此操作Ctrl+ ←/ →用于移动和Ctrl+ Shift+ ←/ →用于选择.
如何使用Tomcat从webapps外部的公用文件夹提供图像文件?我不想在不同的端口上使用第二个Apache文件服务器,因为图像文件是同一个应用程序的一部分.我不想在webapps中为公共文件夹创建一个符号链接,因为我的应用程序被部署为war文件....是否有一个更简单的解决方案,类似于在webapps中使用静态内容的默认servlet,用于外部webapps之外的静态内容
我正在使用Ctrl- ]在Vim中使用Ctags进行导航.如果有多个匹配项,如何导航到备用文件?
防爆.something.publish
在包含多次出现的代码库中publish
:
class Foo
def publish
end
end
class Bar
def publish
end
end
Run Code Online (Sandbox Code Playgroud) Java中的CRUD生成器实用程序是否像Rails中的Scaffolding一样?可以在任何框架甚至是普通的servlet中.必须在jsp中生成控制器+视图,而不仅仅是DAO代码......
vim-fugitive并排git diff非常适合查看未分段文件的差异.
我如何使用vim-fugitive来git diff
我在Emacs中使用Paredit来编辑Lisp代码.如何删除我意外插入的一对额外的parens?没有额外的命令,Paredit不允许这样做.
((square 5))
成 (square 5)
我有一个从地图中删除键的函数:
(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) java ×3
clojure ×2
vim ×2
crud ×1
ctags ×1
emacs ×1
generics ×1
git-diff ×1
lisp ×1
paredit ×1
return-value ×1
scaffolding ×1
ssh ×1
stack-trace ×1
tomcat ×1
vagrant ×1
vim-fugitive ×1
vimdiff ×1
virtualbox ×1
windows ×1