首先是一些上下文:下面粘贴的所有代码都在另一个声明为的类中public class TheClass extends SomeProprietaryClass.我不能出于各种原因在另一个文件中声明这些类...并且日志消息是法语.而且我是一个"最后快乐"的程序员.这是问题的核心......
现在,代码......(可能太多了 - 按要求剥离只保留相关部分)
自定义异常:
private static final class BreadCrumbException
extends Exception
{
private BreadCrumbException(final String message)
{
super(message);
}
private BreadCrumbException(final String message, final Throwable cause)
{
super(message, cause);
}
}
Run Code Online (Sandbox Code Playgroud)
用于"实现"面包屑元素可见性的枚举:
private enum Visibility
{
MAINPAGE("R"),
MENU("M"),
BREADCRUMB("A"),
COMMERCIAL("C");
private static final Map<String, Visibility> reverseMap
= new HashMap<String, Visibility>();
private static final String characterClass;
static {
final StringBuilder sb = new StringBuilder("[");
for (final Visibility v: values()) {
reverseMap.put(v.flag, v);
sb.append(v.flag);
} …Run Code Online (Sandbox Code Playgroud) 我试图在我的本地机器上配置几个gradle项目.这就是我做的:
命令行:
将目录更改为我要构建的项目.
./gradlew build
Run Code Online (Sandbox Code Playgroud)
它开始下载第一次非常正常.现在,每当我尝试构建此项目或使用相同版本的任何其他项目时,它首先下载gradle.
日食
我尝试导入Gradle项目,然后BuildModel它开始下载gradle,现在每次我尝试其他项目甚至尝试再次导入同一个项目时,它开始下载.
题?
这是正常的还是环境破裂了?如果以后是这种情况,我该如何解决?
我目前正在研究这个项目.它运作得非常好.
然而,在重新阅读README之后,我开始怀疑如何记录一些困扰我的东西......
引用这个例子,并忘记抛出异常,它的内容如下:
Files.list(somePath).map(Path::toRealPath).forEach(System.out::println)
Run Code Online (Sandbox Code Playgroud)
好.现在,Path涉及的方法就是这个.当然,我们没有通过任何LinkOption.
再说一遍:让我们忘记它抛出任何异常.
流的.map()需要Function作为参数.此接口用于Function<T, R>定义为:
R apply(T t);
Run Code Online (Sandbox Code Playgroud)
但我使用的方法不接受任何参数.乍一看,它似乎不匹配Function,对吗?除了那个...
它可以写成:
path -> path.toRealPath()
Run Code Online (Sandbox Code Playgroud)
因此,如果方法引用没有参数,或类似的东西,它看起来像使用的机制有点能够调用"流对象"上的方法...
我想相应地记录下来,我在这里遗漏了一些东西.
我错过了什么?
该的javadoc的Spliterator(这基本上是什么是真正的背后Stream,如果我理解正确的事情)定义了许多习性研究其意义如SIZED,CONCURRENT,IMMUTABLE等.
但它也定义了NONNULL; 为什么?
但是,我确定用户有责任确保这一点,例如,如果开发人员尝试.sort()使用无SORTED元素的非流媒体,他/她就会受到NPE的欢迎......
但是这个特征存在.为什么?的Javadoc,Spliterator本身并没有提到它的任何实际使用,而且也不该package-info.java在的java.util.stream包...
我最初的问题是这个问题的完全重复; 也就是说,为什么这个接口有一个运行时保留策略.
但是接受的答案根本不能满足我,原因有两个:
@Documented(我相信)与它无关(虽然为什么@Documented运行时保留策略对我来说也是一个谜);Comparable正如答案所提到的那样,但也Runnable等),这并不妨碍它们被用作"替代品"(例如,你可以完美地使用DirectoryStream.Filteras作为例如,Predicate如果您所做的只是过滤Path,则替换为a .但是,它仍有这种保留.这意味着它必须以某种方式影响JVM行为.怎么样?
示例代码:
public final class Test
{
public static void main(final String... args)
throws IOException
{
final Properties properties = new Properties();
properties.setProperty("foo", "bar:baz");
// Yeah, this supposes a Unix-like system
final Path path = Paths.get("/tmp/x.properties");
try (
// Requires Java 8!
final Writer writer = Files.newBufferedWriter(path);
) {
properties.store(writer, null);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我:
$ cat /tmp/x.properties
# The date here
foo=bar\:baz
Run Code Online (Sandbox Code Playgroud)
冒号用反斜杠逃脱.事实上,所有的冒号都是.
奇怪的是,如果我手动生成属性文件并且不 "冒走"冒号,那么也会读取属性.
那么,为什么编写过程Properties(无论你使用的方式Writer还是OutputStream顺便使用的方式)以这种方式逃避冒号?
Java 7 定义了该选项,但我仍然无法理解它的用处。
public static void main(final String... args)
throws IOException
{
final long offset = 1L << 31;
final RandomAccessFile f = new RandomAccessFile("/tmp/foo", "rw");
f.seek(offset);
f.writeInt(2);
f.close();
}
Run Code Online (Sandbox Code Playgroud)
当我查询文件“ shell wise”时,我得到了预期的结果:
$ cd /tmp
$ stat --format %s foo
2147483652
$ du --block-size=1 foo
4096 foo
Run Code Online (Sandbox Code Playgroud)
也就是说,inode真实地声明该文件的大小接近2 GB,但是由于基础fs的块大小为4k,因此其磁盘使用情况实际上是一个块。好。
但是我不需要Java 7 StandardOpenOption.SPARSE。实际上,如果我使用Java 7 JVM运行此完全相同的代码,则结果不会改变。
现在,转到一些仅Java 7的代码:
public static void main(final String... args)
throws IOException
{
final ByteBuffer buf = ByteBuffer.allocate(4).putInt(2);
buf.rewind();
final OpenOption[] options = {
StandardOpenOption.WRITE, …Run Code Online (Sandbox Code Playgroud) 虽然一开始完全不相关,但这个问题让我想知道......
Java 的正则表达式基于Strings;Strings 是 s 的序列(数组)char;和chars 最终是 UTF-16 代码单元。
后者意味着单个char可以匹配 BMP 内的任何 Unicode 代码点,即从 U+0000 到 U+FFFF。
然而,在 BMP 之外,char单个代码点需要两个s(一个用于前导代理,另一个用于尾随代理);从我所见,除了专用的语法引擎,我看不到 Java 正则表达式(由 定义java.util.regex.Pattern)为此类代码点定义“字符类”的方法,因为在BMP。
尽管可以编写代码来为此类范围生成正则表达式(好吧,用作正则表达式的字符串文字),但是否存在Pattern未记录在案并允许这样做的现有机制?
我的一个项目是throwing-lambdas;在其中,我的目标是简化@FunctionalInterfaces 中潜在s的使用Stream,其在流中使用的唯一“缺陷”是它们抛出已检查的异常(就我而言,我宁愿称其为有缺陷的事实,即您不能抛出已检查的异常来自流,但那是另一个故事)。
所以,因为Function<T, R>我定义了这个:
@FunctionalInterface
public interface ThrowingFunction<T, R>
extends Function<T, R>
{
R doApply(T t)
throws Throwable;
default R apply(T t)
{
try {
return doApply(t);
} catch (Error | RuntimeException e) {
throw e;
} catch (Throwable throwable) {
throw new ThrownByLambdaException(throwable);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这允许我定义,例如:
final ThrowingFunction<Path, Path> = Path::toRealPath;
Run Code Online (Sandbox Code Playgroud)
(为什么Path::toRealPath......好吧,正是因为它有一个省略号)。
不想停在这里,我希望能够写出这样的东西:
Throwing.function(Path::toRealPath).fallbackTo(Path::toAbsolutePath)
Run Code Online (Sandbox Code Playgroud)
以上几乎有效......继续阅读。
我也这样定义:
public abstract class Chainer<N, T extends N, C extends Chainer<N, …Run Code Online (Sandbox Code Playgroud) 我想使用Google的JIMFS创建用于测试目的的虚拟文件系统.不过,我很难入门.
我查看了这个教程:http://www.hascode.com/2015/03/creating-in-memory-file-systems-with-googles-jimfs/
但是,当我创建文件系统时,它实际上是在现有文件系统中创建的,即我不能这样做:
Files.createDirectory("/ virtualfolder");`因为我被拒绝访问.
我错过了什么吗?
目前,我的代码看起来像这样:
测试类:
FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
Path vTargetFolder = fs.getPath("/Store/homes/linux/abc/virtual");
TestedClass test = new TestedClass(vTargetFolder.toAbsolutePath().toString());
Run Code Online (Sandbox Code Playgroud)
Java类在某处:
targetPath = Paths.get(targetName);
Files.createDirectory(targetPath);
// etc., creating files and writing them to the target directory
Run Code Online (Sandbox Code Playgroud)
但是,我创建了一个单独的类来测试JIMFS,这里目录的创建并没有失败,但是我不能像这样创建一个新文件:
FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
Path data = fs.getPath("/virtual");
Path dir = Files.createDirectory(data);
Path file = Files.createFile(Paths.get(dir + "/abc.txt")); // throws NoSuchFileException
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
java ×9
java-8 ×4
java-stream ×2
lambda ×2
annotations ×1
command-line ×1
eclipse ×1
file-io ×1
filesystems ×1
final ×1
gradle ×1
gradlew ×1
java-7 ×1
jimfs ×1
jsr203 ×1
null ×1
regex ×1
unicode ×1