在库方法中调用String.getBytes("UTF-8")时,处理UnsupportedEncodingException的推荐方法是什么?
如果我正确地阅读http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html,UTF-8编码应始终可用,这让我相信没有将此异常传递给库的使用者的原因(即,throws
在方法签名中添加一个子句).似乎任何使UTF-8编码工具不可用的故障模式都是灾难性的,导致我编写这个处理程序:
try
{
....
return "blah".getBytes("UTF-8");
}
catch (UnsupportedEncodingException e)
{
// we're assuming UTF-8 encoding is always available.
// see
// http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html
e.printStackTrace();
return null; //prevent compile-time "method must return a result" errors
}
Run Code Online (Sandbox Code Playgroud)
是否存在此代码段无法解决的故障模式?
鉴于此代码:
List<Integer> ints = new ArrayList<Integer>();
// Type mismatch:
// cannot convert from Class<capture#1-of ? extends List> to Class<List<Integer>>
Class<List<Integer>> typeTry1 = ints.getClass();
// Type safety:
// Unchecked cast from Class<capture#2-of ? extends List> to Class<List<Integer>>
Class<List<Integer>> typeTry2 = (Class<List<Integer>>) ints.getClass();
// List is a raw type. References to generic type List<E> should be parameterized
Class<? extends List> typeTry3 = ints.getClass();
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有错误或警告Class
的List<Integer>
情况下获得?我可以很容易地抑制警告,但如果Java要求我禁止对这个有效代码发出警告,我会非常失望.
另一方面,如果警告抑制是唯一的方法,最安全的压制是什么?
是否可以引用具有部分限定名称的Java类型?如果是这样,怎么样?
场景:我经常发现自己有一个Activity
需要视图的数据类(例如).我的标准做法是命名这个有效的类ActivityView
,但是这个视图类总是以tld.organization.project.views
命名空间结束,其中"View"后缀完全是多余的.
我想删除"View"后缀(因此类型将是tld.organization.project.Activity
和tld.organization.project.views.Activity
),但这意味着当我在同一个类中引用它们时,我必须使用命名空间来限定类型.使用命名空间来限定类型引用本身并不是一件坏事,但重复任何一种类型的完全限定名称都是重复且难以阅读的.
引用部分限定类型(类似于~.Activity
或类似的东西~.views.Activity
)将删除那个残余.某种类型的别名会回答,但似乎Java不支持这种功能.还有其他选择吗?
是否有直接的方法来实现具有以下签名的方法?至少,实现需要处理原始类型(例如Double和Integer).非原始类型将是一个很好的奖金.
//Attempt to instantiate an object of type T from the given input string
//Return a default value if parsing fails
static <T> T fromString(String input, T defaultValue)
Run Code Online (Sandbox Code Playgroud)
对于实现FromString接口(或等效的)的对象,实现将是微不足道的,但我还没有找到任何这样的东西.我还没有找到使用反射的功能实现.
根据set_directory_properties 文档,目录上设置的属性应该传播到子目录:
\n\n\n\n\n设置当前目录和子目录的属性。
\n
根据支持的属性文档,COMPILE_DEFINITIONS 是目录支持的属性。
\n\n鉴于此,为什么目录的 COMPILE_DEFINITIONS 不传播到以下示例中的子目录?
\n\n- CMakeLists.txt\n- sub\n -CMakeLists.txt\n -main.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n根 CMakeLists.txt:
\n\ncmake_minimum_required(VERSION 2.8.11)\nproject(cmake_sandbox)\nadd_subdirectory(sub)\nset_directory_properties(PROPERTIES COMPILE_DEFINITIONS SHOW_MESSAGE=1)\n
Run Code Online (Sandbox Code Playgroud)\n\n子 CMakeLists.txt:
\n\nadd_executable(hello main.cpp)\n
Run Code Online (Sandbox Code Playgroud)\n\n主要.cpp:
\n\n#include <iostream>\nusing namespace std;\n\nint main()\n{\n #define A_LOCAL_MESSAGE\n #ifdef A_LOCAL_MESSAGE\n #pragma message("A local message!")\n #else\n #pragma message("No local message!")\n #endif\n\n #ifdef SHOW_MESSAGE\n #pragma message("A message!")\n #else\n #pragma message("No message!")\n #endif\n cout << "Hello, World!\\n";\n return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n … 我希望在CellTable中选择行时完全查看更新.如何才能做到这一点?在以下测试用例中,使用NoSelectionModel,视图仍然更新:单击一行会更改行的背景和边框颜色,直到单击另一行.
CellTable<String> table = new CellTable<String>();
TextColumn<String> column = new TextColumn<String>()
{
@Override
public String getValue(String string)
{
return string;
}
};
table.addColumn(column);
List<String> sampleData = Arrays.asList("foo", "bar", "baz");
table.setRowData(sampleData);
final NoSelectionModel<String> selectionModel = new NoSelectionModel<String>();
table.setSelectionModel(selectionModel);
RootPanel.get().add(table);
Run Code Online (Sandbox Code Playgroud)
我还尝试使用空覆盖方法对SingleSelectionModel进行子类化,但没有成功.
我可以通过为选定的行提供空的CSS样式来伪造我想要的行为,但是这种方法看起来很糟糕.
我需要读取UDP流量,直到达到超时.我可以通过在UDPConn上调用SetDeadline并循环直到我得到I/O超时错误来做到这一点,但这似乎是hack-ish(基于错误条件的流量控制).以下代码段似乎更正确,但不会终止.在生产中,这显然会在goroutine中执行; 为了简单起见,它是作为主要功能编写的.
package main
import (
"fmt"
"time"
)
func main() {
for {
select {
case <-time.After(time.Second * 1):
fmt.Printf("Finished listening.\n")
return
default:
fmt.Printf("Listening...\n")
//read from UDPConn here
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么给定的程序不会终止?基于https://gobyexample.com/select,https://gobyexample.com/timeouts和https://gobyexample.com/non-blocking-channel-operations,我希望上面的代码,选择默认的情况下,一秒钟,然后采取第一种情况,并打破循环.如何修改上面的代码段以实现循环和读取所需的效果,直到发生超时?
在Google App Engine上部署的应用程序中从数据存储区中分离对象时,我遇到了"无法分离"的异常,我无法在我的开发框中重现该异常.分离操作是服务器端的,因此我唯一的信息是应用程序日志文件中的异常日志.然而,堆栈跟踪被省略:例如,最深的内部异常以"...... 36多"结束.
如何调整应用程序日志记录的详细程度以包括完整的,非省略的堆栈跟踪?