我想做这样的事情:
private String getStringIfObjectIsPresent(Optional<Object> object){
object.ifPresent(() ->{
String result = "result";
//some logic with result and return it
return result;
}).orElseThrow(MyCustomException::new);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为ifPresent将Consumer功能接口作为参数,其具有void accept(T t).它不能返回任何值.还有其他办法吗?
我正在尝试在Windows 7 64位上使用Eclipse安装GlassFish 4.一切都很顺利,但是当我尝试设置服务器root时,会发生什么(dir存在):
在我的应用程序中,我使用两个Tabs.在第一个我放置HtmlEditor,在第二个我放置TextArea.HTML选项卡是默认的,当用户创建HTML输入时,他可以切换到TextArea以直接查看/更改HTML源代码.我添加了一个监听器来从HtmlEditor获取rhe htmlText并将其设置为TextArea中的文本,因此用户可以轻松地在HTML和源模式之间切换.这是我的倾听者:
@FXML
private Tab htmlTab;
@FXML
private Tab sourceTab;
@FXML
private HTMLEditor htmlEditor;
@FXML
private TextArea textEditor;
htmlTab.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (htmlTab.isSelected()) {
htmlEditor.setHtmlText(textEditor.getText());
}
}
});
sourceTab.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (sourceTab.isSelected()) {
textEditor.setText(htmlEditor.getHtmlText());
}
}
});
Run Code Online (Sandbox Code Playgroud)
它工作正常,但HtmlEditor自动将文本分成行.当我切换到TextArea时,它都在一行中.
我想过制作一个辅助方法,它采用TextArea长度属性来计算字符数,并在每个"n"字符中添加新的行字符,但也许有更好的解决方案?
假设我有一个包含对象的数组,我有一些员工(对象).他们都有:int age
, double salary
. 我想对这个数组进行排序,以便我的类实现Comparable <Employee>
.我做了一个方法:
public int compareTo(Employee other) {
return Double.compare(salary, other.salary);
}
Run Code Online (Sandbox Code Playgroud)
没关系,排序工作正常.但我正在排序double salary
.现在我想按顺序排序int age
现在呢?我做了一个方法:
public int compareAge(Employee other) {
return Integer.compare(age, other.age);
}
Run Code Online (Sandbox Code Playgroud)
我怎么Arrays.sort()
用这个呢?我希望有可能使用这两种方法 - 按工资排序,按年龄排序.谢谢你的帮助.
我知道它根本没有意义,但这只是我的实验.有3种类型(据我所知)支持方法substring()
.我不想制作这样的通用方法:
public static <T extends String & StringBuilder & StringBuffer> T substr3(T str) {
if (str.length() > 3) {
return (T) str.substring(0, 3);
}
return str;
}
Run Code Online (Sandbox Code Playgroud)
它不会像这样编译,因为您可以根据需要使用尽可能多的接口,但只能使用一个类作为有界类型.这种方法应该工作正常此3种类型:String
,StringBuilder
,StringBuffer
但问题是:如何设置3种类型的约束类型?
我在 TextField 上选择正确的操作时遇到问题。在 Java 类上:
@FXML
private TextField projectNameInput;
@FXML
private void clearProjectName(MouseEvent event) {
// some if - else statements
projectNameInput.clear();
}
Run Code Online (Sandbox Code Playgroud)
在 FXML 上,它看起来像这样:
<TextField fx:id="projectNameInput" onMouseClicked="#clearProjectName" GridPane.columnIndex="1">
Run Code Online (Sandbox Code Playgroud)
我尝试了大多数选项,在 Java 中我尝试过(作为 arg)Event、MouseEvent、ActionEvent,结合 FXMLonAction
等,但没有运气。我应该选择什么样的动作,当我在 TextField 上单击鼠标按钮时它会自动清除?
我有一个包含由url找到的链接的WebElement。我可以通过以下方式提取网址:
element.getAttribute("href");
Run Code Online (Sandbox Code Playgroud)
但是问题是:如何提取锚点,我正在尝试像这样:
webElement.getAttribute("linkText");
Run Code Online (Sandbox Code Playgroud)
它给了我空值。我100%确信此链接具有锚点。有什么办法获得锚点吗?它更加复杂,但是示例简化的代码可能如下所示:
WebDriver driver = new FirefoxDriver();
driver.get("http://stackoverflow.com/questions/tagged/java");
WebElement link = driver.findElement(By.linkText("Bicycles"));
System.out.println(link.getAttribute("href")); // shows http://bicycles.stackexchange.com/
System.out.println(link.getAttribute("linkText")); // shows null
Run Code Online (Sandbox Code Playgroud) 我有两个类的通用对象Generic<T, R>
:
Generic<TypeA, TypeB> genericOne;
Generic<TypeB, TypeC> genericTwo;
Run Code Online (Sandbox Code Playgroud)
我必须嘲笑:
when(someObject.someMethod(Matchers.<Generic<TypeA, TypeB>>any()))
.thenReturn(responseOne());
when(someObject.someMethod(Matchers.<Generic<TypeB, TypeC>>any()))
.thenReturn(responseTwo());
Run Code Online (Sandbox Code Playgroud)
问题是,由于类型擦除,mockito 不会看到这两个方法调用之间的区别——它都被识别为Generic<T, R>
类。
有什么办法可以区分这两种方法调用吗?
我有一个测试,它使用配置并在gitlab CI服务器上运行的MySQL数据库(gitlab-ci.yml).我希望在本地运行时禁用该测试(它使用的是内存数据库).有没有办法检查测试是否在GitLab Ci服务器上运行?就像是:
if(isRunningOnGitlabCi()) {
Assert.assertThat(...);
}
Run Code Online (Sandbox Code Playgroud)
也许有环境变量,我可以检查一下?
我正在尝试配置FlyWay与两个供应商一起使用-一个(H2)用于本地环境,另一个(Mysql)用于ci。
这是我的脚本补丁:
我的FlyWay bean配置:
@Bean(initMethod = "migrate")
Flyway flyway() {
Flyway flyway = Flyway
.configure()
.dataSource(dataSource(dataSourceProperties()))
.locations("classpath:db/migration/MySQL", "classpath:db/migration/H2")
.load();
return flyway;
}
@Bean
@Primary
@ConfigurationProperties("spring.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("spring.datasource")
public HikariDataSource dataSource(DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().type(HikariDataSource.class)
.build();
}
Run Code Online (Sandbox Code Playgroud)
和我的application.yml配置:
spring:
main:
allow-bean-definition-overriding: true
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/messages
username: username
password: password
Run Code Online (Sandbox Code Playgroud)
我试图实现的目标是使flyway运行数据库供应商特定的脚本,具体取决于在数据源中设置的数据库。这是我得到的:
Caused by: org.flywaydb.core.api.FlywayException: Found more than one migration with version 1.1
Offenders:
-> C:\Projects\my-project\out\production\resources\db\specific\MySQL\V1_1__Create_table_message.sql (SQL)
-> C:\Projects\my-project\out\production\resources\db\specific\H2\V1_1__Create_table_message.sql (SQL)
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用小写的供应商名称(db / migration …
这对我来说没有意义.
第一个例子:
例1(好):
public static void main(String args[]){
try {
Exception e = null;
throw e;
} catch (Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
这些代码一切都很好 - 异常被抛出和捕获.
例2(坏):
public static void main(String args[]){
try {
Exception e = null;
throw e;
} catch (NullPointerException e) {
}
}
Run Code Online (Sandbox Code Playgroud)
这将无法编译,因为catch块无法捕获NullPointerException
哪个是子类Exception
.它不知道会抛出什么样的异常.
java.lang.Object
java.lang.Throwable
java.lang.Exception --> Thrown
java.lang.RuntimeException
java.lang.NullPointerException --> Cannot catch like this
Run Code Online (Sandbox Code Playgroud)
所以让我们将异常更改为NullPointerException
:
例3(好)
public static void main(String args[]) {
try {
NullPointerException e = null;
throw …
Run Code Online (Sandbox Code Playgroud) 这是我的简化代码:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MockitoSpringBootTest {
@MockBean
private MyBean myBean;
@Before
private void before(){
Mockito.when(myBean.getSomeString()).thenReturn("TEST"));
}
}
@Service
private class TestClass {
@Autowired
private MyBean myBean;
@PostConstruct
public void initialize() {
myBean.getSomeString(); //SmartNull - method is not stubbed yet
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要存根MyBean
方法,然后任何其他具有此对象自动装配的类将运行@BeforeClass
方法。现在@Before
方法是在@PostConstruct
任何自动装配这个 bean 的类之后执行的(不止一个)。
MyBean 自动装配为模拟,但方法未存根,所以我得到:“此未存根方法调用返回的 SmartNull 对模拟:”
有没有办法在 Spring 容器初始化中设置模拟 bean 的优先级?
我被一些看似obvoius的东西所吸引,但这不适合我.我们有一个hashSet和Iterator:
Set<String> set = new HashSet<>();
Iterator it = set.iterator();
Run Code Online (Sandbox Code Playgroud)
我知道,迭代器是如何工作的,但对我来说有些奇怪:
Iterator*it = set.iterator();**
*ok,等等.Iterator是一个接口,而不是一个类.那么......?
**好吧,set是HashSet类的一个对象,它实现了接口Iterator,所以ith有一个void interator()imlemented,没什么不寻常的.
但是我们如何从Iterator接口创建Iterator对象?