我有一个小maven(间接通过Netbeans 8.1和tomcat设置)
每当我运行项目时,它会在根目录上打开带有HelloWord的浏览器:
即页面http://localhost:8084/是:
<html>
<head>
<title>Start Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我试图创建一个servlet来替换它:
@WebServlet(name = "HomeServlet", urlPatterns = {"/"}) 但是,它没有按预期工作.
即它仍然表现出同样的问候世界: http://localhost:8084
但它确实搞乱了根目录上的所有文件,即http://localhost:8084/foo.css由这个servlet处理并获得响应.
所以,我的问题是(实际上是两个):
如何将此页面的内容更改为其他内容?
或者,至少(如果前者不可能):我可以在根路径上使用永久重定向来避免用户看到此页面吗?
(即http代码301)将用户移动到 http://localhost:8084/home
我知道Ruby中有几个库。但是我必须创建自己的(出于学习目的)。
我正在考虑两种方法:
哈希,而键是以下形式的字符串
myhash["row.col"] 因此当元素不存在时,我可以使用默认值零。
或创建一个稀疏类,然后检查元素以返回其值:
class SparseMatrix < Array
require 'contracts'
include Contracts
attr_accessor :value, :array
attr_reader :row, :col
@@array = Array.new
Contract Num, Num, Num => nil
def initialize(value,row,col)
@value = value
@row = row
@col = col
end
def self.all_instances
@@array
end
Contract Num, Num => Num
def getElement(row,col)
flag = false
array.each do |x|
if x.row == row && x.col == col
return x.value
end
end
0
end
end
Run Code Online (Sandbox Code Playgroud)
我不希望这是主观的,我想知道大多数使用的设计模式会更符合逻辑吗?(我的问题是因为“ row.col”一开始似乎比较容易,它还涉及从/到字符串/数字的多次转换,并且可能存在性能问题。(我是ruby的新手,所以我不确定)
我的Android工作室设置如下:
classpath "me.tatarka:gradle-retrolambda:3.2.2"
classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用lambdas知道我能做什么或不做什么.
当我做以下代码时:
alertDialogBuilder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
Run Code Online (Sandbox Code Playgroud)
IDE变灰了,new DialogInterface.OnClickListener()告诉我它可以用lambda替换.没有更多或更少.看了几个 例子.我尝试过这样的事情:
alertDialogBuilder.setPositiveButton("Okay", (DialogInterface dialog) -> {
dialog.cancel();
});
Run Code Online (Sandbox Code Playgroud)
还有这些:
alertDialogBuilder.setNegativeButton((DialogInterface) d -> d.cancel());
Run Code Online (Sandbox Code Playgroud)
其中的错误:
错误:(99,64)错误:不兼容的类型:DialogInterface不是功能接口在接口DialogInterface中找到的多个非重写抽象方法
在这种情况下我应该如何使用lambda?
如果你看一下标准,你可以看到它们确实包括对C11和C99的支持.但是如果你试图在没有指定标准的情况下编译代码,GCC仍然会使用C89/C90.
这背后的原因是什么?
我的意思是在其他语言中,通常每当发布新标准时,编译器将被设置为遵循新规则.
为什么这种行为与gcc编译器不一样?
我有以下代码,它使用好旧的java:
List<Bar> repo = ArrayList<>();
public Bar foo(int id) {
for(Bar c: repo){
if(c.getId() == id)
return c;
}
Bar target = new Bar();
target.setFooo("");
target.setId(0);
return target;
}
Run Code Online (Sandbox Code Playgroud)
但是,我试图让它变得更好一些(即只是想学习lambdas)
public Bar foo(int id) {
Bar target = repo.stream().filter(c -> c.getId() == id)
.findFirst().orElse(null);
if(target == null){
target = new Bar();
target.setFooo("");
target.setId(0);
}
return target;
}
Run Code Online (Sandbox Code Playgroud)
但上面的代码返回一个ArrayOutOfBounds异常,我不确定如何(因为它是一个列表)或为什么.
java-8 ×2
lambda ×2
android ×1
c ×1
gcc ×1
hash ×1
homescreen ×1
java ×1
java-stream ×1
oop ×1
performance ×1
retrolambda ×1
ruby ×1
servlets ×1
standards ×1