我在尝试Java 8的Lambda表达式时遇到了问题.通常它工作正常,但现在我有方法可以抛出IOException
.最好看一下以下代码:
class Bank{
....
public Set<String> getActiveAccountNumbers() throws IOException {
Stream<Account> s = accounts.values().stream();
s = s.filter(a -> a.isActive());
Stream<String> ss = s.map(a -> a.getNumber());
return ss.collect(Collectors.toSet());
}
....
}
interface Account{
....
boolean isActive() throws IOException;
String getNumber() throws IOException;
....
}
Run Code Online (Sandbox Code Playgroud)
问题是,它不能编译,因为我必须捕获isActive-和getNumber-Methods的可能例外.但即使我明确使用如下所示的try-catch-Block,它仍然无法编译,因为我没有捕获异常.所以要么JDK中存在错误,要么我不知道如何捕获这些异常.
class Bank{
....
//Doesn't compile either
public Set<String> getActiveAccountNumbers() throws IOException {
try{
Stream<Account> s = accounts.values().stream();
s = s.filter(a -> a.isActive());
Stream<String> ss = s.map(a -> a.getNumber());
return ss.collect(Collectors.toSet());
}catch(IOException ex){
} …
Run Code Online (Sandbox Code Playgroud) 我想在网格中添加一个垂直分隔符,但我只能找到水平分隔符.是否有属性,如果分隔符的行应该是水平的还是垂直的,您可以在哪里输入?
我搜索了很多,但没有找到一个简短的解决方案.
我使用.Net Framework 4.0和Visual Studio Ultimate 2012.
如果我尝试将水平分隔符旋转90度,则会失去"停靠"到其他组件的能力.
旋转的分隔符如下所示:
<Separator HorizontalAlignment="Left" Height="100" Margin="264,26,0,0" VerticalAlignment="Top" Width="100" RenderTransformOrigin="0.5,0.5">
<Separator.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="90"/>
<TranslateTransform/>
</TransformGroup>
</Separator.RenderTransform>
</Separator>
Run Code Online (Sandbox Code Playgroud) 我想使用MVC开发一个应用程序.该应用程序将具有多个Windows和对话框(> 30个Windows/Dialogs).现在的问题是:我如何在这样的应用程序中应用MVC?
MVC-Tutorials通常只有一个Window,一个Controller和一个Model.
我宁愿使用一个包含所有视图的View-package,一个包含所有Controllers的Controller-package和一个包含所有Models的Model-package?
或者我会为每个Window/Dialog使用一个包并实现许多小型MVC?
最后一个问题:MVC是使用多个Windows/Dialogs的正确选择还是另一种模式是更好的解决方案?这可能取决于应用程序和每个Window/Dialog的功能,但是如果有一般要考虑的事情,那么知道:)会很高兴:)
编辑:对不起,我忘了,不认为这很重要.问题是关于Java/Swing.但是可能希望稍后切换到想到的任何东西.如果我使用Swing,SWT,GWT这很重要吗?
我想创建一个软件,用户可以在几种语言之间进行选择.
作为一个开始,我想学习如何处理国际化,因为我以前从未这样做过.
作为IDE我使用SharpDevelop或#develop,但你会拼写它.我想使用C#和WPF,因为我现在也在学习XAML/WPF.
所以我在ShardDevelop中创建了一个新的WPF项目.在主窗口上,我创建了一个ComboBox和一个TextBlock.
ComboBox获得两个条目:"德语"和"英语".textBlock应该显示"Hallo Welt!" 或"Hello World!",具体取决于所选的语言.
现在是我陷入困境的部分.我想每种语言都是XML/XAML-Style(有道理)的单独文件.这些文件在哪里以及如何加载它们及其内容以便加载所选语言的文本?
我发现了几个例子,但都是一些关于创建资源的DLL,并使用一些奇怪的程序进行反编译它们放回一个CSV文件......我不明白,是不是有一个更简单的方法?
我采取了下一步.现在通过"{StaticResource Strings.MainForm.hwText}"加载TextBlock的Text.它现在看起来像这样:
<TextBlock Text="{StaticResource Strings.MainForm.hwText}" />
Run Code Online (Sandbox Code Playgroud)
我还为德语创建了一个ResourceDictionary,为英语创建了一个ResourceDictionary,它们都定义了我在TextBlock中使用的键.
在Application.Resources Part i中,默认情况下加载一个ResourceDictionary.
现在的问题是:如何在运行时"卸载"这个词典并将其替换为另一个词典?
当然我使用ComboBox的SelectionChange-Event,但我在那里做什么?
问题解决了!!感谢kmatyaszek
虽然我根据我的需要改变了事件处理程序的代码:
Uri baseUri = new Uri(AppDomain.CurrentDomain.BaseDirectory);
Uri uri = new Uri(baseUri,"Languages\\lang."+((sender as ComboBox).SelectedItem as ComboBoxItem).Tag.ToString()+".xaml");
if(File.Exists(uri.LocalPath) || File.Exists((uri = new Uri(baseUri,"Languages\\lang.de-DE.xaml")).LocalPath)){
ResourceDictionary dict = new ResourceDictionary();
dict.Source = uri;
this.Resources.MergedDictionaries.Add(dict);
}
Run Code Online (Sandbox Code Playgroud) 我有一个抽象类:
public abstract class AbstractItem
Run Code Online (Sandbox Code Playgroud)
和几个具体的类:
public class ConcreteItem1 extends AbstractItem
public class ConcreteItem2 extends AbstractItem
public class ConcreteItem3 extends AbstractItem
Run Code Online (Sandbox Code Playgroud)
我也有一个自定义注释:
@Target(value = ElementType.TYPE)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation
Run Code Online (Sandbox Code Playgroud)
如何强制我的ConcreteItems使用MyAnnotation?我可以在AbstractItem-Class中以某种方式定义它吗?
是否存在某种与JRE一起提供的注册表,并且不会随JRE更新而更改?我想保存一些值 - 比如窗口位置,使用路径或许可证 - 但不想将它们保存到文件中.
另一种方法是加密文件(例如许可证文件)或xml文件(例如选项文件).