小编Joh*_*uhn的帖子

Java的代码/模板生成器

对于C#,我经常使用CodeSmith,最近使用的是T4生成器,它是Visual Studio的一部分.

我正在寻找类似于Java的东西,尤其是Eclipse插件,因为我使用Eclipse IDE进行了所有Java开发.

java templates code-generation

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

django cms搜索多个站点?

我在django cms的单个实例中设置了多个站点,并使用haystack进行搜索(使用Solr).但是,我得到的search_indexes.py似乎没有任何效果.就像它被忽略了一样,使用了一个默认的.为什么我的search_indexes.py没有生效?

我有以下内容:

settings.py:

HAYSTACK_SITECONF = 'mysite.search_sites'
Run Code Online (Sandbox Code Playgroud)

search_sites.py:

from cms.models import monkeypatch_reverse
import haystack

monkeypatch_reverse()
haystack.autodiscover()
Run Code Online (Sandbox Code Playgroud)

mysite的/应用/ search_indexes.py:

from django.conf import settings
from django.utils.translation import string_concat, ugettext_lazy
from django.utils.html import strip_tags

from haystack import indexes, site

from cms.models.managers import PageManager
from cms.models.pagemodel import Page
from cms.models.pluginmodel import CMSPlugin

def page_index_factory(lang, lang_name):
    if isinstance(lang_name, basestring):
        lang_name = ugettext_lazy(lang_name)

    def get_absolute_url(self):
        if 'cms.middleware.multilingual.MultilingualURLMiddleware' in settings.MIDDLEWARE_CLASSES:
            return '/%s%s' % (lang, Page.get_absolute_url(self))
        else:
            return Page.get_absolute_url(self)

    class Meta:
        proxy = True
        app_label = 'cms'
        if …
Run Code Online (Sandbox Code Playgroud)

django search django-cms

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

为什么在这里使用方法引用或lambda为何如此重要?

当我尝试编译这段代码时

import java.util.Optional;

public class GenericTest {

    public static void main(String[] args) {
        Optional.empty().map(o -> getStringClass(o)).orElse(String.class);
    }

    static Class<?> getStringClass(Object arg) {
        return String.class;
    }

}
Run Code Online (Sandbox Code Playgroud)

javac将失败,并显示以下错误:

GenericTest.java:6:错误:类别Optional中的方法orElse无法应用于给定类型;
                Optional.empty()。map(o-> getStringClass(o))。orElse(String.class);
                                                            ^
  必需:Class <CAP#1>
  找到:类<String>
  原因:参数不匹配;Class <String>无法转换为Class <CAP#1>
  其中T是类型变量:
    T扩展了在Optional类中声明的Object
  CAP#1是新鲜的类型变量:
    CAP#1扩展了对象的捕获范围
1个错误

但是,如果我改用方法引用,则javac会很好地编译代码:

import java.util.Optional;

public class GenericTest {

    public static void main(String[] args) {
        Optional.empty().map(GenericTest::getStringClass).orElse(String.class);
    }

    static Class<?> getStringClass(Object arg) {
        return String.class;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果使用方法引用或lambda表达式,为什么会有区别?

根据我的理解,方法引用和lambda都具有type Function<Object,Class<?>>,所以在这里我看不到区别。
Eclipse Java编译器(ecj)不会同时编译两个版本。

java lambda javac method-reference

6
推荐指数
2
解决办法
169
查看次数

TCL中基于C10K的基于事件的服务器开发状态如何?

TCL是一个不错的简单的编程语言,但似乎并没有得到信贷和/或尊重,值得.我在1995年在大学时学到了这一点,并且很快忘记了它,最近又偶然发现了它.我最感兴趣的是TCL开发基于TCP的网络服务以及Web开发.

已经提到TCL使网络编程变得简单.但是,似乎TCL在封面下使用了select(),并且在考虑"Web规模"的情况下不能很好地扩展(参见C10K问题).我已经搜索了对libevent,libev,raw epoll/kqueue的支持,但我看不太多.

你知道用TCL编写的任何"现代"(缺乏更好的术语)基于事件的网络服务吗?您是否有基于TCL的服务器开发的指针,技巧或最佳实践?

谢谢!

networking events epoll tcp tcl

5
推荐指数
1
解决办法
616
查看次数

快速开发Java中的Web应用程序

我需要非常快速地(1周)开发一个基本的Web应用程序来进行演示.

我的要求是

  • Java(我需要利用现有的Java库来访问相关数据)
  • 2个屏幕
  • 一个用于静态数据视图,可能是一些搜索参数
  • 其他用于基本表单输入
  • 不需要花哨的AJAX
  • 对于网页设计师来说,理想情况下可以轻松地进入并根据需要进行调整,而无需重写所有内容

我的第一站是检查Wicket,因为我听说过它的好消息.我现在没有时间潜入任何沉重的事情,这可能在我的脑海中写下了JSF(我玩JSF1,陡峭的学习曲线,我现在已经滑倒了).

我很高兴将结果视为一次性,所以如果有一个框架开始很好,但是没有扩展到更大的项目,那就没关系.

对框架/方法表示赞赏的任何建议.

java web-applications

5
推荐指数
3
解决办法
5947
查看次数

Mongo集合通过过滤器查找ID

要从mongo集合中查找一个项目,我正在尝试将过滤器应用于集合.但是有一个编译错误如下.

在此输入图像描述

此代码取自官方mongodb文档

var filter = Builders<BsonDocument>.Filter.Eq("_id", id);
var result = _collection.Find(filter);
Run Code Online (Sandbox Code Playgroud)

c# mongodb mongodb-query

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

java jvm 11 不启动

操作系统:Windows 10 Java:11.0.1

我设置环境变量

set JAVA_HOME=<null>

set CLASSPATH=<null>

set PATH='d:\java\jdk-11.0.1\bin
Run Code Online (Sandbox Code Playgroud)

正在运行的 cmd

版本

正在运行的 cmd

java -version
Run Code Online (Sandbox Code Playgroud)

返回此错误:

虚拟机初始化时出错
java.lang.IllegalArgumentException:空字符集名称
    在 java.nio.charset.Charset.lookup(java.base/Charset.java:455)
    在 java.nio.charset.Charset.defaultCharset(java.base/Charset.java:608)
    在 java.lang.StringCoding.decode(java.base/StringCoding.java:316)
    在 java.lang.String.(java.base/String.java:592)
    在 java.lang.String.(java.base/String.java:614)
    在 java.lang.System.initProperties(java.base/Native Method)
    在 java.lang.System.initPhase1(java.base/System.java:1942)

我试试

java -Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)

同样的错误

我的 jdk8 没问题

我的 jdk 11 在公司电脑上没问题

什么?

java windows jvm java-11

5
推荐指数
1
解决办法
695
查看次数

如何为测试启用“--enable-preview”?

如何在基于 Kotlin 的 Gradle 脚本中为测试启用“--enable-preview”?我几乎尝试了所有我可以在网上找到的东西,/sf/answers/4329483931/是最接近正确答案的。

我仍然收到以下:test任务错误

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 'com.blabla.playground.AppTest'.
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
Caused by: java.lang.UnsupportedClassVersionError: Preview features are not enabled for com/blabla/playground/AppTest (class file version 58.65535). Try running with '--enable-preview'
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)

Run Code Online (Sandbox Code Playgroud)

按脚本是

plugins {
    java
    application
}

repositories {
    jcenter()
}

dependencies {
    implementation("com.google.guava:guava:28.2-jre")
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.0")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.6.0")
}

application {
    mainClassName = "com.blabla.playground.App"
}

java {
    sourceCompatibility = JavaVersion.VERSION_14
    targetCompatibility = JavaVersion.VERSION_14
}

tasks {
    withType<Test>().all {
        allJvmArgs.add("--enable-preview")
        testLogging.showStandardStreams = true
        testLogging.showExceptions …
Run Code Online (Sandbox Code Playgroud)

java gradle kotlin preview-feature

5
推荐指数
1
解决办法
632
查看次数

JDK11 到 JDK12 迁移 java.lang.NoSuchFieldException:修饰符

下面的函数破解了“HttpURLConnection#methods”静态字段(通过 Java 反射)。我正在使用反射来对我的代码功能进行单元测试。我发现我们无法更改 JDK12 中的静态最终字段。我找到了一种使用 unsafe 的解决方案,但我不确定如何使用 unsafe 让此函数在 JDK12 中工作。

protected static void allowMethods(String... methods) {
    try {
        Field methodsField = HttpURLConnection.class.getDeclaredField("methods");

        Field modifiersField = Unsafe.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true);
        modifiersField.setInt(methodsField, methodsField.getModifiers() & ~Modifier.FINAL);

        methodsField.setAccessible(true);

        String[] oldMethods = (String[]) methodsField.get(null);
        Set<String> methodsSet = new LinkedHashSet<>(Arrays.asList(oldMethods));
        methodsSet.addAll(Arrays.asList(methods));
        String[] newMethods = methodsSet.toArray(new String[0]);

        methodsField.set(null/*static field*/, newMethods);
    } catch (NoSuchFieldException | IllegalAccessException e) {
        throw new IllegalStateException(e);
    }
}  
Run Code Online (Sandbox Code Playgroud)

这是上述代码的堆栈跟踪:

Caused by: java.lang.IllegalStateException: java.lang.NoSuchFieldException: modifiers
at pii.rest.call.RestUtils.allowMethods(RestUtils.java:75)
at pii.rest.call.JobAbort.<clinit>(JobAbort.java:39)
Caused by: java.lang.NoSuchFieldException: modifiers
at java.base/java.lang.Class.getDeclaredField(Class.java:2549) …
Run Code Online (Sandbox Code Playgroud)

java reflection unit-testing static-block

5
推荐指数
0
解决办法
1万
查看次数

如何使用EasyMock

期望似乎对我不起作用:

    package com.jjs.caf.library.client.drafting;

import static org.junit.Assert.*;

import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;

import com.jjs.caf.library.client.CustomerManager;
import com.jjs.caf.library.client.UserBookLimiter;

public class DraftTest {

    UserBookLimiter userBookLimiter;
    int expected = 5;

    @Before
    public void setUp() throws Exception {
        userBookLimiter = EasyMock.createMock(UserBookLimiter.class);
        EasyMock.expect(userBookLimiter.getMaxNumberOfBooksAllowed()).andReturn(5);
    }

    @Test
    public final void test() {
        assertEquals(expected, userBookLimiter.getMaxNumberOfBooksAllowed());
    }

}
Run Code Online (Sandbox Code Playgroud)

它应该是5,但我得到0,好像期望不会在那里...

java easymock

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